大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是微处理器CPU性能测试基准Dhrystone

  在嵌入式系统行业用于评价CPU性能指标的标准主要有三种:Dhrystone、MIPS、CoreMark,其中Dhrystone是一种古老的却历时30年而不衰的嵌入式系统处理器测试基准,至今仍为各大处理器生产厂商所采用。今天痞子衡就和大家详细聊一聊Dhrystone。

一、经典性能测试标准集

  在讲Dhrystone之前,痞子衡想先给大家简介一下20世纪70-80年代开始流行的几个性能测试标准,它们分别是Livermore、Whetstone、Linpack、Dhrystone,这四个性能测试标准也被合称为Classic Benchmark。这个网址简单介绍了四大经典性能测试标准历史 http://www.roylongbottom.org.uk/classic.htm。

  细心的朋友应该会注意到Dhrystone与另一标准Whetsone名字有点类似,其实Dhrystone就是为了与算法Whetsone区分而设计的。Whetsone于1972年所开发,主要目的是模仿60个1970年后的程序算法。其最有名的版本为Fortran版,高度反映了60年代数字计算方向。Dhrystone与Whetsone不同之处在于其并不包括浮点运算。

二、Dhrystone标准

  Dhrystone是由Reinhold P. Weicker在1984年提出来的一个基准测试程序,其主要目的是测试处理器的整数运算和逻辑运算的性能。Dhrystone首先用Ada语言发布,后来Rick Richardson为Unix开发了用C语言编写的Version 1.1,这个版本也成功的推动了Dhrystone的广泛应用。
  Dhrystone标准的测试方法很简单,就是单位时间内跑了多少次Dhrystone程序,其指标单位为DMIPS/MHz。MIPS是Million Instructions Per Second的缩写,每秒处理的百万级的机器语言指令数。DMIPS中的D是Dhrystone的缩写,它表示了在Dhrystone标准的测试方法下的MIPS。
  关于DMIPS有一个不得不注意的点,因为历史原因我们把在VAX-11/780机器上的测试结果1757 Dhrystones/s定义为1 DMIPS,因此在其他平台测试到的每秒Dhrystones数应除以1757,才是真正的DMIPS数值,故DMIPS其实表示的是一个相对值。

2.1 获取程序

  Dhrystone程序的最新版本是2.1,其实际上于1988年便已停更。Dhrystone并没有官网,所以想下载其源程序可能会有很多来源,有各种语言版本的实现,以及各种平台下的移植程序。
  Roy Longbottom,是一个来自英国政府计算机采购部门Central Computer and Telecommunications Agency (CCTA)的职员,他制作了一个PC性能测试结果网站,搜集了很多性能测试程序以及结果,其中便有Dhrystone,我们可以从他的网站下载Dhrystone源码(C语言版)。

核心程序下载 http://www.roylongbottom.org.uk/classic_benchmarks.tar.gz

  核心程序包下载后,在\classic_benchmarks\source_code\dhrystone2\下可找到源代码。详细文件目录如下:

\classic_benchmarks\source_code\dhrystone2\dhry.h          --关于兼容性的原型定义\dhry_1.c        --主程序入口\dhry_2.c        --算法子程序

  如果是移植到ARM Cortex-M平台下裸系统运行,一般只需要简单修改dhry.h和dhry_1.c文件即可,Dhrystone本身并没有太多移植工作,其源码本是用作在PC上运行的,而在嵌入式系统里运行仅需要把一些文件I/O的相关代码删除即可,此外就是计时函数和打印函数的重实现。

2.2 配置参数

  Dhrystone源码几乎没有提供配置选项,唯一一个能算得上的配置就是关于REG的宏定义,即你所选用的IDE和嵌入式平台是否支持regiser关键字。

2.3 程序解析

  让我们尝试分析Dhrystone主函数入口main:

