http://parallel.nas.nasa.gov/MPI-IO/btio/btio-download.html
The primary change is this version is that it brings the MPI-IO codes
up to the Supercomputing '96 MPI-2 I/O chapter spec and is compatible
with the PMPIO Interim BETA release. A copy of the README file from
BTIO is attached below.
Sam Fineberg
fineberg@nas.nasa.gov
---------------------------- README ---------------------------------
MPI-2 I/O NAS Application I/O Benchmark
$Id: README,v 1.3 1997/03/11 20:24:48 fineberg Exp $
INTRODUCTION
------------
This is an second release of the NAS Application I/O
benchmark using the Fortran I/O and MPI-2 I/O (as defined at
Supercomputing '96) APIs. The description for this benchmark
is contained in RND Technical Report RND-92-016, "NHT-1 I/O
Benchmarks" by Carter, Ciotti, Fineberg, and Nitzberg (see URL
http://www.nas.nasa.gov/NAS/TechReports/RNDreports/RND-92-016/RND-92-016.html).
This code is based on the NPB 2.0 BT benchmark developed by R. Van
der Wijngaart, T. Harris, and M. Yarrow. Modifications of the NPB
2.0 package and all I/O code were created by Samuel A. Fineberg
(fineberg@nas.nasa.gov).
Codes contained within this package include:
BT: the normal NAS BT benchmark with no I/O
BT-epio: BT with embarrassingly parallel I/O
* every processor writes its own file
* files are not combined to create a single file as required by the
Application I/O benchmark spec
* This code is not a valid implementation of the Application
I/O benchmark
BTIO-fortran-direct: The application I/O benchmark using FORTRAN I/O
* Uses FORTRAN standard direct unformatted I/O
* writes to a single file
BTIO-simple-mpiio: Simple MPI-2 I/O implementation of the benchmark
* Uses MPI-2 I/O as a UNIX style interface
* Lots of seek operations
* Does not take advantage of collective I/O
BTIO-full-mpiio: Full MPI-2 I/O implementation of the benchmark
* Completely describes solution vector with MPI datatypes
* Uses collective I/O
* Can use collective buffering when used with PMPIO
REQUIREMENTS
------------
This package requires some manual configuration on any system. It has
been tested on:
- PMPIO Interim BETA (version 0.6.1)
- IBM SP2: with files residing on a PIOFS file system
* AIX 4.1.3
* PSSP 2.1
- Intel Paragon: with files residing on a PFS file system, and
* OSF/1 AD R1.4 beta
- SGI power challenge systems: with files residing on a
local UNIX file system
* IRIX 6.2
- Linux 2.0.18 based systems with files residing on a
local UNIX file system
To use the benchmark you will need the following:
- An MPI-1 message passing/MPI-2 I/O library
- A FORTRAN and C compiler
All of the MPI-2 I/O based codes should run on any MPI-2 I/O library
compliant with the Supercomputing 1996 draft of the MPI-2 I/O chapter.
Specifically, the MPI-2 I/O codes have been tested and were designed with
PMPIO Interim Beta release (0.6.1). The FORTRAN direct benchmark requires
the use of a file system that provides byte level file consistency since
all processes write to the same file. This includes any local UNIX file
system, PIOFS, and PFS. NFS across machines is NOT supported.
RUNNING BTIO
------------
This build procedure is only provided as a guide. There is a great deal
of variability on how libraries and include files are installed, so you
will need to create the make.def file correctly for your site.
1. Fill in the correct information in config/make.def, the file is self
documented.
2. Make any benchmark:
% make <benchmark> NPROCS=<nprocs> CLASS=<class> OFILE=<ofile>
<benchmark> can be:
* "bt" - NPB BT benchmark, no I/O
* "epio" - BT with embarrassingly parallel I/O
* "fortran" - BTIO with FORTRAN direct I/O
* "simple" - BTIO using simple MPI-2 I/O
* "full" - BTIO using full MPI-2 I/O
<nprocs> is the number of processors. This must be a perfect square,
i.e., 1, 4, 9, 16, 25, 36, ...
<class> This is the problem size, A, B, or C
<ofile> is the output file name. For the epio benchmark the output
files with be <ofile>.<proc> where <proc> is the rank of the process
writing each file. For other benchmarks this is the actual file name.
For example, to build the full MPI-2 I/O benchmark for 16 processes,
class A, and output to file /tmp/btio.A.16.out type:
% make full NPROCS=16 CLASS=A OFILE=/tmp/btio.A.16.out
3. The executable you created will be in the bin directory. You can
now run this code as you would any other MPI-2 I/O code. However, you
will probably want to create an input file (which must be called
"inputbt.data") so your run-time configuration options will not be set
as the default. Here is a sample input file:
# Iterations
200
# Write interval
5
# Collective Buffering Nodes (0 disables, > # available nodes is ignored)
0
# Collective Buffer Size (divisible by cb block size or ignored)
1048576
# Fortran unformatted record size unit (bytes) Linux=Paragon=IBM=1, SGI=4
1
The number of iterations must be 200 and the write interval must be 5
to produce a valid benchmark result. More or less iterations or a
different write interval (the number of iterations between write steps)
can be used for testing, but the code will not pass the verification
test with any other settings.
The collective buffering nodes parameter sets the MPI_Info object
"cb_nodes". The collective buffer size parameter sets the MPI_Info object
"cb_buffer_size". Both of these are operable for PMPIO 0.6.1 and will
be ignored if invalid values are provided.
The FORTRAN unformatted record size unit is the number of bytes per unit
for a fortran UNFORMATTED file. Therefore, when you open a file as follows:
open (unit=99, file=filenm,
$ form='unformatted', access='direct', recl=record_length)
The record length will be size "record_length" times this unit in bytes.
On SGIs, this unit is 4 (i.e., record length is in 32-bit words), on IBM,
Linux, and Intel Paragon systems this unit is 1 (i.e., record length is
in bytes).
While all parameters of the input file are not used for all codes, you must
have all of these lines in the input file, including the comment lines, even
if some unused lines are left blank.
4. Verify your results using the programs in ./verify.
4a. Make the Verify programs
% cd ./verify
% make
cc -g -O -c check.c
cc -g -lm check.o -o ../bin/check-verify; \
cp -f sample.A.verify sample.B.verify ../bin
cc -g -c -DDIM=64 -DRPT=40 btioverify.c -o btioverify64.o
cc -g btioverify64.o -o ../bin/btioverify.A
cc -g -c -DDIM=102 -DRPT=40 btioverify.c -o btioverify102.o
cc -g btioverify102.o -o ../bin/btioverify.B
cc -g -c -DDIM=12 -DRPT=12 btioverify.c -o btioverify12.o
cc -g btioverify12.o -o ../bin/btioverify.S
4b. Generate verify file, run "bin/btioverify.A", "bin/btioverify.B",
or "bin/btioverify.S" on your output file.
% cd bin
% btioverify.S bt.output.classS > bt.verify.classS
% btioverify.A bt.output.classA > bt.verify.classA
% btioverify.B bt.output.classB > bt.verify.classB
(where bt.output.classS is a class S output file, bt.output.classA is
a class A output file, and bt.output.classB is a class B output file)
4c. Check the verify file against the sample verify files.
% check bt.verify.classS sample.S.verify
Checking output file bt.verify.classS against reference file sample.S.verify
% check bt.verify.classA sample.A.verify
Checking output file bt.verify.classA against reference file sample.A.verify
Maximum difference = 6.00e-10 - verify suceeeds!
% check bt.verify.classB sample.B.verify
Checking output file bt.verify.classB against reference file sample.B.verify
Maximum difference = 6.00e-10 - verify suceeeds!
BUGS
----
- The build procedure is not automated enough.
- The API supported is the SC '96 draft, not the final MPI-2 I/O API.
- The FORTRAN 77 I/O code doesn't work with NFS file systems.
- The MPI-2 I/O based codes have only been tested with the PMPIO
implementation of the MPI-2 I/O chapter.
Please report any further bugs to fineberg@nas.nasa.gov.
-----
Samuel A. Fineberg Address: Numerical Aerodynamic Simulation
MRJ, Inc. NASA Ames Research Center M/S 258-6
Supercomputer Applications Segment Moffett Field, CA 94035-1000
e-mail: fineberg@nas.nasa.gov Phone: (415)604-4319(voice) (415)966-8669(FAX)
See my home page at URL: "http://www.dcs.uky.edu/~fineberg/"