1. Release 2 - December 8, 2008
    1. Known Problems
    2. Files
  2. Release 1 - May 5, 2008
    1. Fixed Problems

Release 2 - December 8, 2008

Known Problems

  • Line out of place in functionobjects.cpp near line 334.
    Moved the line to the correct location.
  • makefile.nt was not updated to include the new test files
    Fixed makefile.nt, posted update.


This is a demonstration of the performance of of function pointers, functors, and native comparison operators. Some compilers have difficulty instantiating simple functors.
A test to see if the compiler will correctly fold constants and simple constant math for simple types. Results may be surprising.
Similar to the abstraction penalty benchmark, this file tests what happens when we move from pointers to vector iterators and when we use reverse iterators. This tests the compiler supplied STL implementation in addition to the compiler itself. Some good compilers are crippled by bad STL implementations.

Release 1 - May 5, 2008

Fixed Problems

  • Some Linux distributions have incomplete MACH/gcc headers. I need a simple way to determine whether they have the TR1 headers or not. Unfortunately, I don't have any of those distributions. Related code is now commented out.
  • Some 64 bit Linux distributions don't like benchmark_stdint.hpp. Fix is posted, but really needs to be tested on more OSes.
  • At least one embedded compiler didn't like the order of templates in loop_unroll.cpp. Changed the template order.


Test to see if compilers will correctly unroll loops to hide instruction latency. Some compilers have problems expanding the templates, and most compilers have problems correctly unrolling the loops for best performance.
A test to see if the compiler will move loop invariant calculations out of the loop. Most compilers have room for improvement.
An expanded version of the original test, answering "what happens to performance when I wrap a value in curly braces?" Almost all compilers do well on the original summation tests, but they don't do nearly so well on simple sort routines using the same abstractions.
A utility program to print out information about the compiler version, OS, and machine environment - because it is nice to know which build of your compiler generated a particular report, and which of the 30 machines in your lab that it was run on.
Templated algorithms shared by several test files.
Shared result reporting and formatting functions for all tests, must work in C and C++.
Templated test functions shared by several test files.
Standard type definitions, required because some compilers still have not picked up C99 standard headers.
Shared timer function for all tests, must work in C and C++.
Make information for Unix based OSes. "make report" to build all binaries and start a benchmark run.
Make information for Windows. "nmake -f makefile.nt report" (in a shell/command prompt with the appropriate compiler variables set) to build all binaries and start a benchmark run.
License details, a copy can also be found at
Basic information about the benchmark suite: goals, rules, and instructions on how to build and run.