BeBOP SpMV benchmark
====================

Compiling
---------
First look in the makes directory to see if there's a makefile for your 
particular platform.  The platform names are extensions; the filenames 
take the form Make.<platform>.  If there is a makefile already available 
for your platform, just type 'make arch=<platform>' to compile.  
Otherwise, create an architecture-specific makefile first and 
then compile with 'make arch=<platform>'.

Running
-------
The executable is located in the hpcc_spmv_benchmark directory and is 
named hpcc_spmv_benchmark.  To run, use the command

./hpcc_spmv_benchmark <time limit> <memory limit> [runall]

where the time limit is an integer number of minutes to limit the 
runtime to, and the memory limit is an integer number of megabytes of 
memory to limit the amount of memory used by the benchmark to.  Runall 
is an optional flag that, if set (just type 1 as the third argument to 
do that), ignores the time limit.

Output is reported as four MFLOP rates:

	  | Max | Median
----------|-----|-------
Unblocked |     |
----------|-----|-------
Blocked   |     |
----------|-----|-------

Also files with the MFLOP rate for each matrix created by the benchmark 
are output in the hpcc_spmv_benchmark directory, of the form 
mflops_<r>x<c>.csv, where <r>x<c> is the blocksize of the matrices.

Customization
-------------
Runtime parameters are set in the file main.c in the hpcc_spmv_benchmark 
directory and can be changed to set different parameters for the 
benchmark.  These are in a struct called bench_params.

row_blockdims - array of row block dimensions to test in the benchmark. 
should be in sorted order. also set n_row_blockdims to length of this 
array, and rmaxlen to the number of decimal digits in the largest 
element of row_blockdims.

col_blockdims - array of column block dimensions to test in the 
benchmark. should be in sorted order. also set n_col_blockdims to length 
of this array, and cmaxlen to the number of decimal digits in the 
largest element of col_blockdims.

nnz_per_row_min - minimum value for nnz/row in matrices generated by 
benchmark.

nnz_per_row_max - maximum value for nnz/row in matrices generated by 
benchmark.

mindim - minimum matrix dimension to test.

interval_fracs - statistics for nonzero band distribution of matrix 
entries. array of 10 doubles the ith of which represents the fraction of 
the matrix entries that appear in band i.    
