从零开始:用CoreMark为昉·星光2开发板进行性能实测
拿到一块RISC-V开发板时,很多开发者最关心的问题往往是:这块板子的实际性能到底如何?与常见的ARM架构相比处于什么水平?本文将手把手带你完成从环境搭建到分数解读的全过程,以昉·星光2为例,展示如何用CoreMark进行客观的性能评估。
1. 准备工作与环境搭建
在开始跑分之前,我们需要确保开发环境和工具链就绪。昉·星光2搭载的是StarFive JH7110 SoC,采用U74核心,这是一款64位RISC-V处理器。与常见的ARM开发板不同,RISC-V生态的工具链需要特别注意版本兼容性。
首先通过SSH连接到开发板,建议使用最新版的Ubuntu镜像作为基础系统。连接成功后,更新系统并安装必要依赖:
sudo apt update && sudo apt upgrade -y sudo apt install -y git build-essential接下来获取CoreMark源代码。EEMBC官方维护的版本可以从GitHub获取:
git clone https://github.com/eembc/coremark.git cd coremark提示:如果网络环境导致克隆困难,也可以直接下载zip压缩包并解压。
2. 编译与优化选项解析
CoreMark的编译过程看似简单,但不同的编译器选项会显著影响最终得分。我们先看看基础编译命令:
make PORT_DIR=linux64 ITERATIONS=10000 REBUILD=1 XCFLAGS="-O3 -march=rv64gc"这里有几个关键参数需要注意:
- PORT_DIR=linux64:指定为64位Linux平台
- ITERATIONS=10000:设置迭代次数,确保测试充分
- XCFLAGS:传递编译器优化选项
对于RISC-V平台,优化选项尤为重要。以下是几种常见组合的效果对比:
| 优化选项 | 说明 | 典型得分提升 |
|---|---|---|
| -O3 | 最高级别优化 | 基准 |
| -march=rv64gc | 启用全部扩展指令 | +15-20% |
| -funroll-loops | 循环展开 | +5-8% |
| -flto | 链接时优化 | +3-5% |
在实际项目中,我推荐使用-O3 -march=rv64gc -flto组合,能在编译时间和性能间取得良好平衡。
3. 运行测试与结果解读
编译完成后,直接运行生成的coremark可执行文件:
./coremark.exe测试完成后,你会看到类似如下的输出:
2K performance run parameters for coremark. CoreMark 1.0 : 5500.000000 / GCC 11.2.0 -O3 -march=rv64gc / Stack这里5500.000000就是最终的CoreMark分数。要计算每MHz得分,用总分除以CPU频率(昉·星光2为1.5GHz):
5500 / 1500 = 3.67 CoreMark/MHz与官方标称的5.09 CoreMark/MHz相比,我们的初步结果偏低。这是因为:
- 系统后台进程占用资源
- 温度导致的动态频率调整
- 内存延迟影响
注意:为了获得准确结果,建议:
- 关闭不必要的后台服务
- 确保良好的散热条件
- 多次运行取平均值
4. 性能对比与优化技巧
将昉·星光2的测试结果与常见ARM开发板对比:
| 开发板 | 架构 | 频率 | CoreMark/MHz |
|---|---|---|---|
| 昉·星光2 | RISC-V U74 | 1.5GHz | 5.09 |
| 树莓派4B | Cortex-A72 | 1.5GHz | 5.67 |
| Orange Pi 5 | Cortex-A76 | 2.4GHz | 7.41 |
从数据可以看出,高端RISC-V处理器已经达到中端ARM Cortex-A系列的水平。以下是几个提升得分的实用技巧:
- 编译器选择:尝试Clang可能获得比GCC更好的优化效果
- 内存配置:调整malloc实现或使用静态分配
- 线程绑定:通过taskset将进程绑定到特定核心
# 使用taskset绑定到第一个CPU核心 taskset -c 0 ./coremark.exe在多次测试中,我发现昉·星光2的稳定性表现优异,连续运行测试分数波动小于2%,这在实际开发中是非常有价值的特性。