你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

STM32MP135 MP157 MP257 CoreMark移植&&跑分对比&&多核心负载不均衡问题排查与解决

[复制链接]
短笛君 发布时间:2025-11-9 17:11

先来张全家福展示本次测试设备)

dfaddbc5446361f3fec6a1265df09d89.jpg

左上角是STM32MP135F-DK 主控芯片是STM32MP135FAE7 单核A7 主频最高1Ghz 4-Gbit DDR3L, 16 bits, 533 MHz

右上角是STM32MP257F-DK 主控芯片STM32MP257FAK3 Arm^®^ 双核Cortex^®^ -A35(运行频率1.5 GHz) 4-Gbit DDR3L, 16 bits, 533 MHz

下面是STM32MP157开发板 STM32MP157A 双核A7 650Mhz 1Gddr3

STM32MP135F-DK

MP135F是单核A7测试程序比较简单

首先获取Coremark的源码

# 下载CoreMark源码
wget https://github.com/eembc/coremark/archive/refs/heads/main.zip
unzip main.zip
cd coremark-main

编译前需要先source一下工具链

source /home/ddj/Documents/STM32MPU_toolchain/environment-setup-cortexa7t2hf-neon-vfpv4-ostl-linux-gnueabi

由于我们是交叉编译 所以只需要编译即可 然后手动传输到开发板上运行即可

这里我们使用make compile命令编译我们想要的文件

//mulit.png

(编译图片放的是MP257的 mp135的忘记截图了 其实都差不多 主要取决于是source的哪个编译链 A35是64bit A7是32bit)

这写输出信息中我们要关注下-O3这个优化等级 因为不同优化等级对跑分影响是很大的

scp.png

在输出目录下将编译文件使用scp命令传输到开发板中,先使用sync命令刷新下 可以看到文件已经传输到板子上

image.png

更新之前先确认下MCU是不是处于最佳性能模式(后面抽空会讲MPU的几种性能模式),

image.png

直接./coremark.exe执行即可

稍等片刻即可输出成绩

image.png

Iterations/Sec : 3051.222396 即为跑分性能 数值越大性能越强

STM32MP157/MP257

为什么会把MP157和MP257放在一起,因为这两个都是双核MCU 在跑Coremark的时候要考虑多线程优化 不然测试出来的结果会偏低很多 因为只有1个MCU在干活

MP157

因为MP157和MP135都是A7架构 用的一套工具链 我们把程序上传到MP157的板子中运行 并查看CPU负载

singlecore.png

很奇怪 明明已经读到2个CPU核心了 为什么只有一个U在干活

image.png

查阅下Coremark源码 其中有着完成的多线程实现

#if USE_PTHREAD
ee_u8 core_start_parallel(core_results *res) {
    return (ee_u8)pthread_create(&(res->port.thread), NULL, iterate, (void *)res);
}
ee_u8 core_stop_parallel(core_results *res) {
    void *retval;
    return (ee_u8)pthread_join(res->port.thread, &retval);
}
#endif

所以关键就是在于这个宏定义

usepthread.png

我们将源码中这个宏定义改为1 启用多线程

并且查看makefile文件

cflags.png

在CFLAGS中添加多线程编译宏定义

addcflags.png

再次进行编译

mulit.png

可以看到多线程宏作为编译参数已经传递进去

总结两点:

  1. 代码中没有启用多线程
  2. 编译时没有将多线程参数编译进去,导致编译器没有处理多线程部分代码

至此 再通过scp命令将文件传输进去 运行并查看CPU负载

2core.png

两个核心都全部干活 没有偷懒

atkmp1572core.png

查看成绩 4895分 接近5000分

MP257

先前已经处理了MP157部分的源码 所以在MP257上只需要重新source A35的编译链并且重新make compile即可

保险起见还是看下CPU负载

multcore.png

全核心负载达到100% 代码正常运行

mp2572core.png

输出成绩 7903分 接近8000

总结

下方数据仅代表本次测试所使用的MPU 结果仅供参考

参数 STM32MP135 STM32MP157 STM32MP257
CPU架构 1×Cortex-A7 2×Cortex-A7 2×Cortex-A35
CPU核心数 单核 双核 双核
CPU频率 650MHz / 1GHz 800MHz 1.5GHz
协处理器 NA Cortex-M4 Cortex-M33
电源管理 STPMIC1 STPMIC1 STPMIC25
内存支持 DDR3/LPDDR2/3 DDR3/LPDDR2/3 DDR3/LPDDR3/4
CoreMark 3047 4895 7903
USB USB3.0 usb2.0 usb2.0
性能等级 入门级 主流级 高性能级

P0PQUK_SO%DU87D2.png

NL0JF0UQDGXN4_YN83.png

后续尝试多次优化 增加编译器优化标志 跑分均没有很大提高

收藏 评论1 发布时间:2025-11-9 17:11

举报

1个回答
STMCU-管管 回答时间:4 天前

总结的很到位啊

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版