当前位置:   article > 正文

CPU性能测试分析MIPS、DMIPS

dmips

一 what
MIPS: million instruction per second,表示每秒多少百万条指令,如 10MIPS ,表示每秒一千万条指令。

MIPS/MHz : 表示 CPU 在每 1MHz 的运行速度下可以执行多少个MIPS ,如 10MIPS/MHz,表示如果 CPU 运行在 1MHz 的频率下,每秒可执行一千万条指令,如果 CPU 运行在 5MHz 的频率下,每秒可执行五千万条指令。

DMIPS: Dhrystone MIPS,并非字面上每秒百万条指令的意思。它是CPU运行一个叫Dhrystone(整数运算)的测试程序时表现出来的相对性能高低的一个单位(很多场合人们也习惯用MIPS作为这个性能指标的单位)。

Dhrystone: 是于1984年由Reinhold P. Weicker设计的一套综合的基准程序,该程序用来测试CPU(整数)计算性能。其名“Dhrystone”是与另一算法“Whetsone”区分而设计的名字。与Whetsone不同,Dhrystone并不包括浮点运算,其输出结果为每秒钟运行Dhrystone的次数,即每秒钟迭代主循环的次数。
Dhrystone的重要性在于其能作为处理器整数计算性能的指标。很多现代的编译器应用了静态代码分析技术,会将对输出没有影响的代码忽略,这会使很多基准测试代码不能正常运行,包括早些版本的Dhrystone。之后Weicker于1988年开发出了2.0版本,并于同年五月开发出了2.1版本,基本解决了这一问题。
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具有以下缺陷:

  • 它的代码与具有代表性的实际程序代码并不相同。
  • 它易受编译器影响。举例来说,在Dhrystone中有大量的字符串复制语句,用来测量字符串复制的性能。然而Dhrystone中字符串的长度不变,并且均开始于自然对齐的边界,这两点便与真实的程序不同。因此一个优化性能好的编译器能够在去掉循环的情形下通过一连串字符的移动代替对字符串的复制,这将会块很多,可能会高达30%。所以我们在编译测试程序的时候,如果指定编译器的优化等级的话,我们会发现在不同的优化登记下,表现出来的性能指标会有差别,优化等级越高,性能指标越好,以下是一款芯片在不同的优化登记下的指标参数
    在这里插入图片描述
  • Dhrystone代码量过小,在现代CPU中,它能够被放进指令缓存中,所以它并不能严格的测量取指性能。

DMIPS/MHz: 表示 CPU 在每 1MHz 的运行速度下可以执行多少个DMIPS,由于DMIPS与CPU频率具有正相关性,所以这一分数更容易比较不同的CPU在不同的时钟频率下运行Dhrystone的结果。

从上面的几个概念来看,都是为了评估cpu的性能—cpu的计算速度,由此引申开来,在软件行业,都需要一个基准测试程序,来评估某种性能----比如CPU的运算效率或者内存效率,我们称之为benchmark。比如在评估cpu运算速度领域,就有上面提到的dhrystone,coremark,whetstone等等;在评估内存效率上,有mem_test等等;评估web功能的有Apache Benchmark,Redis-Beachmark等等
二 how

  • dhrystone软件如何测试性能呢?
    我们可以从网上搜到到dhrystone软件的source code。
    其实也就是三个文件,分别是dhry.h、dhry_1.c、dhry_2.c。如果是在linux环境下开发的话,我们需要配置好makefile,然后编译并生成可执行程序,运行即可;如果实在其他平台上,比如实在单片机ARM上开发的话,有些集成的IDE会自带这些功能,我们只需要porting过来即可,具体实现方法我没有研究过,可以在csdn上搜索查找类似的解决办法。
  • DMIPS如何测试?
    这里给一个github的代码下载地址:https://www.openwrtdl.com/wordpress/来测测路由器cpu性能跑分
    我们获取到dhrystone性能之后,如何将他转换成DMIPS,这个转换关系暂时还没有搜到

三 区别
根据以上介绍的基本概念以及知识,那么MIPS和DMIPS有什么区别呢?CPU性能的评估主要有两个方面:

  • 每秒钟能够执行的指令集数量
    显然MIPS反映的就是这方面的能力,这个能力由cpu的架构,内存memory的访问速度等硬件特性来决定
  • 每秒钟能够实现的工作数量
    DMIPS反应的就是这样的能力,这个能力除了包含第一部分的特性之外,还包括了这些指令集在实现我的测试程序的时候,是如何高效实现的呢?
    举例来说,一个PIC16xxx的cpu,运行在20MHz主频,MIPS=5;但是这些指令只能处理8bit数据,并且不能处理除法和乘法运算,另外一个是一个8088的cpu,主频是5MHz,因此我们可以说PIC16xx在某些方面的性能比8088更快(比如在只有加减法运算的场合),在另外一些场合,8088的运算速度会比PIC16xx的更快,所以仅仅看MIPS的值,并不能够有效的反映的一款cpu性能

四 转换公式
按照字面含义理解,DMIPS和MIPS之间似乎有一个转换公式,但是经过搜索相关内容,发现两者并没有一个直接的转换关系,因为两者完全是从不同角度去看待cpu性能的,参考https://www.edaboard.com/showthread.php?185429-How-to-convert-from-dmips-to-mips

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/516572
推荐阅读
相关标签
  

闽ICP备14008679号