Menu Close

FII RISC-V3.01 FII-PRX100-D (ARTIX-7, XC7A100T) XILINX FPGA 板Dhrystone 移植指南

在评估硬件时,基准通常被用于测量CPU(Central Processing Units,即中央处理器)的性能。它们是经过特殊设计的程序,可以多次迭代运行一系列特定操作。基准测试一般会注重评估CPU的某种特定运算能力,例如CPU的浮点运算性能。并且为此创建基准以用来模仿组件或系统上的相应工作负载。谈到CPU测试时,不可能绕过Dhrystone基准。与Livermore,Whetstone和Linpack一起,它们是上世纪80年代最受欢迎的“经典基准”。 Dhrystone测试UNIX(Uniplexed Information and Computing Service)系统的整数运算,而Whetstone测试小型计算机的浮点运算,Linpack测试工作空间的浮点运算,Livermore测试超级计算机的数值运算。在这里,FII在FII-PRX100-D (ARTIX-7, XC7A100T) XILINX FPGA板上用Dhrystone基准来测试RISC-V3.01,并将简单说明Dhrystone的移植步骤。

现在很难在官方网站上找到原始的Dhrystone代码。 Roy Longbottom创建了一个网站,列出了他收集的许多基准。 网站(http://www.roylongbottom.org.uk/dhrystone%20results.htm)或(https://wiki.cdot.senecacollege.ca/wiki/Dhrystone_howto#What_Dhrystone_really_does)上都有可用的源文件。 另外,在Github上有一些适用于不同系统的Dhrystone代码。 注意这里会使用Dhrystone 2.1版本。

通常,Dhrystone基准文件夹中包含3个主要文件:“ dhry.h”,“ dhry_1.c”和“ dhry_2.c”。 要修改的主要代码在“ dhry_1.c”中,基本上是打印(print)和时间(time)函数。 网络上找到的源文件可能已经在这两个功能上进行了修改。 对于不同的操作系统和不同的CPU,移植的打印和时间函数可能会有所不同。

移植的第一步是注释掉所有时间函数以及时间函数的定义和初始值。 注意有一个“ HZ”的参数,它是在时间函数里一起定义的,因此整篇代码里的HZ,都应该根据实际情况被相应修改。

dhystone时间相关的函数

dhrystone时间相关的函数1

图一 注释掉所有与时间相关的函数

 

第二步是注释掉一些不需要的打印功能,这些功能原本是用于调试评估结果是否有效。详情见图二。

dhrystone打印函数

图二 注释掉不需要的打印函数

 

第三步是修改迭代次数。 原始代码中迭代次数(循环运行次数)被定义为手动输入。 注释掉该输入函数,并在代码中将迭代数固定。

dhrystone迭代次数函数

图三 注释掉迭代次数的输入函数

 

第四步是添加相应的时间和打印功能。 切记还包括相应的头文件。 将开始计时器和结束计时器设置在正确的位置。 注意不同CPU上的系统时钟是不同的。 打印功能用于输出Dhrystone结果和自定义的调试信息。 还有一点需要注意的是,避免在测试循环内(在开始计时器和停止计时器之间)添加打印函数,因为这会消耗时间,从而使Dhrystone运行时间不准确。

添加dhrystone时间函数

添加dhrystone时间函数1

图四 添加相应的时间函数并放置在相应的位置

 

第五步是在完成所有设置之后,在运行基准测试之前,重新检查以确保运行测试循环时间至少大于2秒。 从理论上讲,CPU运行的迭代次数越多,Dhrystone评估结果将越准确。 FII RISC-V 3.01的FII-PRX100-S (ARTIX-7, XC7A100T) XILINX FPGA板的Dhrystone打印输出结果如图五所示。

Dhrystone测试结果

图五 Dhrystone打印输出结果

 

测试结果为每秒98360 Dhrystone。由于历史原因,DMIPS(Dhrystone Millions of Instructions Per Second,每秒运行的Dhrystone百万指令)与1977 Digital Vax 11/780有关,其Dhrystone测试结果为1757 Dhrystone / s(每秒执行1757 Dhrystone迭代)。在使用1977 Digital Vax 11/780进行归一化之后,实际测试结果为55.98 DMIPS(98360/1757)。表达结果的另一种通用形式是将结果分配到每百万赫兹时钟。在这种情况下,Dhrystone测试结果为1.12 DMIPS / MHz(55.98 / 50,因为系统时钟为50 MHz)。

dhrystone结果对比

图六 CPU Dhrystone 对比图

 

图六显示了ARM官方网站提供的一些CPU Dhrystone结果。 FII RISC-V3.01已被红色突出显示。可以看出,在10个CPU中,CORTEX-M7(标记为蓝色)具有最高的Dhrystone。 FII RISC-V3.01是单核,由2级和3级流水线CPU组成。在ARM官方网站上,CORTEX-M7,CORTEX-R4(标记为蓝色)和CORTEX-A5(标记为蓝色)都具有多于3级的流水线。 并且CORTEX-R4和CORTEX-A5具有多个内核。由于拥有更多流水线级或者是多核,CPU的性能毫无疑问会更好。为了使性能比较更合理,所以将FII RISCV-V3.01与 CORTEX-M3(标记为蓝色)相比较,因为后者也是与FII RISC-V3.01相同的3级流水线处理器。从图六可以看出,CORTEX-M3的Dhrystone略高于FII RISC-V3.01。这可能是因为在Dhrystone测试期间,FII RISC-V3.01只使用了通用编译器来测试。尽管Dhrystone严重依赖于标准库函数,但是编译器供应商通常会使用汇编语言来优化这些函数。换句话说,Dhrystone测试在很大程度上取决于编译器的优化级别,而不是实际的硬件操作能力。一个专门设计的编译器可以大大改善Dhrystone的结果。通过实验可以证明,使用专门设计的编译器,Dhrystone甚至可以高出4倍。总而言之,与具有相同数量内核和流水线级的CPU相比,FII RISC-V的Dhrystone结果中等。此外,Dhrystone的结果经常被业内许多人引用和使用,但它们并没有经受过审查。因为没有权威的组织来认证测试结果,Dhrystone有时会被滥用。尽管Dhrystone基准测试有其局限性,但它仍然是一个很好的自我评估工具,可以作为参考。

Posted in RISC-V, 应用开发, 文章

发表评论

相关链接