HPM5361EVK开发板CoreMark性能测试与优化实践
1. 先楫HPM5361EVK开发板与CoreMark测试概述
作为一名长期从事嵌入式开发的工程师,拿到新开发板的第一件事就是跑个分看看性能。这次测试的主角是先楫半导体推出的HPM5361EVK开发板,这是一款基于RISC-V架构的高性能微控制器评估板。在嵌入式领域,CoreMark测试就像PC界的3DMark,是衡量处理器性能的黄金标准。
CoreMark测试由EEMBC(嵌入式微处理器基准评测协会)开发,它通过执行一系列典型算法(如链表操作、矩阵运算、状态机等)来评估处理器的核心性能。与Dhrystone等传统基准测试相比,CoreMark避免了编译器过度优化的漏洞,测试结果更能反映真实性能。测试结果以"CoreMark/MHz"为单位,表示处理器在每MHz时钟频率下能完成多少次CoreMark迭代。
2. 测试环境搭建与准备工作
2.1 硬件连接与初始配置
HPM5361EVK开发板开箱后,我首先检查了板载资源:
- 主控芯片:HPM5361(双核RISC-V,主频480MHz)
- 存储:16MB Flash + 1MB SRAM
- 外设:丰富的高速接口(USB、以太网等)
使用Type-C线连接开发板的调试接口到PC,板载的调试芯片会自动识别。我注意到开发板上有两个用户按钮(Reset和User),以及多个LED指示灯,这在后续调试中会很有帮助。
2.2 软件开发环境搭建
先楫提供了完整的开发工具链:
- 下载并安装HPM SDK(版本1.1.0)
- 安装RISC-V GCC工具链(版本10.2.0)
- 配置VS Code作为开发环境,安装C/C++扩展
特别需要注意的是,SDK中已经包含了CoreMark测试例程,位于hpm_sdk/samples/coremark目录下。这个例程已经针对HPM5361做了优化配置,包括:
- 内存分配(将测试数据放在SRAM中)
- 编译器优化选项(-O3)
- 计时器配置(使用高精度定时器)
3. CoreMark测试执行与结果分析
3.1 编译与下载流程
在SDK目录下执行以下命令:
cd hpm_sdk/samples/coremark mkdir build && cd build cmake -DBOARD=hpm5361evk .. make -j编译完成后,使用hpmicroprog工具将生成的coremark.elf文件烧录到开发板:
hpmicroprog -f coremark.elf3.2 测试执行与输出解读
烧录完成后,通过串口终端(115200bps)查看输出。典型的测试输出如下:
2K performance run parameters for coremark. CoreMark 1.0 : 1680.000000 / GCC10.2.0 -O3 -funroll-loops / STACK关键数据解读:
- 1680:这是最终的CoreMark分数
- GCC10.2.0:使用的编译器版本
- -O3 -funroll-loops:启用的优化选项
3.3 性能对比分析
根据EEMBC官网数据,我将HPM5361与常见MCU进行了对比:
| 处理器型号 | 架构 | 主频(MHz) | CoreMark分数 | CoreMark/MHz |
|---|---|---|---|---|
| HPM5361 | RISC-V | 480 | 1680 | 3.50 |
| STM32H743 | ARM Cortex-M7 | 480 | 2020 | 4.21 |
| STM32F767 | ARM Cortex-M7 | 216 | 1082 | 5.01 |
| ESP32-C3 | RISC-V | 160 | 407 | 2.54 |
从数据可以看出:
- HPM5361的性能接近STM32H7系列,远超F7系列
- 在CoreMark/MHz指标上,HPM5361达到3.5,表现优秀
- 相比同为RISC-V的ESP32-C3,HPM5361展现了显著的性能优势
4. 测试中的优化技巧与注意事项
4.1 编译器优化实战
在测试过程中,我发现编译器选项对结果影响巨大。通过对比不同优化级别:
| 优化选项 | CoreMark分数 | 提升幅度 |
|---|---|---|
| -O0(无优化) | 420 | 基准 |
| -O1 | 980 | 133% |
| -O2 | 1450 | 245% |
| -O3 | 1680 | 300% |
| -O3 + -funroll-loops | 1680 | 300% |
关键发现:
- 从-O0到-O3性能提升达300%
- -funroll-loops在这个测试中没有额外收益
- -Os(优化尺寸)会降低性能(约1200分)
4.2 内存配置的影响
HPM5361有1MB SRAM,我将测试数据放在不同内存区域进行了对比:
| 内存区域 | 访问延迟 | CoreMark分数 |
|---|---|---|
| TCM (紧耦合内存) | 1周期 | 1680 |
| 主SRAM | 3周期 | 1520 |
| 外部SDRAM | 10+周期 | 980 |
建议:
- 关键性能代码应放在TCM中
- 大数据块可放在主SRAM
- 避免在性能测试中使用外部SDRAM
4.3 常见问题排查
在实际测试中遇到的一些典型问题:
分数低于预期
- 检查编译器优化选项是否启用
- 确认没有启用调试模式(-g会降低性能)
- 查看内存分配是否合理
测试无法完成
- 检查堆栈大小(至少需要4KB)
- 确认定时器配置正确
- 验证时钟树配置是否正确
结果波动大
- 关闭所有中断源
- 确保没有后台任务运行
- 检查电源稳定性
5. HPM5361性能优化实践建议
基于这次测试经验,我总结了几点实战建议:
多核利用策略HPM5361是双核设计,但标准CoreMark测试只使用单核。在实际项目中:
- 可以将计算密集型任务分配到两个核心
- 使用IPC(进程间通信)机制协调双核工作
- 注意缓存一致性问题
电源管理平衡在480MHz全速运行时,芯片温度会明显上升:
- 对不需要实时性的任务可降频运行
- 利用低功耗模式节省能耗
- 注意散热设计
外设DMA优化CoreMark测试主要考察CPU性能,实际项目中:
- 大量数据搬运应使用DMA
- 合理配置DMA突发传输
- 注意内存对齐提升DMA效率
编译器进阶技巧
- 尝试链接时优化(LTO)
- 针对关键函数使用
__attribute__((section))指定存储位置 - 使用
-ffast-math加速浮点运算(如果应用允许)
这次测试让我对国产RISC-V芯片的性能有了新的认识。HPM5361在保持良好能效比的同时,性能已经可以比肩高端ARM Cortex-M7芯片。特别是在480MHz下能达到1680 CoreMark,这意味着它完全有能力处理复杂的实时控制任务和边缘计算场景。
