【GD32E503评测】——04.MCU CoreMark性能测试
[复制链接]
本帖最后由 xld0932 于 2021-2-14 21:46 编辑
CoreMark是用来衡量嵌入式系统中中心处理单元(CPU,或叫做微控制器MCU)性能的标准。该标准于2009年由EEMBC组织的Shay Gla-On提出,并且试图将其发展成为工业标准,从而代替陈旧的Dhrystone标准。代码使用C语言写成,包含如下的运算法则:列举(寻找并排序),数学矩阵操作(普通矩阵运算)和状态机(用来确定输入流中是否包含有效数字),最后还包括CRC(循环冗余校验)。
为什么不用Dhrystone,而用CoreMark呢?Dhrystone是测量处理器运算能力的最常见基准程序之一,常用于处理器的整型运算性能的测量。程序是用C语言编写的,因此C编译器的编译效率对测试结果也有很大影响,所以Dhrystone还有许多漏洞,比如易被非法利用、人为痕迹明显、代码长度太短、缺乏验证及标准的运行规则等。
一、准备工作
1.1.到CoreMark官网上去下载开源的源代码:https://www.eembc.org/coremark/index.php(点击网页上的Download,然后跳转到GitHub上下载源代码)
1.2.在下载的CoreMark源码中,我们只使用到了simple中的port接口适配文件和根目录下的源文件
1.3.基础工程是基于上篇文章的代码上进行添加的;
二、移植CoreMark
2.1.将CoreMark源代码添加到项目工程,如下图所示
2.2.将工程的Optimization配置到O3级别,添加CoreMark的头文件路径,如下图所示:
2.3.修改原先的main函数,因为CoreMark代码自带一个main入口函数,所以需要屏蔽之前我们自己写的main函数,如所示:
-
- int user_main(void)
- {
- InitSystem();
-
- while(1)
- {
- TASK_Scheduling();
-
- MCU_DAC_OutputHandler();
- }
- }
2.4.修改SysTick_Handler函数,用于CoreMark运算过程中的计时处理,如所示:
-
- void SysTick_Handler(void)
- {
- #if 0
- SysTick_Tick++;
- TASK_TimeSlice(SysTick_Tick);
- #else
- CoreMark_IncTick();
- #endif
- }
2.5.在core_portme.c文件中添加移植的代码,如下所示:
三、运行调试
将程序都移植完成后,对项目工程进行编译,编译无误后下载到开发板进行运行测试;
在第一次下载运行后,串口就输出“ERROR! Must execute for at least 10 secs for a valid result!”的错误提示,如下图所示:
执行的时间小于了10秒钟,我们修改了core_portme.c中的ITERATIONS这个宏定义值,将原先的2500修改到6000,再次尝试运行时,程序运行正常,测试结果如下所示:
从上图我们可以看到CoreMark的测试结果值为576.6,当然这是基于上一个工程的基础上做的一个移植,程序运行还有可优化的空间,后面再继续研究!
四、源代码
Project_CoreMark.zip
(438.96 KB, 下载次数: 5)
|