void main (int argc, char *argv[])
{One_Fifty   Int_1_Loc;REG   One_Fifty   Int_2_Loc;One_Fifty   Int_3_Loc;REG   char        Ch_Index;Enumeration Enum_Loc;Str_30      Str_1_Loc;Str_30      Str_2_Loc;REG   int         Run_Index;REG   int         Number_Of_Runs;int         endit, count = 10;// ...// 定义和初始化关键bufferNext_Ptr_Glob = (Rec_Pointer) malloc (sizeof (Rec_Type));Ptr_Glob = (Rec_Pointer) malloc (sizeof (Rec_Type));Ptr_Glob->Ptr_Comp                    = Next_Ptr_Glob;// ...// 设置循环跑Dhrystone核心算法程序次数Number_Of_Runs = 5000;do{Number_Of_Runs = Number_Of_Runs * 2;count = count - 1;// 开始循环跑Dhrystone核心算法程序且记录累计消耗时间start_time();for (Run_Index = 1; Run_Index <= Number_Of_Runs; ++Run_Index){Proc_5();Proc_4();// ...}end_time();User_Time = secs;printf ("%12.0f runs %6.2f seconds \n",(double) Number_Of_Runs, User_Time);if (User_Time > 2){count = 0;}else{if (User_Time < 0.05){Number_Of_Runs = Number_Of_Runs * 5;}}}while (count >0);// ...// 最终信息的打印if (User_Time < Too_Small_Time){printf ("Measured time too small to obtain meaningful results\n");printf ("Please increase number of runs\n");printf ("\n");}else{Microseconds = User_Time * Mic_secs_Per_Second / (double) Number_Of_Runs;Dhrystones_Per_Second = (double) Number_Of_Runs / User_Time;Vax_Mips = Dhrystones_Per_Second / 1757.0;printf ("Microseconds for one run through Dhrystone: ");printf ("%12.2lf \n", Microseconds);printf ("Dhrystones per Second:                      ");printf ("%10.0lf \n", Dhrystones_Per_Second);printf ("VAX  MIPS rating =                          ");printf ("%12.2lf \n",Vax_Mips);printf ("\n");}// ...
}

2.4 结果格式

  当移植好Dhrystone程序后,便可以开始跑起来了,下面是一个主频100MHz的Pentium处理器跑分结果:

 Dhrystone Benchmark  Version 2.1 (Language: C)Final values:Int_Glob:      O.K.  5Bool_Glob:     O.K.  1Ch_1_Glob:     O.K.  ACh_2_Glob:     O.K.  BArr_1_Glob[8]: O.K.  7Arr_2_Glob8/7: O.K.     1600010Ptr_Glob->Ptr_Comp:       *  98008Discr:       O.K.  0Enum_Comp:   O.K.  2Int_Comp:    O.K.  17Str_Comp:    O.K.  DHRYSTONE PROGRAM, SOME STRINGNext_Ptr_Glob->Ptr_Comp:       *  98008 same as aboveDiscr:       O.K.  0Enum_Comp:   O.K.  1Int_Comp:    O.K.  18Str_Comp:    O.K.  DHRYSTONE PROGRAM, SOME STRINGInt_1_Loc:     O.K.  5Int_2_Loc:     O.K.  13Int_3_Loc:     O.K.  7Enum_Loc:      O.K.  1Str_1_Loc:     O.K.  DHRYSTONE PROGRAM, 1'ST STRINGStr_2_Loc:     O.K.  DHRYSTONE PROGRAM, 2'ND STRINGRegister option      Selected.Microseconds 1 loop:          4.53Dhrystones / second:      220690VAX MIPS rating:            125.61

  其中最核心的数据便是Dhrystones / second的数值。

2.5 跑分榜

  Roy Longbottom的网站收集记录了很多款处理器的Dhrystone跑分结果,可移步他的网站链接查看 http://www.roylongbottom.org.uk/dhrystone%20results.htm#anchorAndroid

  至此,微处理器CPU性能测试基准Dhrystone痞子衡便介绍完毕了,掌声在哪里~~~

欢迎订阅

文章会同时发布到我的 博客园主页、CSDN主页、微信公众号 平台上。

微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。

