人人好,我是痞子衡,是正派搞手艺的痞子。本日痞子衡给人人引见的是微处置惩罚器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;
// ...
// 界说和初始化症结buffer
Next_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. 5
Bool_Glob: O.K. 1
Ch_1_Glob: O.K. A
Ch_2_Glob: O.K. B
Arr_1_Glob[8]: O.K. 7
Arr_2_Glob8/7: O.K. 1600010
Ptr_Glob->
Ptr_Comp: * 98008
Discr: O.K. 0
Enum_Comp: O.K. 2
Int_Comp: O.K. 17
Str_Comp: O.K. DHRYSTONE PROGRAM, SOME STRING
Next_Ptr_Glob->
Ptr_Comp: * 98008 same as above
Discr: O.K. 0
Enum_Comp: O.K. 1
Int_Comp: O.K. 18
Str_Comp: O.K. DHRYSTONE PROGRAM, SOME STRING
Int_1_Loc: O.K. 5
Int_2_Loc: O.K. 13
Int_3_Loc: O.K. 7
Enum_Loc: O.K. 1
Str_1_Loc: O.K. DHRYSTONE PROGRAM, 1'ST STRING
Str_2_Loc: O.K. DHRYSTONE PROGRAM, 2'ND STRING
Register option Selected.
Microseconds 1 loop: 4.53
Dhrystones / second: 220690
VAX MIPS rating: 125.61
个中最中心的数据就是Dhrystones / second的数值。
2.5 跑分榜
Roy Longbottom的网站网络纪录了许多款处置惩罚器的Dhrystone跑分效果,可移步他的网站链接检察 http://www.roylongbottom.org.uk/dhrystone%20results.htm#anchorAndroid
至此,微处置惩罚器CPU机能测试基准Dhrystone痞子衡便引见终了了,掌声在那里~~~
Comment here is closed