Dhrystone简介

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中,它能够被放进指令缓存中,所以它并不能严格的测量取指性能。
本文翻译自维基百科Dhrystone词条。有关Dhrystone与Coremark比较参看我另一篇文章《CoreMark简介》

  • 4
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CCS是Code Composer Studio的缩写,是德州仪器(Texas Instruments)开发的一款集成开发环境(IDE)。 Dhrystone是一个基准测试程序,用于测量计算机系统的性能。在CCS中,可以通过以下步骤找到Dhrystone例程: 1. 打开CCS,在"Project Explorer"视图中右键单击"New",选择"CCS Project"。 2. 在"Project Type"对话框中,选择"Empty Project",并为项目命名。 3. 在"New Project"对话框中,选择"TI ARM Compiler"作为编译器,选择目标设备和连接器脚本。 4. 选择"Finish"创建项目。 5. 在"Project Explorer"视图中右键单击项目名称,选择"New",然后选择"C File"。 6. 输入文件名并选择"Finish"。 7. 将下面的Dhrystone代码复制到新的C文件中: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> #define LOOPS 1000 static int dhrystone(int loops); int main(void) { clock_t start, end; double cpu_time_used; start = clock(); dhrystone(LOOPS); end = clock(); cpu_time_used = ((double) (end - start)) / CLOCKS_PER_SEC; printf("Dhrystone benchmark results:\n"); printf("Loops: %d\n", LOOPS); printf("Time: %f seconds\n", cpu_time_used); return 0; } static int dhrystone(int loops) { int i; int dhrystones_per_second; unsigned long delta; unsigned long count; unsigned long nsec_per_clock; unsigned long nsec_per_dhry; struct timeval start_timeval, end_timeval; count = 0; gettimeofday(&start_timeval, NULL); do { i = 100; do { i--; dhrystones_per_second = i; } while (i != 0); count++; gettimeofday(&end_timeval, NULL); } while ((end_timeval.tv_sec - start_timeval.tv_sec) < 1); delta = (end_timeval.tv_sec - start_timeval.tv_sec) * 1000000 + (end_timeval.tv_usec - start_timeval.tv_usec); nsec_per_clock = delta * 1000 / (count * 1000000); nsec_per_dhry = nsec_per_clock / dhrystones_per_second; return nsec_per_dhry; } ``` 8. 保存文件并编译项目。 9. 在CCS中运行程序,可以在控制台窗口中看到Dhrystone基准测试的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值