在嵌入式系统行业用于评价CPU性能指标的标准主要有三种:Dhrystone、MIPS、CoreMark,其中CoreMark是一种新兴流行的嵌入式系统处理器测试基准,被认为是比Dhrystone和MIPS更具有实际价值的测试基准。
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是微控制器CPU性能测试基准CoreMark。
在嵌入式系统行业用于评价CPU性能指标的标准主要有三种:Dhrystone、MIPS、CoreMark,其中CoreMark是一种新兴流行的嵌入式系统处理器测试基准,被认为是比Dhrystone和MIPS更具有实际价值的测试基准。今天痞子衡就和大家详细聊一聊CoreMark。
在讲CoreMark之前,必须要先提EEMBC(Embedded Microprocessor Benchmark Consortium)即嵌入式微处理器基准评测协会,它是一个非盈利性组织,该组织目前为止(2018.03)共发布了46个性能测试基准,有了这些性能基准参考,嵌入式设计人员可以快速有效地选择处理器。
EEMBC测试是基于每秒钟算法执行的次数和编译代码大小的综合统计结果。众所周知,编译器选项会对代码大小和执行效率会产生巨大的影响,所以每种测试必须包括足够多的编译器信息并设置不同的优化项。
EEMBC发展势头很好,其很有可能发展成为嵌入式系统开发人员进行处理器和编译器性能比较的工业标准。关于EEMBC的更多介绍可移步它的官方网站 http://www.eembc.org/
CoreMark是由EEMBC的Shay Gla-On于2009年提出的一项基准测试程序,其主要目标是测试处理器核心性能。
CoreMark标准的测试方法很简单,就是在某配置参数组合下单位时间内跑了多少次CoreMark程序,其指标单位为CoreMark/MHz。CoreMark数字越高,意味着性能更高。
CoreMark程序的目前(2018.03)最新版本是1.01。
核心程序下载 http://www.eembc.org/coremark/download.php 平台移植示例 http://www.eembc.org/coremark/ports.php
核心程序包下载后,在\coremark_v1.0\readme.txt里可见基本介绍,在\coremark_v1.0\docs\Coremark-requirements.doc里可见设计需求。详细文件目录如下:
如果是移植到ARM Cortex-M平台下裸系统运行,一般只需要修改\barebones目录下的文件即可(仅需改动三个函数portable_init()、barebones_clock()、uart_send_char()以及core_portme.h中若干宏定义),其余代码文件不需要修改。关于\barebones下的文件修改,EEMBC上有如下4个示例平台可参考:

