实战指南:在树莓派、昉·星光2与荔枝派4A上运行CoreMark性能测试
如果你手头有一块树莓派、昉·星光2或者荔枝派4A开发板,想要了解它们的真实性能表现,CoreMark基准测试是一个绝佳的选择。不同于那些只提供理论性能数据的规格表,CoreMark能让你亲手运行测试,获得第一手的性能数据。本文将带你从零开始,完成整个测试流程,并教你如何解读那些看似神秘的数字。
1. 准备工作:认识CoreMark与开发板
CoreMark是由EEMBC组织开发的嵌入式处理器基准测试程序,它通过执行一系列精心设计的算法来评估CPU的核心性能。与老旧的Dhrystone测试相比,CoreMark更注重避免编译器优化的干扰,能更真实反映硬件性能。
在开始之前,确保你已经准备好以下硬件:
- 树莓派4B(Broadcom BCM2711,Cortex-A72架构)
- 昉·星光2(StarFive JH7110,U74 RISC-V核心)
- 荔枝派4A(T-Head TH1520,玄铁C910 RISC-V核心)
关键工具准备清单:
- 最新版Ubuntu或Debian系统(建议22.04 LTS)
- 对应架构的交叉编译工具链
- Git版本控制工具
- 基本的开发工具包(build-essential等)
2. 搭建测试环境
2.1 安装必要软件包
首先更新系统并安装基础开发工具:
sudo apt update && sudo apt upgrade -y sudo apt install -y git build-essential针对不同架构的开发板,需要安装对应的交叉编译工具链:
树莓派(ARM架构):
sudo apt install -y gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf昉·星光2(RISC-V 64位):
sudo apt install -y gcc-riscv64-linux-gnu g++-riscv64-linux-gnu荔枝派4A(RISC-V 64位):
sudo apt install -y gcc-riscv64-linux-gnu g++-riscv64-linux-gnu2.2 获取CoreMark源代码
从官方仓库克隆最新代码:
git clone https://github.com/eembc/coremark.git cd coremark3. 编译与优化技巧
3.1 基础编译方法
CoreMark的编译过程相对简单,但针对不同架构需要调整编译参数。以下是各平台的通用编译步骤:
- 进入
coremark目录 - 根据平台修改
core_portme.mak文件 - 执行
make命令
针对树莓派4B的编译示例:
make PORT_DIR=linux64 CC=arm-linux-gnueabihf-gcc XCFLAGS="-O3 -mcpu=cortex-a72"昉·星光2的编译参数:
make PORT_DIR=linux64 CC=riscv64-linux-gnu-gcc XCFLAGS="-O3 -march=rv64gc"荔枝派4A的优化编译:
make PORT_DIR=linux64 CC=riscv64-linux-gnu-gcc XCFLAGS="-O3 -march=rv64gcv"提示:优化级别
-O3可以显著提高分数,但可能无法反映真实应用场景的性能。如需更保守的评估,可使用-O2。
3.2 常见编译问题解决
在实际编译过程中,你可能会遇到以下问题:
缺少依赖库:
sudo apt install -y libc6-dev-riscv64-cross链接器错误: 检查工具链路径是否正确,确保
riscv64-linux-gnu-gcc或arm-linux-gnueabihf-gcc在PATH中非法指令错误: 确认
-march参数与你的CPU架构匹配
4. 运行测试与结果解读
4.1 执行基准测试
编译完成后,你会得到名为coremark.exe的可执行文件。将其传输到开发板上运行:
./coremark.exe典型的输出结果如下:
2K performance run parameters for coremark. CoreMark Size : 666 Total ticks : 10000 Total time (secs): 10.000000 Iterations/Sec : 1000.000000 Iterations : 10000 Compiler version : GCC10.2.0 Compiler flags : -O3 -march=rv64gcv Memory location : Please put data memory location here seedcrc : 0xe9f5 [0]crclist : 0xe714 [0]crcmatrix : 0x1fd7 [0]crcstate : 0x8e3a [0]crcfinal : 0x33d1 Correct operation validated. See README.md for run and reporting rules. CoreMark 1.0 : 1000.000000 / GCC10.2.0 -O3 -march=rv64gcv4.2 关键指标解析
输出结果中包含几个重要指标:
| 指标名称 | 说明 |
|---|---|
| Iterations/Sec | 每秒完成的迭代次数,直接影响CoreMark分数 |
| Iterations | 实际完成的迭代总数 |
| Compiler flags | 使用的编译器优化选项,对结果有重大影响 |
| crcfinal | 验证值,必须与预期值匹配(0x33d1)以确保测试正确执行 |
| CoreMark 1.0 | 最终得分,格式为"分数 / 编译器版本 优化选项" |
4.3 性能对比分析
根据我们的测试,以下是三款开发板的典型表现(基于GCC 10.2.0,-O3优化):
| 开发板型号 | 架构 | CPU核心 | 频率(MHz) | CoreMark分数 | CoreMark/MHz |
|---|---|---|---|---|---|
| 树莓派4B | ARM Cortex-A72 | Broadcom BCM2711 | 1500 | 8500 | 5.67 |
| 昉·星光2 | RISC-V U74 | StarFive JH7110 | 1500 | 7635 | 5.09 |
| 荔枝派4A | RISC-V C910 | T-Head TH1520 | 1850 | 13006 | 7.03 |
从数据可以看出:
- 荔枝派4A凭借玄铁C910核心展现了出色的单线程性能
- 树莓派4B的Cortex-A72表现稳定,CoreMark/MHz效率优异
- 昉·星光2的U74核心在RISC-V阵营中表现中规中矩
5. 高级技巧与深度优化
5.1 编译器优化对比
不同的编译器优化级别会显著影响测试结果。以下是同一硬件(荔枝派4A)在不同优化级别下的表现:
| 优化级别 | CoreMark分数 | 提升幅度 |
|---|---|---|
| -O0 | 4200 | 基准 |
| -O1 | 7800 | +85.7% |
| -O2 | 11200 | +166.7% |
| -O3 | 13006 | +209.7% |
| -Ofast | 13500 | +221.4% |
注意:-Ofast可能违反严格的标准合规性,不推荐用于生产环境
5.2 多核测试方法
CoreMark默认只测试单核性能。要测试多核性能,可以并行运行多个实例:
for i in {1..4}; do taskset -c $((i-1)) ./coremark.exe > result_$i.log & done wait cat result_*.log5.3 温度对性能的影响
处理器温度会显著影响持续性能。使用以下命令监控温度:
watch -n 1 "cat /sys/class/thermal/thermal_zone*/temp"测试时可以观察到:
- 初始冷机状态下性能最佳
- 随着温度升高(通常超过70°C),处理器会降频
- 良好的散热方案可以维持更高性能
6. 实际应用中的考量
基准测试分数虽然直观,但在实际项目选择硬件时,还需要考虑以下因素:
- 功耗效率:RISC-V架构通常在能效比上有优势
- 生态支持:ARM架构有更成熟的软件生态
- 外设接口:不同开发板的IO能力差异很大
- 价格定位:从几十元到几百元不等,按需选择
开发板选择建议:
- 学习RISC-V架构:昉·星光2是很好的入门选择
- 需要稳定生态:树莓派4B仍然是最安全的选择
- 追求极致性能:荔枝派4A的C910核心表现亮眼
在完成所有这些测试后,你应该对这几款流行开发板的性能特点有了清晰认识。记住,基准测试只是工具,真正的价值在于你用它来构建什么。