上篇帖子中,我们完成了Embedded Studio开发环境搭建,对Hello World示例进行了编译和调试。
本篇将使用Embedded Studio编译CoreMark程序,并进行coremark跑分测试,同时对HPM6750的跑分结果和STM32部分型号的跑分结果进行对比。
什么是CoreMark?
来自CoreMark首页的解释是:
CoreMark is a simple, yet sophisticated benchmark that is designed specifically to test the functionality of a processor core. Running CoreMark produces a single-number score allowing users to make quick comparisons between processors.
翻译一下就是:
CoreMark是一个简单而又精密的基准测试程序,是专门为测试处理器核功能而设计的。运行CoreMark会产生一个“单个数字”的分数,(从而)允许用户在(不同)CPU之间进行快速比较。
简单来说,就是一个测试CPU性能的程序,类似PC上的Cinebench、CPU-Z之类的CPU性能测试工具。
了解了CoreMark是什么之后,接下来我们尝试在HPM6750开发板上跑一下CoreMark,看看分数是多少。
HPM SDK样例中已经附带了CoreMark,因此我们直接使用SDK中的coremark程序就行了。
首先,根据上篇帖子中的介绍,使用generate_project命令生成Embedded Studio的项目:
generate_project命令执行完毕后,打开生成的hpm6750evkmini_build\segger_embedded_studio子目录,可以看到项目文件已经创建完成了:
双击coremark.emProject文件,默认会使用Embedded Studio打开项目(Embedded Studio安装成功的话):
可以看到,coremark主要的源文件只有6个.c文件。
点击Embedded Studio的【Build】→【Build coremark】菜单,即可触发编译;稍等一段实际后,编译完成,可以在Output窗口看到Build complete:
开始运行之前,我们可以使用串口调试助手(或者其他类似的工具),连接开发板的串口设备。我这里使用的是MobaXterm,Putty或者sscom之类也是可以的。
串口配置是:
点击Embedded Studio的【Debug】→【Go】菜单,即可运行coremark程序:
不需要单步执行,直接点绿色三角形图标(Continue Execution),让程序直接运行。
这段输出是由CoreMark程序启动时调用board_init输出的,所以在测试刚刚开始就会输出。
图中的HPMicro字符画是测试刚开始时输出的,下面的部分是最终输出。
最总跑分:4698.857421
细心的朋友可能会发现,这里的分数并不像新闻里面报道的9220分。这是为什么呢?
经过简单的分析coremark项目的代码,不难得出答案。原来,示例程序里面的coremark项目,只是用了HPM6750的一个CPU核,而HPM6750是有两个同样的CPU核的。
那么,双核同时运行CoreMark测试,分数会翻倍吗?会是官方公布的9220分吗?这里我们暂且保留悬念,后面的帖子中我们将进行双核CoreMark实验。
前面的跑分结果是使用-t flash_xip生成的项目得到的,接下来我们尝试使用不同-t选项进行10轮测试:
可以看到,release参数的执行平均分数最高,单核达到了4701.68分。
观察generate_project命令的输出,可以发现不同-t参数,项目使用的链接脚本不同:
通过对比链接脚本的内容,我们可以知道,不同链接脚本使用的存储配置不同。上一篇帖子的最后,也有一个表格做了总结,这里再次贴出来:
调试版 | 发布版(更小) | 程序代码 | 运行内存 |
---|---|---|---|
debug | release | 片内SRAM | 片内SRAM |
flash_xip | flash_xip_release | FLASH芯片 | 片内SRAM |
flash_sdram_xip | flash_sdram_xip_release | FLASH芯片 | DRAM芯片 |
CoreMark首页的Scores页面中,有一些已经测试过的CPU、MCU的跑分记录。
我们可以在Processor Name Match框中输入STM32,点击Apply进行过滤。过滤出结果后,我们可以按照分数从高到底排序:
可以看到,STM32H745的跑分是3223.82分,STM32H743的跑分是2020.55分。相比HPM6750单个CPU核的4698.86分差的都比较多。
不过这里查询到的数据都比较老了,STM32H7系列产品也在不断更新。因此,我从STM官网上找来了关于STM32H743和STM32H745的CoreMark跑分,以及HPM6750官方公布跑分数据,对比如下:
STM32H743 | STM32H745 | HPM6750 | |
---|---|---|---|
处理器架构 | ARM Cortex-M7 | ARM Cortex-M7+M4 | 双32位RISC-V核 |
CPU最高频率(MHz) | 480 | 480+240 | 816+816 |
CoreMark跑分(官方数据) | 2424 | 3224 | 9220 |
引用: Jacktang 发表于 2022-5-15 08:54 确实有点疑问,双核同时运行CoreMark测试,分数会翻倍吗?
基本上是的,我看了coremark源码,它的多核跑分计算方式是:迭代次数*并发数/持续时间。
引用: freebsder 发表于 2022-5-17 23:23 这个差的有点多呀,主频上去了分值就上去了吗?
这是单核跑分,双核的话基本上会翻倍
CH32V307才380分,这个分数也不错了