3、性能评估指标:DMIPS/MHz、CoreMark/MHz、Dhrystone、Whetstone等基准测试解读
选CPU IP,最头疼的是什么?
我个人觉得,是看数据手册时那一堆跑分数字。DMIPS、CoreMark、Dhrystone……看着都眼熟,但真要用起来,又总觉得差点意思。
今天咱们就把这几个指标掰开揉碎,讲清楚它们到底测了什么,又该怎么用。
3.1 Dhrystone:老将出马,一个顶俩?
Dhrystone 是上世纪80年代的产物。说白了,它测的是CPU处理整数运算的能力,不涉及浮点、不涉及I/O,就是纯纯的整数指令流水线效率。
它的结果用 DMIPS 表示。注意这个“D”,就是 Dhrystone 的缩写。DMIPS/MHz 的意思是:每兆赫兹能跑多少个 Dhrystone MIPS。
举个例子:
某款CPU跑在100MHz,Dhrystone得分是0.8 DMIPS/MHz。那它的绝对性能就是 100 × 0.8 = 80 DMIPS。
嗯,这里要注意:Dhrystone 的代码量很小,小到可以完全塞进L1 Cache里。所以它测的其实是CPU内核的“裸奔”性能,跟实际应用场景差距挺大。
3.2 CoreMark:更“接地气”的现代基准
CoreMark 是 EEMBC 推出的,专门用来替代 Dhrystone 的。我个人习惯用 CoreMark 做初筛,因为它更贴近真实场景。
CoreMark 测试的内容包括:
- 列表操作(查找、排序)
- 矩阵运算(整数矩阵乘法)
- 状态机模拟
- CRC校验
你看,这些操作在嵌入式软件里天天见。CoreMark 的代码量比 Dhrystone 大,没法完全塞进L1 Cache,所以它更能反映CPU在真实工作负载下的表现。
CoreMark/MHz 这个指标,我建议你这么看:
- 3.0 以下: 入门级MCU,适合简单控制
- 3.0 - 5.0: 主流MCU,能跑RTOS和轻量级应用
- 5.0 以上: 高性能MCU或应用处理器,可以跑Linux
3.3 Whetstone:浮点运算的“试金石”
如果你的应用涉及音频处理、传感器融合、或者简单的AI推理,那浮点性能就很重要了。这时候要看 Whetstone。
Whetstone 测的是浮点运算能力,包括:
- 浮点加减乘除
- 三角函数、指数函数
- 数组操作
它的结果用 MWIPS(Million Whetstone Instructions Per Second)表示。注意,Whetstone 的测试代码也是上世纪70年代的产物,但好在浮点运算的“套路”这么多年变化不大,所以它依然有参考价值。
关键点:
- 如果CPU不带FPU(浮点单元),Whetstone得分会非常难看,因为所有浮点运算都要用软件模拟
- 如果带FPU,还要看是单精度还是双精度。单精度快,但精度低;双精度慢,但精度高
实际案例:
我之前做一个电机控制项目,需要实时计算PID参数。一开始选了颗不带FPU的M0内核,Whetstone得分惨不忍睹。后来换成带FPU的M4,同样的算法,计算时间从200微秒降到了15微秒。所以,有浮点需求的,千万别省FPU的钱。
3.4 这些指标怎么组合使用?
说实话,没有哪个指标是万能的。我的做法是:
- 先用 CoreMark/MHz 做初筛: 排除掉明显性能不足的IP
- 再用 Dhrystone 对比同架构: 比如都是Cortex-M4,看谁的DMIPS/MHz更高
- 有浮点需求时,加看 Whetstone: 注意区分单精度和双精度场景
- 最后,跑自己的应用代码: 这才是最准的
你想想看,如果只看 Dhrystone,你可能会选到一个“考试型选手”——跑分高,实际用起来却不行。CoreMark 和 Whetstone 能帮你更全面地评估。
3.5 一个实用的对比表格
| 指标 | 测试内容 | 适用场景 | 注意事项 |
|---|---|---|---|
| Dhrystone (DMIPS/MHz) | 整数运算、指令流水线 | 通用控制、协议栈 | 代码量小,易受编译器优化影响 |
| CoreMark (CoreMark/MHz) | 列表、矩阵、状态机、CRC | 嵌入式应用、RTOS | 更贴近真实负载,推荐作为首选 |
| Whetstone (MWIPS) | 浮点运算、数学函数 | 音频、传感器、AI推理 | 注意区分单精度/双精度,以及是否带FPU |
3.6 最后说两句
选CPU IP,跑分只是第一步。我见过太多人拿着数据手册上的数字当圣旨,结果项目做到一半才发现性能不够。
我的建议是:
- 把跑分当作“体检报告”,而不是“判决书”
- 多关注实际工作负载下的表现
- 如果条件允许,让IP厂商提供你的应用代码的测试结果
嗯,今天就聊到这儿。下一章咱们讲讲功耗评估,那又是一个容易踩坑的地方。