前面讲到做平台移植时除了必须要改动3个函数外,还需要设置core_portme.h中若干宏定义,这些宏定义即为配置参数,需要根据要移植到的具体平台的属性而定。一共如下14个宏:
宏
解释
示例
HAS_FLOAT
Define to 1 if the platform supports floating point
1
HAS_TIME_H
Define to 1 if platform has the time.h header file and implementation of functions thereof
USE_CLOCK
HAS_STDIO
Define to 1 if the platform has stdio.h.
HAS_PRINTF
Define to 1 if the platform has stdio.h and implements the printf function.
COMPILER_VERSION
Please put compiler version here (e.g. gcc 4.1)
"IAR EWARM v8.20.2"
COMPILER_FLAGS
Please put compiler flags here (e.g. -o3)
"High - Speed - No size constraints"
MEM_LOCATION
Please put the mem location of code execution here (e.g STACK)
"STACK"
CORETIMETYPE
Define type of return from the timing functions.
ee_u32
SEED_METHOD
Defines method to get seed values that cannot be computed at compile time.
SEED_VOLATILE
MEM_METHOD
Defines method to get a block of memry.
MEM_STATIC
MULTITHREAD
Define for parallel execution
MAIN_HAS_NOARGC
Needed if platform does not support getting arguments to main.
MAIN_HAS_NORETURN
Needed if platform does not support returning a value from main.
细心的朋友应该能注意到core_portme.h文件的最后有如下条件编译,实际上CoreMark主程序的运行有3种模式可选,即PROFILE_RUN(原型模式)/PERFORMANCE_RUN(性能模式)/VALIDATION_RUN(验证模式)
而在coremark.h文件的最开始就定义了缺省的TOTAL_DATA_SIZE的值为2000,即CoreMark程序默认跑在PERFORMANCE_RUN(性能模式)下。如果你想修改运行模式,需要在编译器预编译选项里自定义TOTAL_DATA_SIZE。
CoreMark程序使用C语言写成,包含如下四类运算法则:数学矩阵操作(普通矩阵运算)、列举(寻找并排序)、状态机(用来确定输入流中是否包含有效数字)、CRC(循环冗余校验),都是在真实的嵌入式应用中很常见的操作,这也是CoreMark比其他测试标准更有实际价值的原因所在。
a. Matrix multiply (allow for use of MAC operations, common math use) b. Linked list search/sort/read (common pointer use) c. State machine (common use of data dependent branches) d. CRC (common in embedded)
让我们尝试分析CoreMark主函数入口main(以2.2节中配置示例值为例):
当移植好CoreMark程序后,便可以开始跑起来了,在跑程序的时候,EEMBC同时制定了必须要遵守规则(不遵守的话,跑分结果不被EEMBC所认可),详见 https://www.eembc.org/coremark/CoreMarkRunRules.pdf。
当得到跑分结果后可将结果提交到EEMBC网站上,跑分结果需按如下标准格式进行提交:
如果移植的CoreMark能够正确运行,你应该可以看到串口会打印出类似如下格式的信息,上述要求的CoreMark标准结果就在打印信息的最后。
截止到目前(2018.03),EEMBC网站共记录535款微控制器的CoreMark跑分结果(注意并不是所有跑分结果都经过EEMBC核实),所有跑分结果可在这里查询 https://www.eembc.org/coremark/scores.php,下图是跑分榜部分结果(按提交日期排序)。如果是设计人员根据性能选型的话,可以选按得分高低排序。
在上节介绍的跑分榜里可点击微控制器型号查看具体结果,也可选择多个微控制器进行结果对比。最近两家ARM Cortex-M微控制器知名厂商恩智浦半导体和意法半导体在高性能微控制器上正一决雌雄,恩智浦推出的i.MX RT1050和意法半导体推出的STM32H743均是基于Cortex-M7内核,且都在2017.10实现初版量产,我们且来比比看这两款微控制器:
从对比结果来看,i.MX RT1050在性能上完爆STM32H743,其3036的总得分在Cortex-M微控制器里独孤求败,这个跑分结果虽未经过EEMBC认证,但与恩智浦官方给的数据3020基本吻合。
关于i.MX RT系列微控制器简介可详见我的另一篇文章 飞思卡尔i.MX RT系列微控制器介绍篇(1)- 概览,对于i.MX RT1050跑分结果的验证与复现可详见我的文章 飞思卡尔i.MX RT系列微控制器介绍篇(2)- 性能CoreMark。
至此,微控制器CPU性能测试基准CoreMark痞子衡便介绍完毕了,掌声在哪里~~~
文章会同时发布到我的 博客园主页、CSDN主页、微信公众号 平台上。
微信搜索"痞子衡嵌入式"或者扫描下面二维码,就可以在手机上第一时间看了哦。
最后欢迎关注痞子衡个人微信公众号【痞子衡嵌入式】,一个专注嵌入式技术的公众号,跟着痞子衡一起玩转嵌入式。
衡杰(痞子衡),目前就职于恩智浦MCU系统部门,担任嵌入式系统应用工程师。
专栏内所有文章的转载请注明出处:http://www.cnblogs.com/henjay724/
与痞子衡进一步交流或咨询业务合作请发邮件至 [email protected]
可以关注痞子衡的Github主页 https://github.com/JayHeng,有很多好玩的嵌入式项目。
关于专栏文章有任何疑问请直接在博客下面留言,痞子衡会及时回复免费(划重点)答疑。
痞子衡邮箱已被私信挤爆,技术问题不推荐私信,坚持私信请先扫码付款(5元起步)再发。