=============================================== STREAM is the de facto industry standard benchmark for measuring sustained memory bandwidth. Documentation for STREAM is on the web at: http://www.cs.virginia.edu/stream/ref.html =============================================== NEWS =============================================== UPDATE: October 28 2014: "stream_mpi.c" released in the Versions directory. Based on Version 5.10 of stream.c, stream_mpi.c brings the following new features: * MPI implementation that *distributes* the arrays across all MPI ranks. (The older Fortran version of STREAM in MPI *replicates* the arrays across all MPI ranks.) * Data is allocated using "posix_memalign" rather than using static arrays. Different compiler flags may be needed for both portability and optimization. See the READ.ME file in the Versions directory for more details. * Error checking and timing done by all ranks and gathered by rank 0 for processing and output. * Timing code uses barriers to ensure correct operation even when multiple MPI ranks run on shared memory systems. NOTE: MPI is not a preferred implementation for STREAM, which is intended to measure memory bandwidth in shared-memory systems. In stream_mpi, the MPI calls are only used to properly synchronize the timers (using MPI_Barrier) and to gather timing and error data, so the performance should scale linearly with the size of the cluster. But it may be useful, and was an interesting exercise to develop and debug. =============================================== UPDATE: January 17 2013: Version 5.10 of stream.c is finally available! There are no changes to what is being measured, but a number of long-awaited improvements have been made: * Updated validation code does not suffer from accumulated roundoff error for large arrays. * Defining the preprocessor variable "VERBOSE" when compiling will (1) cause the code to print the measured average relative absolute error (rather than simply printing "Solution Validates", and (2) print the first 10 array entries with relative error exceeding the error tolerance. * Array index variables have been upgraded from "int" to "ssize_t" to allow arrays with more than 2 billion elements on 64-bit systems. * Substantial improvements to the comments in the source on how to configure/compile/run the benchmark. * The proprocessor variable controlling the array size has been changed from "N" to "STREAM_ARRAY_SIZE". * A new preprocessor variable "STREAM_TYPE" can be used to override the data type from the default "double" to "float". This mechanism could also be used to change to non-floating-point types, but several "printf" statements would need to have their formats changed to accomodate the modified data type. * Some small changes in output, including printing array sizes is GiB as well as MiB. * Change to the default output format to print fewer decimals for the bandwidth and more decimals for the min/max/avg execution times. =============================================== UPDATE: February 19 2009: The most recent "official" versions have been renamed "stream.f" and "stream.c" -- all other versions have been moved to the "Versions" subdirectory and should be considered obsolete. The "official" timer (was "second_wall.c") has been renamed "mysecond.c". This is embedded in the C version ("stream.c"), but still needs to be externally linked to the FORTRAN version ("stream.f"). The new version defines entry points both with and without trailing underscores, so it *should* link automagically with any Fortran compiler. =============================================== STREAM is a project of "Dr. Bandwidth": John D. McCalpin, Ph.D. john@mccalpin.com =============================================== The STREAM web and ftp sites are currently hosted at the Department of Computer Science at the University of Virginia under the generous sponsorship of Professor Bill Wulf and Professor Alan Batson. ===============================================