###########################################
# NAS Parallel Benchmarks 2&3             #
# MPI/F77/C                               #
# Revision 3.3                            #
# NASA Ames Research Center               #
# npb@nas.nasa.gov                        #
# http://www.nas.nasa.gov/Software/NPB/   #
###########################################

MPI Dummy Library


The MPI dummy library is supplied as a convenience for people who do
not have an MPI library but would like to try running on one processor
anyway. The NPB 2.x/3.x benchmarks are designed so that they do not
actually try to do any message passing when run on one node. The MPI
dummy library is just that - a set of dummy MPI routines which don't
do anything, but allow you to link the benchmarks. Actually they do a
few things, but nothing important. Note that the dummy library is 
sufficient only for the NPB 2.x/3.x benchmarks. It probably won't be
useful for anything else because it implements only a handful of
functions. 

Because the dummy library is just an extra goody, and since we don't
have an infinite amount of time, it may be a bit trickier to configure
than the rest of the benchmarks. You need to:

1. Find out how C and Fortran interact on your machine. On most machines, 
the fortran functon foo(x) is declared in C as foo_(xp) where xp is 
a pointer, not a value. On IBMs, it's just foo(xp). On Cray C90s, its
FOO(xp). You can define CRAY or IBM to get these, or you need to
edit wtime.c if you've got something else. 

2. Edit the Makefile to compile mpi_dummy.f and wtime.c correctly
for your machine (including -DCRAY or -DIBM if necessary). 

3. The substitute MPI timer gives wall clock time, not CPU time. 
If you're running on a timeshared machine, you may want to 
use a CPU timer. Edit the function mpi_wtime() in mpi_dummy.f
to change this timer. (NOTE: for official benchmark results, 
ONLY wall clock times are valid. Using a CPU timer is ok 
if you want to get things running, but don't report any results
measured with a CPU timer. )

TROUBLESHOOTING

o Compiling or linking of the benchmark aborts because the dummy MPI
  header file or the dummy MPI library cannot be found.
  - the file make.dummy in subdirectory config relies on the use
    of the -I"path" and -L"path" -l"library" constructs to pass
    information to the compilers and linkers. Edit this file to conform
    to your system.
