Dhrystone是测量处理器运算能力的最常见基准程序之一,常用于处理器的整形运算性能的测量。程序是用C语言编写的,因此C编译器的编译效率对测试结果也有很大影响。
Dhrystone的计量单位为每秒计算多少次Dhrystone,后来把在VAX-11/780机器上的测试结果1757 Dhrystones/s定义为1 Dhrystone MIPS(百万条指令每秒)。故DMIPS表示的是一个相对值。
为了详细的描述Dhrystone在ARM上的测试方法和过程,ARM提供了文档DAI0093A和基准程序。文档可以在www.arm.com上获取,基准程序在ARM的各种编译环境下都可以找到。源码也可参考keil的样例工程,路径在C:KeilARMBoardsSTCQ-STARM2Dhry下。此Dhrystone版本是Version 2.1,笔者分别用keil,GCC,IAR在STM32F103(Cortex-m3)以不同条件进行比较,测试结果如下:
结论:
0、GCC和IAR的编译效率相当,Keil RealView的效率反而较低。
1、FLASH的2 wait states降低了系统相当性能。
2、FLASH Prefetch Buffer有助于提升性能。
3、将中断向量表重映射到SRAM,打算加速systick中断(10ms一次)的执行,但测试结果显示对性能没有提升。
补充:
Dhrystone程序其实比较简单,当然作者Reinhold P. Weicker花费了很多时间,才精心设计出这些程序。最初的时候,作者搜集了一系列语言的程序后,统计出程序中常用的操作以及这些操作所占的比例。按照这些特性,作者人为的构建了这个评估环境,并经过N多次的修改完善,才形成了现在我们看到的Dhrystone程序。程序由dhry.h,dhry_1.c和dhry_2.c三个文件构成。
我们将之用于STM32时,还需加入初始化UART(实现printf)和定时器计时的码,就可以在任何平台上使用。笔者使用Cortex-3的systick每10ms一次中断进行计时。
附测试工程、代码:
Dhrystone.rar
再补充:
keil 选取
Use Cross-Module Optimization
Use MicroLib
Use Link-Time Code Generation
-Otime
可以进一步提高效率,但比GCC和IAR还是有些差距。
IAR用TI的东西用着好用