We are pleased to announce the release of the SPLASH-2 suite of 
multiprocessor applications.  SPLASH-2 is the successor to the SPLASH 
suite that we previously released, and the programs in it are also 
written assuming a coherent shared address space communication model.  
SPLASH-2 contains several new applications, as well as improved versions 
of applications from SPLASH.  The suite is currently available via 
anonymous ftp to 

     www-flash.stanford.edu (in the pub/splash2 subdirectory)
     
and via the World-Wide-Web at 

     http://www-flash.stanford.edu/apps/SPLASH/  

Several programs are currently available, and a few others will be added 
shortly.  The programs fall into two categories: full applications and 
kernels.  Additionally, we designate some of these as "core programs" 
(see below).  The applications and kernels currently available in the 
SPLASH-2 suite include: 

Applications: 
  Ocean Simulation
  Ray Tracer
  Hierarchical Radiosity
  Volume Renderer
  Water Simulation with Spatial Data Structure
  Water Simulation without Spatial Data Structure
  Barnes-Hut  (gravitational N-body simulation)
  Adaptive Fast Multipole (gravitational N-body simulation)

Kernels:
  FFT
  Blocked LU Decomposition
  Blocked Sparse Cholesky Factorization
  Radix Sort

Programs that will appear soon include:

  PSIM4 - Particle Dynamics Simulation (full application)
  Conjugate Gradient (kernel)
  LocusRoute (standard cell router from SPLASH)
  Protein Structure Prediction
  Protein Sequencing
  Parallel Probabilistic Inference
 
In some cases, we provide both well-optimized and less-optimized versions 
of the programs.  For both the Ocean simulation and the Blocked LU 
Decomposition kernel, less optimized versions of the codes are currently
available.

There are important differences between applications in the SPLASH-2 suite
and applications in the SPLASH suite.  These differences are noted in the
README.SPLASH2 file in the pub/splash2 directory.  It is *VERY IMPORTANT*
that you read the README.SPLASH2 file, as well as the individual README 
files in the program directories, before using the SPLASH-2 programs.  
These files describe how to run the programs, provide commented annotations
about how to distribute data on a machine with physically distributed main 
memory, and provides guidelines on the baseline problem sizes to use when 
studying architectural interactions through simulation.  

Complete documentation of SPLASH2, including a detailed characterization 
of performance as well as memory system interactions and synchronization 
behavior, will appear in the SPLASH2 report that is currently being 
written.  


OPTIMIZATION STRATEGY:
----------------------

For each application and kernel, we note potential features or 
enhancements that are typically machine-specific.  These potential 
enhancements are encapsulated within comments in the code starting with 
the string "POSSIBLE ENHANCEMENT."  The potential enhancements which we 
identify are:

  (1) Data Distribution

      We note where data migration routines should be called in order to 
      enhance locality of data access.  We do not distribute data by 
      default as different machines implement migration routines in
      different ways, and on some machines this is not relevant.

  (2) Process-to-Processor Assignment
  
      We note where calls can be made to "pin" processes to specific
      processors so that process migration can be avoided.  We do not
      do this by default, since different machines implement this 
      feature in different ways.

In addition, to facilitate simulation studies, we note points in the 
codes where statistics gathering routines should be turned on so that 
cold-start and initialization effects can be avoided.

For two programs (Ocean and LU), we provide less-optimized versions of 
the codes.  The less-optimized versions utilize data structures that 
lead to simpler implementations, but which do not allow for optimal data 
distribution (and can generate false-sharing).


CORE PROGRAMS:
--------------

Since the number of programs has increased over SPLASH, and since not 
everyone may be able to use all the programs in a given study, we 
identify some of the programs as "core" programs that should be used
in most studies for comparability.  In the currently available set, 
these core programs include: 

(1) Ocean Simulation
(2) Hierarchical Radiosity
(3) Water Simulation with Spatial data structure
(4) Barnes-Hut
(5) FFT
(6) Blocked Sparse Cholesky Factorization
(7) Radix Sort 

The less optimized versions of the programs, when available, should be 
used only in addition to these.

The base problem sizes that we recommend are provided in the README files 
for individual applications.  Please use at least these for experiments
with upto 64 processors.  If changes are made to these base parameters 
for further experimentation, these changes should be explicitly stated 
in any results that are presented.
