Dhrystone is an integer performance benchmark, originally developed in 1984 by Reinhold P. Weicker using the Ada programming language. Dhrystone is a droll play on Whetstone, the name of a famous floating point benchmark.

The program itself is relatively small (~100 high level language statements) and is dominated by simple integer arithmetic, string operations, logic decisions, and memory accesses. These were the instructions deemed at the inception of version 1.0 to best represent the CPU activities in most general purpose computing applications. It performs no I/O functions or operating system calls.

One measurement output by the benchmark is the Dhrystone per second. This is calculated by executing all the operations above in a main loop several times, and taking an average. However, this is not the most common unit of measurement used when reporting Dhrystone results.

More frequently quoted for a processor is the Dhrystone Millions of Instructions Per Second (DMIPS) value. This quantity is quite different from that of the raw MIPS measurement and unlike MIPS allows comparisons to be made between different CPU architectures, especially between those of the CISC and RISC variety. It is effectively a relative scale, based on a reference machine that was chosen to have its Dhrystones/second value equate to 1 DMIPS - the VAX 11/780, which achieved a Dhrystones/second score of 1757. So for example, a system that has a Dhrystones/second rating of 17570 is 10 times faster than the VAX 11/780 and rated at 10 DMIPS.

Another measurement sometimes used is DMIPS/MHz, which normalises the DMIPS values to allow a comparison to be made between the performance of processors that run at different clock speeds. Along with the benchmark result, the publisher will usually also quote the version of Dhrystone used.

Version 1.1 was the most commonly used version and was a port of version 1.0 to the C programming language performed by Rick Richardson. The latest version, published in 1988, is version 2.1 (a bug fix over version 2.0) and is also written in C (with official versions available in Ada and Pascal). It is still widely used in industry by microprocessor manufacturers to advertise processor integer performance, but version 1.1 is still sometimes used - although the author has been quoted as saying "Relying on MIPS v1.1 numbers can be hazardous to your professional health."

The reasoning behind this comes from a number of flaws:

  • Due to its size (~1-1.5KB when compiled) the program can be stored in a system's cache memory, requiring no main memory access thus becoming more representative of CPU, rather than system performance.
  • Modern compilers can heavily optimise the program by removing unneccesary operations, causing comparisons to systems using older compilers to become unrepresentative of the true performance difference.
  • Some other techniques can allow for even more optimisation at compile time - such as converting the code to ANSI C instead of the Kernighan & Ritchie variety, or combining the two source files into one module.
In an attempt to remedy some of these issues a set of guidelines were released with version 2.1 regarding compilation. Finally another problem, which is version independent, is the lack of a mechanism to verify the legitimacy of the results and the execution environment quoted by an organisation. So like most synthetic benchmarks, it is wise to take published Dhrystone results with a grain of salt.

Resources:
 "Dhrystone Benchmark: Rationale for Version 2 and Measurement Rules" by Reinhold P. Weicker, August 1988
 "Benchmarking in Context: Dhrystone" by Richard York, ARM Ltd, March 2002