实战指南:在RISC-V开发板上运行CoreMark性能测试
最近两年RISC-V架构的处理器性能突飞猛进,不少开发者都好奇自己手上的开发板到底能达到什么水平。CoreMark作为嵌入式领域公认的性能基准测试工具,能帮助我们客观评估处理器的计算能力。不同于网上现成的跑分数据,本文将带你从零开始,在自己的RISC-V开发板上实际运行CoreMark测试,获取第一手性能数据。
1. 准备工作与环境搭建
1.1 硬件准备
首先需要确认你的RISC-V开发板型号及处理器信息。目前市面上主流的RISC-V开发板包括:
- 昉·星光2(搭载StarFive JH7110 SoC,四核U74内核)
- 荔枝派4A(搭载玄铁C910四核处理器)
- VisionFive 2(同样采用JH7110 SoC)
- SiFive HiFive Unmatched(面向高性能开发)
提示:在开始测试前,请确保开发板已正确连接电源和串口终端,并能正常启动Linux系统。
1.2 软件环境配置
CoreMark测试需要交叉编译环境。以下是针对不同开发板的工具链选择建议:
| 开发板型号 | 推荐工具链 | 下载地址 |
|---|---|---|
| 昉·星光2/JH7110 | riscv64-unknown-linux-gnu | 官方GitHub仓库提供预编译版本 |
| 荔枝派4A/C910 | riscv64-linux-gnu | 芯片厂商提供的定制工具链 |
| 通用RISC-V板卡 | riscv64-elf-gcc | SiFive或芯片厂商提供的工具链 |
安装基础依赖(以Ubuntu系统为例):
sudo apt update sudo apt install git build-essential device-tree-compiler2. 获取与编译CoreMark
2.1 下载CoreMark源码
CoreMark官方仓库位于EEMBC的GitHub:
git clone https://github.com/eembc/coremark.git cd coremark2.2 配置编译参数
根据你的开发板架构修改Makefile。以下是常见RISC-V处理器的优化参数参考:
玄铁C910(荔枝派4A):
CFLAGS = -O3 -march=rv64gc -mabi=lp64d -mtune=c910U74核心(昉·星光2):
CFLAGS = -O3 -march=rv64gc -mabi=lp64d -mtune=sifive-7-series
2.3 交叉编译CoreMark
使用正确的工具链前缀进行编译:
make PORT_DIR=linux64 XCFLAGS="-DMULTITHREAD=4 -DUSE_PTHREAD" \ CC=riscv64-unknown-linux-gnu-gcc注意:
MULTITHREAD参数应与你的CPU核心数一致,玄铁C910和JH7110都是四核处理器。
3. 在开发板上运行测试
3.1 传输可执行文件
将编译生成的coremark.exe传输到开发板:
scp coremark.exe user@your-board-ip:~/3.2 执行基准测试
通过串口或SSH登录开发板,运行测试:
chmod +x coremark.exe ./coremark.exe典型输出示例(玄铁C910在1.85GHz下的结果):
2K performance run parameters for coremark. CoreMark 1.0 : 13006 / GCC11.2.0 -O3 -march=rv64gc -mabi=lp64d -mtune=c9103.3 计算CoreMark/MHz
性能指标通常标准化为每MHz的得分:
CoreMark/MHz = 总得分 / 运行频率(MHz)以玄铁C910为例:
13006 / 1850 ≈ 7.03 CoreMark/MHz4. 结果分析与性能对比
4.1 常见RISC-V处理器表现
根据实测数据,主流RISC-V芯片的CoreMark表现如下:
| 处理器型号 | 频率(MHz) | CoreMark得分 | CoreMark/MHz | 测试平台 |
|---|---|---|---|---|
| 玄铁C910 | 1850 | 13006 | 7.03 | 荔枝派4A |
| StarFive U74 | 1500 | 7635 | 5.09 | 昉·星光2 |
| 玄铁C906 | 1000 | 3400 | 3.40 | 全志D1 |
4.2 与ARM架构对比
作为参考,以下是常见ARM处理器的表现:
| ARM核心 | CoreMark/MHz | 对比RISC-V |
|---|---|---|
| Cortex-A72 | 6.20 | 低于玄铁C910 |
| Cortex-A76 | 7.41 | 与玄铁C910相当 |
| Cortex-A55 | 3.76 | 低于StarFive U74 |
4.3 性能优化建议
如果测试结果低于预期,可以尝试以下优化措施:
编译器优化:
- 尝试不同版本的GCC(如GCC 12)
- 测试Clang编译器表现
- 调整
-O3优化级别
系统配置:
# 设置CPU性能模式 echo performance | sudo tee /sys/devices/system/cpu/cpu*/cpufreq/scaling_governor # 关闭后台服务 sudo systemctl stop unnecessary-services散热管理:
- 确保良好的散热条件
- 监控运行时的CPU温度
watch -n 1 cat /sys/class/thermal/thermal_zone*/temp
5. 常见问题排查
5.1 编译错误解决
问题:缺少头文件
fatal error: stdio.h: No such file or directory解决方案: 安装目标板的标准库:
sudo apt install gcc-riscv64-unknown-linux-gnu5.2 运行时错误
问题:非法指令错误
Illegal instruction (core dumped)解决方案: 确认-march参数与CPU架构匹配,玄铁C910需要rv64gc指令集支持。
5.3 性能异常
问题:得分远低于预期可能原因:
- CPU频率被限制
- 散热不足导致降频
- 后台进程占用资源
检查实际运行频率:
watch -n 1 cat /proc/cpuinfo | grep "MHz"6. 高级测试技巧
6.1 多线程性能分析
CoreMark支持多线程测试,可以评估处理器的并行能力。修改编译参数:
XCFLAGS = -DMULTITHREAD=4 -DUSE_PTHREAD运行后观察各核心利用率:
top -H -p $(pgrep coremark)6.2 不同优化级别对比
测试不同编译器优化级别的影响:
| 优化级别 | 玄铁C910得分 | 代码大小(KB) |
|---|---|---|
| -O0 | 4200 | 48 |
| -O1 | 9800 | 36 |
| -O2 | 12500 | 32 |
| -O3 | 13006 | 30 |
| -Os | 11000 | 28 |
6.3 长期稳定性测试
运行连续测试检查处理器稳定性:
for i in {1..10}; do ./coremark.exe; done观察多次运行的得分波动情况,正常应在±2%范围内。