Dhrystone
From Wikipedia, the free encyclopedia
Dhrystone is a synthetic computing benchmark program developed in 1984 by Reinhold P. Weicker intended to be representative of system (integer) programming. The Dhrystone grew to become representative of general processor (CPU) performance until it was superseded by the CPU89 benchmark suite from the Standard Performance Evaluation Corporation, today known as the "SPECint" suite.
With Dhrystone, Weicker gathered meta-data from a broad range of software - including programs written in FORTRAN, PL/1, SAL, ALGOL 68, and Pascal. He then characterized these programs in terms of various common constructs - procedure calls, pointer indirections, assignments, etc. From this he wrote the Dhrystone benchmark to correspond to a representative mix. Dhrystone was published in Ada, with the C version for Unix developed by Rick Richardson ("version 1.1") greatly contributing to its popularity.
Contents |
[edit] Dhrystone vs Whetstone
The Dhrystone benchmark contains no floating point operations, thus the name is a pun on the then-popular Whetstone benchmark for floating point operations. The output from the benchmark is the number of Dhrystones per second (the number of iterations of the main code loop per second).
Both Whetstone and Dhrystone are synthetic benchmarks, meaning that they are simple programs that are carefully designed to statistically mimic some common set of programs. Whetstone, developed in 1972, originally strove to mimic typical Algol 60 programs based on measurements from 1970, but eventually became most popular in its Fortran version. Whetstone thus reflected the highly numerical orientation of computing in the 1960s.
[edit] Issues addressed by Dhrystone
Dhrystone's eventual importance as an indicator of general-purpose ("integer") performance of new computers made it a target for commercial compiler writers. Various modern compiler static code analysis techniques (such as dead code elimination) make the use and design of synthetic benchmarks more difficult. Version 2.0 of the benchmark, released by Weicker and Richardson in March of 1988, had a number of changes intended to foil a range of compiler techniques. Yet it was carefully crafted so as not to change the underlying benchmark. This effort to foil compilers was only partly successful. Dhrystone 2.1, released in May of the same year, had some minor changes and remains the current definition of Dhrystone.
Other than issues related to compiler optimization, various other issues have been cited with the Dhrystone. Most of these were understood at the time of its publication in 1984 - including the small code size and small data set size. More subtle is the slight over-representation of string operations, which is largely language related: both Ada and Pascal have strings as first class citizens in the language, whereas C does not, so what was simple variable assignments in reference benchmarks became buffer copy operations in the C library.
Dhrystone remains remarkably resilient as a simple benchmark, but its continuing value in establishing true performance is questionable. It is easy to use, well documented, is fully self-contained, is well understood, and can be made to work on almost any system. In particular, it has remained in broad use in the embedded computing world, though the recently developed EEMBC benchmark suite as well as HINT, Stream, and even Bytemark are widely quoted and used, as well as more specific benchmarks for memory subsystem (Cachebench), TCP/IP (TTCP), and many others.
Still, 20 years of continued use is quite a testament to Weicker's careful design and foresight.
[edit] Results
Dhrystone tries to represent the result more meaningfully than MIPS (million instructions per second), because MIPS cannot be used across different instruction sets (e.g. RISC vs. CISC) for the same computation requirement from users. Thus, the main score is just Dhrystone loops per second. Another common representation of the Dhrystone benchmark is the DMIPS - Dhrystone MIPS - obtained when the Dhrystone score is divided by 1,757 (the number of Dhrystones per second obtained on the VAX 11/780, nominally a 1 MIPS machine).
[edit] Criticisms
Using Dhrystone as a benchmark has many pitfalls: it features unusual code that is not usually representative of real-life programs. It is also susceptible to compiler optimisations.
For example, it does a lot of string copying in an attempt to measure string copying performance. However, the strings in Dhrystone are of known constant length and their starts are aligned on natural boundaries, two characteristics usually absent from real programs. Therefore an optimizer can replace a string copy with a sequence of word moves without any loops, which will be much faster. This optimization therefore overstates system performance, sometimes by more than 30%.
Dhrystone is no longer at all useful for performance measurement of systems, as the compiler, operating system and its small code size (allowing it to fit in cache) make it representative of a smaller and smaller subset of programs. Even its author has held this view for a long time now. [1]
[edit] See also
[edit] References
[edit] Notes
[edit] Bibliography
- Weicker, Reinhold. "Dhrystone: A Synthetic Systems Programming Benchmark" Communications of the ACM (CACM), Volume 27, Number 10, October 1984, p. 1013-1030.