nas, a C code which is a revision of David Bailey's NASA kernel benchmark program.
The NAS benchmark program was developed around 1984, and measured computational performance on a representative range of realistic calculations. One motivation for this benchmark was to move beyond the LINPACK benchmark, which focussed on a single highly structured procedure.
Benchmarking computers has become much more difficult now that memory, I/O, multicores and distributed memory have all become significant factors in computing performance. Nonetheless, the NAS benchmarks provide an interesting insight into the floating point processing power of a system, and so, for this reason, a version of the program has been created that retains the functionality of the original, while being somewhat easier to transfer to other languages.
One might expect comparable numerical performance of C and FORTRAN programs. That this does not seem to happen for the C and FORTRAN90 versions of NAS reflects, most likely, the fact that the C version was "translated" in a fairly straightforward manner, resulting in some awkward and inefficient expressions; in particular, FORTRAN arrays which were multiply-indexed were implemented in C as vectors, with the resulting overhead of computing indices explicitly. Thus, it is likely that a more careful revision of the C source code would result in substantial performance improvements. I, on the other hand, am simply terribly relieved that the C code gets the right answers.
The computer code and data files described and made available on this web page are distributed under the MIT license
nas is available in a C version and a C++ version and a FORTRAN90 version and a MATLAB version and a Python version.
LINPACK_BENCH, a C code which measures the time taken by LINPACK to solve a particular linear system.
MATMUL, a C code which is an interactive matrix multiplication benchmark.