打印
[G32R]

G32R501:这个Cortex®-M52 CoreMark 分数是几何?

[复制链接]
94|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主

1. 前言

在上一回的“国内首款M52内核:G32R501 EVAL板卡开箱记录”中,我们已经对这款基于Arm v8.1-M架构、内置自研紫电数学指令扩展单元并支持Arm Helium™技术的MCU——Geehy G32R501,有了初步的了解。

当时,我们只是让板子LED闪一闪、串口输出点字符,就觉得“可以了”。可事实上,要真正衡量一颗MCU的运算实力,CoreMark成绩往往是一个比较客观、公认的参考指标。到底这个G32R501跑起CoreMark来能交出怎样的成绩单?今天就让我们一起“探秘”一番,看这款Cortex®-M52 MCU在CoreMark上的表现究竟是“平平无奇”还是“惊艳四座”!

本篇就给大家呈现各版本配置下跑分的情况——不同Flash/RAM运行区域会对CoreMark产生什么样滴影响?


2. CoreMark移植:前置准备

2.1 移植过程

其实,CoreMark移植到G32R501跟常见的APM32之类MCU的思路相差不大。 • 首先,下载官方CoreMark源码; • 然后,根据Geehy的标准库/SDK修改工程环境、时钟配置; • 最后,编写或引用标准的串口输出(printf重定向)让CoreMark测试完成后打印结果即可。

如果你对移植细节感兴趣,可以参考“【技术分享】APM32F411 CoreMark 测试分享 - 极海MCU官方技术支持论坛”,这里就不赘述啦。

2.2 printf重定向

关于G32R501如何做串口打印,可回顾“国内首款M52内核:G32R501 EVAL板卡开箱记录”,其中展示了 GPIO28 / GPIO29 的 UART 通道配置,以及如何重载 fputc 函数。只要能让CoreMark结果顺利“跑”到终端,就万事OK了。


3. 跑分注意事项:G32R501内存访问花样多

在CoreMark跑分时,我们往往会精确追求“运行在哪个存储区域、主频几何、是否有等待周期”等等。G32R501有点特别之处就是Flash访问路径和可配置的内存结构。简单总结如下:

  1. Flash访问(FACC vs. CPU Cache) G32R501的CPU0和CPU1皆可通过两条不同路径读Flash:

    • ITCM -> FACC -> Flash:针对ITCM空间访问的加速逻辑;
    • CPU CACHE -> C-Bus -> busmatrix -> Flash:针对C-Bus空间访问,每次访问可由CPU Cache执行加速。

这意味着,在链接脚本中把代码放到不同“段”(ITCM Flash位置或C-Bus Flash位置),MCU的访问方式有所区别。ITCM段主要依赖FACC加速,而C-Bus段依赖CPU Cache加速。

  1. SRAM灵活分区 G32R501总共有128KB的SRAM,可通过CFGSMS模块对其分块配置,比如可以划分一部分SRAM作为ITCM、另一些作为DTCM,或者纯粹当普通SRAM等。这样可满足不同应用场景的速度或灵活性需求。

有了这些可玩要素,自然而然就想看看CoreMark在三种常见场景下的差异:

  • 从“C-Bus Flash”运行(即通过CPU Cache加速);
  • 从“ITCM Flash”运行(FACC加速);
  • 从“ITCM RAM”运行(这就更快了,理论上可直接贴近CPU)。

4. 跑分配置:三大场景

为了更好对比,我在工程中配置了不同的tag(运行位置各不同),分别使用Geehy SDK提供的链接脚本,路径:G32R501_SDK_V1.1.0\device_support\g32r501\common\sct

  1. g32r501_cbus_flash.sct

    • 对应把代码映射到 C-Bus Flash
  2. g32r501_itcm_flash.sct

    • 对应把代码映射到 ITCM Flash
  3. g32r501_itcm_ram.sct

    • 对应把代码直接放进 ITCM RAM

需要注意的是,对于ITCM_RAM运行的核心可执行代码,默认情况下板卡的启动还是在Flash里。所以需要按照下面的流程才能让ram里面的代码顺利运行:

  1. 先用“g32r501_cbus_flash工程”擦除flash,
  2. 再启动“g32r501_itcm_ram工程”调试,进入仿真后让CPU以全速执行,最后退出仿真状态。这样它才能真正从ITCM_RAM去运行CoreMark。