痞子衡嵌入式:微处理器CPU性能测试基准(Dhrystone)相关推荐

  1. CPU性能测试基准(Dhrystone)学习

    目录 简介 源码获取 缺陷 简介 Dhrystone是测量处理器运算能力的最常见基准程序之一,常用于处理器的整型运算性能的测量.程序是用C语言编写的,因此C编译器的编译效率对测试结果也有很大影响. D ...

  2. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU特性那些事(2)- RT685EVKA性能实测(Dhrystone)...

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的性能. 在前面的文章 i.MXRTxxx微控制器概览 里,痞子衡给大家简介过恩智浦半导体在2018 ...

  3. 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU特性介绍(2)- RT685EVKA性能实测(Dhrystone)...

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RTxxx系列MCU的性能. 在前面的文章 i.MXRTxxx微控制器概览 里,痞子衡给大家简介过恩智浦半导体在2018 ...

  4. 痞子衡嵌入式:微控制器CPU性能测试基准(EEMBC-CoreMark)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是微控制器CPU性能测试基准CoreMark. 在嵌入式系统行业用于评价CPU性能指标的标准主要有三种:Dhrystone.MIPS.Co ...

  5. 微控制器CPU性能测试基准CoreMark

    origin:https://www.cnblogs.com/henjay724/p/8729364.html 痞子衡嵌入式:微控制器CPU性能测试基准(EEMBC-CoreMark) 大家好,我是痞 ...

  6. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU特性那些事(2)- RT1052DVL6性能实测(CoreMark)...

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1xxx系列MCU的性能. 在前面的文章 i.MXRT1xxx微控制器概览 里,痞子衡给大家简介过恩智浦半导体在20 ...

  7. 《痞子衡嵌入式半月刊》 第 50 期

    痞子衡嵌入式半月刊: 第 50 期 这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期. 本期刊是开源项目(GitHub: JayHeng/pz ...

  8. 痞子衡嵌入式:盘点国内车规级MCU厂商

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是国内车规级MCU厂商及其产品. 在汽车电子领域,MCU的应用非常广泛,大到车身控制与动力总成,小到雨刷车窗等控制单元,都离不开MCU的身 ...

  9. 《痞子衡嵌入式半月刊》 第 19 期

    痞子衡嵌入式半月刊: 第 19 期 这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期. 本期刊是开源项目(GitHub: JayHeng/pz ...

最新文章

  1. Vue中的前后台交互
  2. 如何将低频内容应用转化为高频应用?
  3. 2018.10.18多校
  4. c语言程序设计学生程序查询,《c语言程序设计报告-学生信息管理系统》.doc
  5. python glob.glob使用
  6. 小程序读取几种不同格式json数据(小程序json解析)
  7. jedis mysql 数据结构_Redis的数据结构和内部编码
  8. js创建对象的几种常用方式小结(推荐)
  9. 什么是系统架构?系统架构的特点分析!
  10. IP与以太网的包收发操作
  11. python ca模块_23 Python常用模块(一)
  12. XMind中文破解版
  13. 计算机科学与技术导论课论文题目,优秀计算机专业导论论文题目 计算机专业导论论文题目哪个好...
  14. 软件测试视频课网盘,软件测试工程师必学视频教学全套五合一
  15. 银行卡验证(四要素)和银行联行号查询
  16. selenium之键盘操作
  17. Linux操作系统Maven【The JAVA_HOME environment variable is not defined correctly】
  18. 4本建模必读的书籍,每天学一点,获益匪浅
  19. 正则表达式中问号(?)的用法详解
  20. *Error* illegal LHS in continous assignment

热门文章

  1. 七牛利用JavaScript 上传图片到个人空间,并限制图片类型
  2. 【写博客常用】论文代写代发的骗局之我是如何查骗子的ip地址的
  3. ECharts数据可视化(二)
  4. 640万被盗的PlayStation账户在Dark Web上销售
  5. 3D地球的生成(一)——生成全球的3D图
  6. 24、AT 指令设置AP跟Station模式
  7. python读取tiff影像_科学网—利用python GDAL库读写geotiff格式的遥感影像方法 - 张伟的博文...
  8. 【YOLOv2原文+翻译】YOLO9000: Better, Faster, Stronger
  9. 2022Java春招面试,java工程师面试宝典
  10. 微软抓住GPT-4风口:AI可创建PPT 还能分析Excel图表数据