保姆级教程:在Ubuntu 20.04上为RISC-V芯片(如玄铁C910)编译运行CoreMark v1.01

张开发
2026/4/17 15:17:13 15 分钟阅读

分享文章

保姆级教程:在Ubuntu 20.04上为RISC-V芯片(如玄铁C910)编译运行CoreMark v1.01
RISC-V平台CoreMark性能测试全流程实战指南在嵌入式开发领域选择适合的基准测试工具对处理器性能进行准确评估至关重要。CoreMark作为业界公认的轻量级测试标准特别适合评估RISC-V这类精简指令集架构的核心处理能力。本文将手把手带你完成从工具链配置到结果分析的全过程涵盖玄铁C910等RISC-V芯片的专项优化技巧。1. 环境准备与工具链配置1.1 交叉编译工具链安装RISC-V开发的首要步骤是建立可靠的交叉编译环境。推荐使用官方预编译的工具链wget https://github.com/riscv-collab/riscv-gnu-toolchain/releases/download/2023.06.09/riscv64-unknown-linux-gnu-x86_64-20230609.tar.gz tar xvf riscv64-unknown-linux-gnu-x86_64-20230609.tar.gz export PATH$PATH:~/riscv64-unknown-linux-gnu/bin验证安装是否成功riscv64-unknown-linux-gnu-gcc --version注意若需支持C扩展指令集需在编译工具链时添加--with-archrv64gc参数1.2 依赖库检查确保主机系统已安装基础开发工具sudo apt update sudo apt install build-essential git wget libncurses-dev flex bison2. CoreMark源码获取与结构解析2.1 获取最新源码直接从EEMBC官方仓库克隆git clone https://github.com/eembc/coremark.git cd coremark关键目录说明barebones/裸机环境移植模板linux/Linux平台参考实现core_portme.[ch]平台适配层代码2.2 RISC-V专用目录创建复制Linux参考实现作为基础cp -r linux64 riscv643. RISC-V专项适配改造3.1 编译器配置修改编辑riscv64/core_portme.makCC riscv64-unknown-linux-gnu-gcc CFLAGS -marchrv64imafdc -mabilp64d LFLAGS_END -lrt -lpthread3.2 多核支持优化对于支持多核的RISC-V处理器如玄铁C910需添加线程支持make PORT_DIRriscv64 XCFLAGS-DMULTITHREAD4 -DUSE_PTHREAD常见问题解决**错误undefined reference topthread_create** 确保LFLAGS_END包含-lpthread警告incompatible implicit declaration添加-D_XOPEN_SOURCE600到CFLAGS4. 编译与部署实战4.1 单核版本编译基础编译命令make PORT_DIRriscv64 XCFLAGS-DPERFORMANCE_RUN1生成文件说明coremark.rvexeRISC-V可执行文件run1.log测试结果输出4.2 目标板卡部署通过SCP传输到开发板scp coremark.rvexe usertarget-board:/tmp/在目标板执行chmod x /tmp/coremark.rvexe /tmp/coremark.rvexe5. 结果分析与优化建议典型输出示例2K performance run parameters for coremark. CoreMark 1.0 : 6.000000 / GCC8.3.0 -O2 -marchrv64imafdc关键指标解读Iterations/Sec每秒迭代次数值越高性能越好CoreMark/MHz每MHz频率得分用于跨平台比较优化方向编译器选项调优CFLAGS -O3 -funroll-loops -flto内存对齐优化#define MEM_ALIGN 64指令集扩展检测riscv64-unknown-linux-gnu-gcc -marchrv64imafdc -dM -E - /dev/null | grep RV646. 高级技巧与深度优化6.1 静态链接优化减少动态依赖LDFLAGS -static6.2 性能计数器集成通过RISC-V PMU获取精确周期数unsigned long get_cycles(void) { unsigned long cycles; asm volatile (rdcycle %0 : r (cycles)); return cycles; }6.3 多核负载均衡针对NUMA架构的优化策略cpu_set_t cpuset; CPU_ZERO(cpuset); CPU_SET(core_id, cpuset); pthread_setaffinity_np(pthread_self(), sizeof(cpu_set_t), cpuset);7. 行业对比与趋势洞察主流RISC-V芯片CoreMark得分参考单核1GHz芯片型号CoreMarkCoreMark/MHz玄铁C9106.126.12SiFive U745.415.41Kendryte K5103.893.89性能提升建议启用编译器PGO优化使用RVV向量化扩展调整L1缓存预取策略在实际项目中我们发现玄铁C910的乱序执行单元对CoreMark分数提升显著。通过-mtunec910参数可激活特定优化相比通用编译选项可获得约12%的性能提升。

更多文章