【GD32E50x系列性能简介】
GD32E5系列基于最新Armv8-M架构的Cortex-M33内核,处理器主频最高可达180MHz,内置硬件乘/除法器并提供了完整的DSP指令集和单精度浮点运算单元(FPU),还配备了全新的硬件三角函数加速器(TMU),可支持矢量、正余弦、指数、平方根、常用对数等数学三角运算,以减轻CPU负担并提高处理效率,从而推动以数字信号处理为中心的高级计算应用。最高工作性能可达244DMIPS,CoreMark 测试可达547分。同主频下的代码执行效率相比市场Cortex®-M4产品提升了10%-20%,相比Cortex®-M23产品的性能提升超过40%。
既然性能那么强,那就先跑个分来评测一下吧。
【CoreMark简介】
CoreMark是由EEMBC(Embedded Microprocessor Benchmark Consortium)的Shay Gla-On于2009年提出的一项基准测试程序,CoreMark的主要目标是简化操作,并提供一套测试单核处理器核心的方法。测试标准是在配置参数的组合下单位时间内运行的CoreMark程序次数(单位:CoreMark/MHz),该数字值越大则说明测试的性能越好。
目前在嵌入式CPU行业中普遍公认的性能测试指标的标准主要使用以下三种,MIPS、Dhrystone、Coremark,而CoreMark与Dhrystone一样,拥有体积小、方便移植、易于理解、免费并且显示单个数字基准分数。与Dhrystone不同的是,Dhrystone的主要部分实际上暴露了编译器优化工作负载的能力,而不是实际MCU或CPU的能力,的性能,而CoreMark具有特定的运行和报告规则,从而可以避免由于所使用的编译库不同而导致的测试结果难以比较。
更多详情请参见: https://blog.csdn.net/weixin_45032957/article/details/112362028
【GD32E503移植CoreMark步骤】
- 去官网或者GitHub上 下载好Coremark文件 ;
- 在 给出的例程中找到 04_USART_Printf 工程模板,主频设定在180M,把串口0调试好,因为之后是采用串口输出跑分结果的。评估板上已经将UART0转为USB输出了,可以直接用USB数据线连接电脑串口工具,这里选择了去配置USART0,并重定向了printf函数,可以向串口助手打印数据,简化了结果输出 ;
- 将启动文件中的初始化时的堆栈改大一些,否则会出现问题,默认的都是0X00000400,这里测试改成 0X00002000 ;
- 在串口模板工程中新建Coremark文件夹,将下载得到的官方coremark文件复制进去,并且在工程设置中添加好 .h头文件路径 ;
- 在Core_portme.c 中的 portable_init 函数添加平台的初始化代码(时钟, GPIO, 串口),类似Main 函数中的初始化代码,并添加对应的头文件,此时可以将main文件删除 ;
- 在 Core_portme.c 中修改计时相关代码(start_time/ stop_time/ get_time 这几个函数和system tick 的中断处理函数),按照以下方式修改 ;
- CoreMark 要求程序运行的最短时间至少是 10s, 根据使用的系统时钟等情况,可以在 Core_portme.h 中修改迭代次数,根据具体所用的编译器版本,优化配置进行修改 ;
- 在keil工程设置中,修改优化等级,不同的优化等级编译出来的运行效率不一样 ,实测 -Ofast 比 -O3 还要跑分快一些,编译运行代码,可以看到串口工具有以下信息打印出来 :
【GD32E503 CoreMark跑分小结】
经过优化后GD32E503最高可以跑585分,如果不优化的话,基本只能到260多,因为我用的是MKD5 AC6编译器,跑分结果应该会比IAR低一些。CoreMark 官方没有给出GD32的跑飞数据,但相比之前的介绍,实测结果已经差不离了。有机会后面再测试一下DHRY,看下性能的另一个指标 DMips/MHz 能到多少。
附件内容为本次评测移植的代码,先分享给大家评测。欢迎拍砖!