单片机也能来跑分,用COREMARK来测测你的单片机性能
本帖最后由 yuyy1989 于 2023-8-24 09:24 编辑#申请原创# @21小跑堂
CoreMark是由EEMBC的Shay Gla-On于2009年提出的一项基准测试程序,CoreMark的主要目标是简化操作,并提供一套测试单核处理器核心的方法。测试标准是在配置参数的组合下单位时间内运行的CoreMark程序次数(单位:CoreMark/MHz),该数字值越大则说明测试的性能越好,接下来以CW32F030为例介绍如何使用CoreMark来跑分
先到https://github.com/eembc/coremark下载源码
在你的工程文件夹下建立CoreMark目录
将源码根目录中的这几个文件拷贝到新建的文件夹中
barebones目录中的.c和.h也拷贝过去
将CoreMark目录中的.c文件添加至工程中,如果想使用stdio提供的printf可以不添加ee_printf.c和cvt.c
在工程配置的头文件路径中也添加这个文件夹
在core_portme.h中添加宏定义和头文件,根据你的工程配置修改编译器版本和优化级别的定义,如果要使用stdio的printf输出结果最下面两个宏定义改为1,并勾选工程设置中的Use MicroLIB,由于有种说法是用MicroLIB会损失性能我这里就没用,重定向printf的方法这里就不介绍了
编译器版本和优化级别这两个需要自己改成工程设置里的参数,和下面的MEM_LOCATION都是输出最后结果用的字符串,对程序本身的编译运行没影响CLOCKS_PER_SEC每一秒的计数次数,根据你设定的定时器给coremark提供的计数周期进行调整
ITERATIONS 迭代次数,因为coremark要求最少运行10秒才能得到结果,可以根据你的mcu性能增大或减少这个值,性能好的可以增大这个值,性能差的可以减少这个值以减少等待跑分完成的时间
MAIN_HAS_NOARGC表示你的main函数是否有输入参数,单片机裸机开发一般都没有
main.h增加定义
其中main_ms_count是给coremark提供时间计数的,放在定时中断函数里自增,这个值的计数周期乘以CLOCKS_PER_SEC要等于1秒
core_app_uart_sendbyte是为coremark的打印函数提供的串口发送方法
在ee_printf.c中调用串口发送方法
如果单片机内存比较小减小一下ee_printf.c中这个数组的大小,默认是1024,这里改成128测试是没问题的
在core_portme.c中barebones_clock()这个方法中返回时间计数,coremark将根据这个计数来计算跑分时间
可以在这里调用初始化方法,记得注释掉#error开头的
如果你想在原来的main函数中调用跑分,修改core_main.c中的main函数名
新建个core_main.h,在core_main.c和你自己的main文件中包含它
在原来的main函数中完成初始化和跑分调用,我这里用LED闪烁提示跑分完成
还要修改启动文件中堆栈大小,太小的话跑不起来,太大的话又可能编译出错
编译烧录后用USB转串口连接设置的串口引脚,打开串口软件并设置正确的参数,将芯片上电后等待一会就会输出跑分结果
如果运行时间不满10秒可以调大ITERATIONS的值,一直卡住不动调大堆栈的值再尝试
不同编译器和优化级别最后跑出的分数也会不同,可以多换几个设置试试
CW32F030C8T6跑分结果,仅供娱乐
修改堆栈
HSI PLL64M
HSE 8MPLL64M
HSI48M
PY32F003F16P6
堆栈调整
HSI 24M
HSE 24M
CW32L083VCT6
堆栈调整
HSE 16MPLL64M
HSI PLL64M
HSI 48M
GD32E230C8T6
修改堆栈
IRC8MPLL72M
HXTALPLL72M
MM32G0141C4P
修改堆栈
HSI8MPLL72M
APMF407IGT6
修改堆栈
HSIPLL168M
HSEPLL168M
其实我一直对跑分有些抵触。
这个分数可以代表着什么呢?
算力吗? 选型的时候考虑还是硬件资源与价格吧!
同样的内核有啥好跑分的,同一个内核,影响跑分的只有频率吧 jiangjiayu 发表于 2023-8-21 09:21
同样的内核有啥好跑分的,同一个内核,影响跑分的只有频率吧
你想错了。
同样的内核,由于各芯片公司设计水平不一样,总线、预取指、FLASH速度等,都会影响效率,所以不同厂家的芯片,即使同一个内核,其跑分却不一样。 jobszheng 发表于 2023-8-19 09:18
其实我一直对跑分有些抵触。
这个分数可以代表着什么呢?
算力吗? 选型的时候考虑还是硬件资源与价格吧!
有一定的参考价值。跑分可以基于同样的条件(频率、内核等)来比较不同芯片之间的性能,对于算法(同样的运算看谁更快)或功耗(运算时间越久,自然越耗电)类应用,提供了简单的对比方法。
至于MCU的资源和性价比,和这个没有关系。 赞一个!
页:
[1]