This utility will give you a good indicator of how fast your system is. Unlike other "bureaucratic" benchmarks, it has no options -- run it, and it will start spitting out numbers.

Below are the results of a run on 2x AMD 285 (2.6ghz)

Description of tests

QueueUserAPC Tokens/Sec: This test sets up two threads. The first thread queues a user APC to the second thread (this is just a request to the other thread to call a function). The second thread waits for the APC and then sends one to the first thread. This is called token passing, and it measures context switching speed, which is is a very important multiprocessing metric.

QueryPerformanceCounter: Pretty much the only method for obtaining high-resolution measurements that counts on Windows.

Clear: this just calls memset() in a loop.

atof / atoi / ftol: This measures the performance of Microsoft's implementation of certain C runtime library functions (ascii to float, ascii to int, float to int). The functions aren't particularly high-performance (converting "0.1" to a float takes 0.3 microseconds, which is ~300 nanoseconds, or 1,000 clock cycles.

SetWaitableTimer / Wait ringing event: This is another important measure of kernel's multitasking ability.

CRC32: This is simple integer math with table lookup.

Exception throwing / not throwing: Throws and catches an exception in a loop. Not throwing simply sets up a try..catch block but doesn't throw the exception.

time(): A C function that implements a 1-second resolution timer.

GetSystemTime() / GetLocalTime(): Win32 functions that return current time to within 15ms.

malloc/free: Repeatedly allocates a small block of memory and then frees it. Not a multi-threaded test.

GetFileAttributes: Tests how quickly file information can be retrieved from the system (if you don't have c:\pagefile.sys, this test measures something else :-)

Download

benchmark.exe

benchmark64.exe

I see a huge performance difference between 32- and 64-bit versions on Opteron 285s:

  • 64 bits are 35% better in context switching and QueryPerformanceTimer
  • more than twice as fast at clearing 10MB blocks, but par on clearing 100K blocks
  • 4 times as slow in throwing exceptions (surprise!)

Future developments

I expect to add more tests to this utility as the time goes on, but I promise not to change existing tests (to keep results forever valid).