5. 首轮PK:三大场景的表现

先看看在未手动启用CPU Cache的情况下,我们得到的CoreMark/MHz成绩(注:CoreMark量纲还可能和实际主频相关,这里以CoreMark/MHz为横轴做对比):

  1. C-Bus Flash

    • CoreMark/MHz 1.0 : 1.643746
    • 这个数字不算出彩,和普通中端MCU跑分相当。
  2. ITCM Flash

    • CoreMark/MHz 1.0 : 3.861335
    • 哇,翻个倍还多。说明走ITCM -> FACC方式确实给力。
  3. ITCM RAM

    • CoreMark/MHz 1.0 : 4.166570
    • 再提升了一丢丢,果然直接跑在RAM上通常会速度更快。和理论的M52内核跑分差距不大

image-20250702181029984.png

可以看出,C-Bus Flash 的1.64左右对比ITCM Flash和ITCM RAM,差距极大。不禁让人好奇:“C-Bus不是也有CPU Cache加速吗?为何比ITCM Flash慢这么多呢?”别急,我们还没手动打开CPU Cache呢,它应该是默认没启动。


6. 再进阶:开启CPU Cache 后的惊喜

既然C-Bus Flash可以配合CPU Cache,那我们就再来一试。只需要在代码里调用以下两行即可:

// Enable Instruction Cache
SCB_EnableICache();

// Enable Data Cache
SCB_EnableDCache();

然后重新测试,得到的新成绩是:

  1. C-Bus Flash(已启用Cache)

    • CoreMark/MHz 1.0 : 4.022346
    • 哇,一下子从1.64飙到4.02,翻了两倍多,这才是真正领略到了Cache的力量啊。
  2. 其他两个就没什么变化了

    1. ITCM Flash,它本来走的是FACC加速,不依赖CPU Cache。
    2. ITCM RAM,说明这部分也本身就很快了,Cache不 Cache影响也不大。

image-20250702181040721.png

如此一来,C-Bus Flash 在开启CPU Cache后,甚至可以和 ITCM RAM 跑分平起平坐。看得出,给C-Bus这边加Cache能带来明显效能飞跃,也就合理解释了“为什么 ITCM Flash 在没有启用CPU Cache时就能跑到3.86”的现象——它本身有另一条加速通道 FACC 做后台支持。所以一旦给C-Bus运输线上再加个CPU Cache的“加速捷径”,差距就一下子被抹平甚至反超!


7. G32R501:性能、特色与更多想象

G32R501在不同内存访问配置下,CoreMark/MHz可稳定落在4.0~4.16之间,已非常接近纯官方Cortex®-M52的参考值4.30。

image-20250702181049798.png

来源https://armkeil.blob.core.windows.net/developer/Files/pdf/product-brief/arm-cortex-m-processor-comparison-table.pdf

精彩的部分在于,G32R501还是双核M52架构,并拥有自研“紫电数学指令扩展”与Arm Helium™(MVE)矢量扩展,三重硬件“Buff”。CoreMark作为纯整数基准,本身并未包含大量DSP或矢量化测试。而在实际应用中,如果启用紫电扩展与Helium™指令调度更多DSP或矢量运算,尤其是像电机矢量控制、滤波、FFT这类场景,性能提升空间会更大。

对于G32R501的CoreMark测试数据你还满意么?欢迎在评论区留言一起讨论吧。

这里是代码upload 附件:G32R501_SDK_V1.1.0_CoreMark.zip(请复制G32R501_SDK_V1.1.0\中的utilities到解压后的根目录才能正常编译和调试哦)~


使用特权

评论回复
沙发
kai迪皮|  楼主 | 2025-7-2 19:14 | 只看该作者

使用特权

评论回复
板凳
复古留声机| | 2025-7-4 13:42 | 只看该作者
非常详细的测试和分析,G32R501在不同配置下的性能表现令人印象深刻。尤其是开启CPU Cache后,C-Bus Flash的性能提升非常明显,几乎可以与ITCM RAM相媲美。这证明了G32R501在内存访问和缓存管理方面的灵活性和高效性。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

39

主题

251

帖子

11

粉丝