按照测评计划,我们这一篇进行性能测试。CPU基准性能测试有很多种,比较常见的是coremark,我们就以coremark进行CPU的基准性能测试。
下载代码
git clone https://github.com/eembc/coremark.git
只保留如下内容,并添加到工程app目录下
core_portme.h中
#define HAS_PRINTF 0改为#define HAS_PRINTF 1
#define ee_printf printf
改为
#define ee_printf aos_cli_printf
添加#include "aos/cli.h"
添加#define MAIN_HAS_NOARGC 1
FLAGS_STR按照实际改为”-O0”或者”-O3”等。
typedef size_t ee_size_t;改为
typedef unsigned int ee_size_t;
添加#define ITERATIONS 10000
该值需要按照实际修改,如果提示运行时间不够则修改增加该值。
core_portme.c中
barebones_clock()
{
#error \
"You must implement a method to measure time in barebones_clock()! This function should return current time.\n"
}
改为
barebones_clock()
{
//#error \
// "You must implement a method to measure time in barebones_clock()! This function should return current time.\n"
return aos_sys_tick_get();
}
注释掉
#if 0
#error \
"Call board initialization routines in portable init (if needed), in particular initialize UART!\n"
#endif
以下两个宏确定获取时间tick的单位
#define TIMER_RES_DIVIDER 1
# define CLOCKS_PER_SEC (100)
core_main.c中main函数改为coremark_main
core_util.c/coremark.h还有其他文件中的crc16改为core_crc16
main函数中调用
void coremark_main(void);
coremark_main();
设置优化等级
2K performance run parameters for coremark.
CoreMark Size : 666
Total ticks : 10261
Total time (secs): 102.610000
Iterations/Sec : 97.456388
Iterations : 10000
Compiler version : GCC10.2.0
Compiler flags : -O3
Memory location : STACK
seedcrc : 0xe9f5
[0]crclist : 0xe714
[0]crcmatrix : 0x1fd7
[0]crcstate : 0x8e3a
[0]crcfinal : 0x988c
Correct operation validated. See README.md for run and reporting rules.
CoreMark 1.0 : 97.456388 / GCC10.2.0 -O3 / STACK
https://www.eembc.org/coremark/scores.php
以上结果仅作参考,因为和配置关系很大,比如编译器优化,主频,cache的使能等等。