Dhrystone是于1984年由Reinhold P. Weicker设计的一套综合的基准程序,该程序用来测试CPU(整数)计算性能。其名“Dhrystone”是与另一算法“Whetsone”区分而设计的名字。
与Whetsone不同,Dhrystone并不包括浮点运算,其输出结果为每秒钟运行Dhrystone的次数,即每秒钟迭代主循环的次数。
Whetsone与Dhrystone
Whetsone与Dhrystone均为综合性代码,意即他们的代码均使用精心挑选过的简单的静态程序去模仿处理器经常遇见的程序。其中的whetsone是于1972年所开发,主要目的是模仿60个1970年后的程序算法。其最有名的版本为Fortran版,高度反映了60年代数字计算方向。
Dhrystone的问题
Dhrystone的重要性在于其能作为处理器整数计算性能的指标。很多现代的编译器应用了静态代码分析技术,会将对输出没有影响的代码忽略,这会使很多基准测试代码不能正常运行,包括早些版本的Dhrystone。之后Weicker于1988年开发出了2.0版本,并于同年五月开发出了2.1版本,基本解决了这一问题。此版本的代码与2010年6月所定义的Dhrystone代码相同,其作为一项基准已达数十年时间。
除了上文提到的编译器优化这一问题外,Dhrystone自开发时便有代码过小、数据过小的问题。另外,Dhrystone还有很多小问题,其中的一个典型为字符串操作的问题。在Ada和Pascal语言中均把字符串当作一个基本变量,而在C语言中并没有字符串这一变量,所以简单的变量赋值语句在C中变成了缓冲赋值语句。另一个问题是运行所得的分数对所使用的编译器、系统的优化程度均相关联,并不能准确的表示CPU的性能。
Dhrystone作为一款基准测试工具,使用时间已久,但根据它建立的评价性能的标准却有问题。它可以被轻易地使用,它的理论依据足够充分,该软件也完全独立,可以工作在绝大多数系统中。另外,在嵌入式计算领域中,虽然目前有EEMBC基准组合、HINT、Stream、Bytemark和更多的应用范围更小的特殊基准,比如存储器子系统(Cachebench)、TCP/IP(TTCP)等,他们已经被广泛论证并使用,Dhrystone目前的适用范围依然很广。
Dhrystone自Weicker开发起已使用了将近30年,其寿命已远超大多数的软件。
Dhrystone所代表的处理器分数比MIPS(million instructions per second 每秒钟执行的指令数)更有意义,因为在不同的指令系统中,比如RISC(Reduced Instruction Set Computer精简指令集计算机)系统和CISC(Complex Instruction Set Computer复杂指令集计算机)系统,Dhrystone的得分更能表现其真正性能。由于在一个高级任务中,RISC可能需要更多的指令,但是其执行的时间可能会比在CISC中的一条指令还要快。由于Dhrystone仅将每秒钟程序执行次数作为指标,所以可以让不同的机器用其自身的方式去完成任务。另一项基于Dhrystone的分数为DMIPS(DhrystoneMIPS),其含义为每秒钟执行Dhrystone的次数除以1757(这一数值来自于VAX 11/780机器,此机器在名义上为1MIPS机器,它每秒运行Dhrystone次数为1757次)。
另一种基于Dhrystone的分数为DMIPS/MHz,由于DMIPS与CPU频率具有正相关性,所以这一分数更容易比较不同的CPU在不同的时钟频率下运行Dhrystone的结果。
结论
综上,作为一项基准程序Dhrystone具有以下缺陷:
- 它的代码与具有代表性的实际程序代码并不相同。
- 它易受编译器影响。举例来说,在Dhrystone中有大量的字符串复制语句,用来测量字符串复制的性能。然而Dhrystone中字符串的长度不变,并且均开始于自然对齐的边界,这两点便与真实的程序不同。因此一个优化性能好的编译器能够在去掉循环的情形下通过一连串字的移动替代对字符串的复制,这将会块很多,可能会高达30%。
- Dhrystone代码量过小,在现代CPU中,它能够被放进指令缓存中,所以它并不能严格的测量取指性能。