CoreMark 是啥?
CoreMark 其实是一个专门给嵌入式 CPU 做基准测试的“小工具”。它的目标很简单:只测处理器核心的算力,不去管外设、操作系统这些“花里胡哨”。想象一下,你手里有一块新买的 MCU,想知道它到底跑得快不快,能不能胜任你的项目需求——CoreMark 就是那根“体能计”,跑一次、给你一个 Iterations/Sec(每秒执行次数)的分数,直接对比就行。
“别把整个系统的性能都往这儿塞,核心跑得好,别的东西再慢点也能凑合。”
为什么我们需要 CoreMark?
|
痛点 |
传统办法 |
CoreMark 的解决方案 |
| 基准不统一 |
各厂商自己写 benchmark,结果不可比 |
统一的源码、统一的运行规则 |
| 代码臃肿 |
Dhrystone、Linpack 代码几千行,移植麻烦 |
只有 6 个源码文件,几百行 |
| 结果不可信 |
编译器把一些运算提前算好,分数被“刷” |
采用 volatile、随机种子,强制运行时计算 |
| 跨平台难 |
不同架构、不同工具链要重写 |
只改 |
| 缺少并行测试 |
大多数基准只跑单核 |
支持 MULTITHREAD,测多核吞吐 |
一句话:想要一个轻量、可比、可靠的核心性能测评,CoreMark 就是你的不二选择。
安装 & 上手
Linux(最常见)
$ git clone https://github.com/eembc/coremark.git
$ cd coremark
$ make # 默认跑两套:性能跑 + 验证跑
$ cat run1.log # 这里就是你的分数
-
• run1.log → 性能跑(Iterations/Sec)
-
• run2.log → 验证跑(CRC 检查,确保跑对了)
想要自定义迭代次数?
$ make ITERATIONS=20 # 只跑 20 次,适合仿真器、功耗测量
没有 make? 把下面几文件直接 gcc 编译就行(记得加 -DPERFORMANCE_RUN=1):
gcc -O2 -o coremark.exe core_list_join.c core_main.c core_matrix.c \
core_state.c core_util.c simple/core_portme.c -DPERFORMANCE_RUN=1
./coremark.exe > run1.log
移植到 MCU
-
1. 在
port目录下拷贝一个已有平台(比如linux)mkdir my_mcu && cp -r linux/* my_mcu
2. 修改 my_mcu/core_portme.c/h/mak,把时钟、计时器换成你的硬件实现。
3. 编译
make PORT_DIR=my_mcu
小贴士:一定要保证计时函数返回的单位是“ticks”,且跑满 10 秒以上,否则分数不被官方认可。
使用技巧
|
场景 |
推荐参数 |
目的 |
| 多核 CPU | make XCFLAGS="-DMULTITHREAD=4 -DUSE_PTHREAD -pthread" |
同时跑 4 线程,测吞吐 |
| 功耗测量 | make ITERATIONS=10 |
短时间跑,配合功耗仪器 |
| 验证移植 | make XCFLAGS="-DPERFORMANCE_RUN=1" REBUILD=1 run1.logmake XCFLAGS="-DVALIDATION_RUN=1" REBUILD=1 run2.log |
确保 CRC 正确,防止移植错误 |
| 大数据集 | make XCFLAGS="-DTOTAL_DATA_SIZE=6000" |
增加内存占用,逼近真实业务场景 |
CoreMark 的优缺点
|
优点 |
缺点 |
| 轻量
:源码仅 6 文件,几百行 |
功能单一
:只测核心,不涉及外设、IO |
| 跨平台
:几行改动即可移植 |
对编译器优化敏感
:不同 -O 级别分数差异大 |
| 可并行
:支持多线程/多核 |
不适合高功耗/高频 MCU
:计时误差可能放大 |
| 官方认可
:EEMBC 标准基准 |
缺少图形化报告
:需要自行整理数据 |
整体来看,如果你的目标是快速、可靠地对比不同 MCU 核心的算力,CoreMark 绝对是首选。如果你想要更全面的系统评估(比如 I/O、内存带宽),可能需要再配合其他基准(比如 CoreMark‑PRO、Dhrystone、Linpack)。
小结
-
• CoreMark 是专为嵌入式 CPU 设计的核心性能基准,代码简洁、移植容易、结果可比。
-
• 安装只需
make,自定义参数灵活,支持单核、多核、仿真、功耗测量等多种场景。 -
• 优点是轻量、跨平台、官方认可,缺点是只测核心、对编译器优化敏感。
-
• 用它来快速评估新 MCU、对比不同编译选项、做产品性能宣讲,都是非常合适的。
记住,测试不是全部,真正的产品性能还要看功耗、外设、系统集成。但有了 CoreMark,你至少能确保“CPU 核心”这块砖头是好砖。
项目地址:https://github.com/eembc/coremark