编辑语:
芯片开放社区(OCC)面向广大开发者推出应用实战系列内容,通过分享开发者实战开发案例,总结应用开发经验,梳理开发中的常见问题及解决方案,为后续参与的开发者提供更多参考与借鉴。
本文是关于开发者 qinyunti 基于BL606P-DVK开发板实战开发的系列文章中的一篇,主要介绍了CoreMark基准性能测试,后面还会持续更新该开发者的测评内容,敬请期待!
01 前言
按照测评计划,我们这一篇进行性能测试。CPU基准性能测试有很多种,比较常见的是coremark,我们就以coremark进行CPU的基准性能测试。
02 过程
2.1 准备代码
下载代码
git clone https://github.com/eembc/coremark.git
只保留如下内容,并添加到工程app目录下
2.2 修改代码
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. "
}
改为
barebones_clock()
{
//#error
// "You must implement a method to measure time in barebones_clock()! This function should return current time. "
return aos_sys_tick_get();
}
注释掉
#if 0
#error
"Call board initialization routines in portable init (if needed), in particular initialize UART! "
#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();
2.3 测试
设置优化等级
·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
2.4 对比
https://www.eembc.org/coremark/scores.php
03 总结
以上结果仅作参考,因为和配置关系很大,比如编译器优化,主频,cache的使能等等。
全部0条评论
快来发表一下你的评论吧 !