手把手教你用CoreMark给RISC-V芯片跑个分(Ubuntu 20.04 + 交叉编译实战)

张开发
2026/4/18 16:29:36 15 分钟阅读

分享文章

手把手教你用CoreMark给RISC-V芯片跑个分(Ubuntu 20.04 + 交叉编译实战)
RISC-V芯片性能评估实战CoreMark基准测试全流程解析在嵌入式开发领域选择一款合适的处理器往往需要综合考虑性能、功耗和成本等多重因素。对于RISC-V架构的开发者而言如何准确评估芯片的实际性能成为项目初期的重要课题。CoreMark作为业界公认的嵌入式处理器基准测试工具以其简洁高效的特点成为衡量RISC-V芯片性能的黄金标准。本文将带领读者从零开始在Ubuntu 20.04环境下完成RISC-V芯片的CoreMark性能测试全流程。不同于简单的操作记录我们将深入探讨每个步骤背后的技术原理提供可复用的方法论并针对实际开发中可能遇到的典型问题给出解决方案。1. 环境准备与工具链配置1.1 搭建基础开发环境在开始CoreMark测试之前需要确保开发主机具备完整的交叉编译环境。对于Ubuntu 20.04用户建议执行以下基础软件包安装sudo apt update sudo apt install -y build-essential git wget flex bison \ libgmp-dev libmpfr-dev libmpc-dev texinfo这些基础工具将为后续的交叉编译工具链安装提供必要支持。值得注意的是虽然Ubuntu软件源中提供了预编译的RISC-V工具链但为了确保最佳的兼容性和灵活性我们更推荐从源码构建。1.2 获取RISC-V GNU工具链RISC-V官方维护的GNU工具链是进行CoreMark编译的基础。获取工具链有两种主要方式预编译版本适合快速开始但可能缺少某些定制选项源码编译灵活性高可针对特定指令集优化对于大多数开发者我们推荐使用官方预编译版本以节省时间wget https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2023.06.09/riscv64-elf-ubuntu-20.04-nightly-2023.06.09-nightly.tar.gz tar xzf riscv64-elf-ubuntu-20.04-nightly-2023.06.09-nightly.tar.gz export PATH$PATH:$(pwd)/riscv64-elf/bin提示将工具链路径添加到.bashrc或.zshrc中可避免每次会话都需要重新设置PATH验证工具链安装是否成功riscv64-unknown-linux-gnu-gcc --version预期输出应显示类似以下信息riscv64-unknown-linux-gnu-gcc (GCC) 12.2.02. CoreMark源码获取与结构解析2.1 获取CoreMark源码CoreMark项目托管在GitHub上可通过以下命令获取最新源码git clone https://github.com/eembc/coremark.git cd coremark源码仓库包含多个目录每个对应不同的运行环境coremark/ ├── barebones # 裸机环境适配 ├── linux # Linux环境适配 ├── linux64 # 64位Linux专用适配 ├── core_main.c # 主测试逻辑 ├── core_list_join.c # 链表操作测试 ├── core_matrix.c # 矩阵运算测试 └── core_state.c # 状态机测试2.2 CoreMark测试原理剖析CoreMark通过四种典型工作负载评估处理器性能链表操作测试指针操作和内存访问效率矩阵乘法评估算术运算和缓存性能状态机检验分支预测能力CRC计算测量位操作性能测试结果以CoreMark/MHz为单位数值越高表示性能越好。这种标准化指标使得不同频率的处理器也能直接比较。3. RISC-V平台适配与编译3.1 创建RISC-V专用配置由于CoreMark默认不包含RISC-V的完整支持我们需要基于linux64配置创建专用版本cp -rf linux64 riscv64修改riscv64/core_portme.mak文件关键配置如下CC riscv64-unknown-linux-gnu-gcc CFLAGS -O2 -I$(PORT_DIR) -I. -DFLAGS_STR\$(FLAGS_STR)\ LFLAGS_END -lrt EXE .rvexe3.2 单核版本编译执行以下命令编译单核版本make PORT_DIRriscv64 XCFLAGS-DPERFORMANCE_RUN1编译成功后将生成coremark.rvexe可执行文件。需要注意的是由于这是RISC-V架构的二进制文件无法在x86主机上直接运行会出现Exec format error错误——这是正常现象。3.3 多核版本编译对于支持多核的RISC-V芯片可以通过添加线程支持来测试并行性能make PORT_DIRriscv64 XCFLAGS-DMULTITHREAD4 -DUSE_PTHREAD -DPERFORMANCE_RUN1关键参数说明参数作用推荐值MULTITHREAD线程数根据核心数设置USE_PTHREAD启用POSIX线程必须设置PERFORMANCE_RUN性能测试模式14. 测试执行与结果分析4.1 部署到目标平台将编译生成的coremark.rvexe通过以下方式传输到RISC-V开发板SD卡直接复制到存储介质网络传输使用scp或nfs调试器通过OpenOCD等工具下载在目标板上执行测试chmod x coremark.rvexe ./coremark.rvexe4.2 解读测试结果典型的CoreMark输出如下2K performance run parameters for coremark. CoreMark 1.0 : 4.000000 / GCC8.3.0 -O2 -DPERFORMANCE_RUN1 -DMULTITHREAD4 -DUSE_PTHREAD1关键指标说明Iterations/Sec每秒迭代次数直接影响CoreMark分数CoreMark/MHz标准化性能指标便于跨平台比较Total time测试总耗时验证实时性4.3 性能优化建议根据测试结果可以考虑以下优化方向编译器优化尝试不同的优化级别-O1到-O3实验LTO链接时优化选项指令集扩展启用RISC-V的M乘法、F单精度浮点等扩展针对特定微架构调整编译参数系统级调优调整CPU频率和电压优化内存子系统配置5. 常见问题与解决方案在实际测试过程中开发者可能会遇到以下典型问题5.1 编译错误排查问题现象工具链报错提示缺少头文件或库解决方案确认工具链路径设置正确检查是否安装了所有依赖库验证RISC-V工具链的完整性5.2 运行时错误处理问题现象在目标板执行时出现段错误(Segmentation Fault)可能原因内存配置不足动态链接库缺失指令集不兼容调试步骤riscv64-unknown-linux-gnu-readelf -a coremark.rvexe | grep NEEDED5.3 性能异常分析当测试结果明显低于预期时建议检查CPU频率是否锁定在最高档确认散热方案是否导致降频分析内存带宽是否成为瓶颈6. 进阶应用与扩展6.1 自动化测试脚本为提高测试效率可以创建自动化脚本#!/bin/bash # build_and_test.sh # 编译 make clean make PORT_DIRriscv64 XCFLAGS-DMULTITHREAD$1 -DUSE_PTHREAD # 传输到开发板 scp coremark.rvexe usertarget:/tmp/ # 远程执行 ssh usertarget cd /tmp ./coremark.rvexe6.2 多配置对比测试通过矩阵测试比较不同配置的影响配置组合优化选项线程数典型得分基础配置-O212.50 CoreMark/MHz性能模式-O3 -marchrv64imafdc43.80 CoreMark/MHz精简模式-Os12.30 CoreMark/MHz6.3 集成到CI/CD流程将CoreMark测试加入持续集成系统监控性能变化# .gitlab-ci.yml 示例 benchmark: stage: test script: - make PORT_DIRriscv64 - scp coremark.rvexe target:/tmp/ - ssh target /tmp/coremark.rvexe results.txt - python analyze_results.py在实际项目中我们发现CoreMark测试的稳定性很大程度上依赖于工具链版本和编译选项。经过多次验证riscv64-unknown-linux-gnu-gcc 12.2.0配合-O3优化选项能够在多数RISC-V芯片上获得最佳测试结果。

更多文章