644|2

9

帖子

0

资源

一粒金砂(中级)

【GD32E503评测】——step02.拿国产M33跑个分吧 [复制链接]

【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步骤】

  1. 去官网或者GitHub上 下载好Coremark文件 ;
  2. 在 给出的例程中找到 04_USART_Printf 工程模板,主频设定在180M,把串口0调试好,因为之后是采用串口输出跑分结果的。评估板上已经将UART0转为USB输出了,可以直接用USB数据线连接电脑串口工具,这里选择了去配置USART0,并重定向了printf函数,可以向串口助手打印数据,简化了结果输出 ;
  3. 将启动文件中的初始化时的堆栈改大一些,否则会出现问题,默认的都是0X00000400,这里测试改成 0X00002000 ;
  4. 在串口模板工程中新建Coremark文件夹,将下载得到的官方coremark文件复制进去,并且在工程设置中添加好 .h头文件路径 ;
  5. 在Core_portme.c 中的 portable_init 函数添加平台的初始化代码(时钟, GPIO, 串口),类似Main 函数中的初始化代码,并添加对应的头文件,此时可以将main文件删除 ;
  6. 在 Core_portme.c 修改计时相关代码(start_time/ stop_time/ get_time 这几个函数和system tick 的中断处理函数),按照以下方式修改 ;
  7. CoreMark 要求程序运行的最短时间至少是 10s, 根据使用的系统时钟等情况,可以在 Core_portme.h 中修改迭代次数,根据具体所用的编译器版本,优化配置进行修改 ;
  8. 在keil工程设置中,修改优化等级,不同的优化等级编译出来的运行效率不一样 ,实测 -Ofast 比 -O3 还要跑分快一些,编译运行代码,可以看到串口工具有以下信息打印出来 :

image.png

【图】 -Ofast 等级跑分结果

 

image.png

【图】 -O3 等级跑分结果

void start_time(void) {
        //GETMYTIME(&start_time_val );
        Tick=0;
        SysTick_Config(SystemCoreClock/1000);
        
}

void stop_time(void) {
        //GETMYTIME(&stop_time_val );

        SysTick->CTRL&=SysTick_Counter_Disable;
        SysTick->VAL=SysTick_Counter_Clear;
        
}
CORE_TICKS get_time(void) {
//        CORE_TICKS elapsed=(CORE_TICKS)(MYTIMEDIFF(stop_time_val, start_time_val));
//        return elapsed;
        CORE_TICKS elapsed=(CORE_TICKS)Tick;
        return elapsed;
        
        
}

还需要添加以下宏定义变量:

#define SysTick_Counter_Disable   ((uint32_t)0xFFFFFFFE)
#define SysTick_Counter_Enable    ((uint32_t)0x00000001)
#define SysTick_Counter_Clear     ((uint32_t)0x00000000)
__IO uint32_t Tick;

还需要修改systick中断函数:

void delay_decrement(void)
{
                extern __IO uint32_t Tick;
    
          Tick++;
    if (0U != delay){
        delay--;
    }
        
}

 【GD32E503 CoreMark跑分小结】

  经过优化后GD32E503最高可以跑585分,如果不优化的话,基本只能到260多,因为我用的是MKD5 AC6编译器,跑分结果应该会比IAR低一些。CoreMark 官方没有给出GD32的跑飞数据,但相比之前的介绍,实测结果已经差不离了。有机会后面再测试一下DHRY,看下性能的另一个指标 DMips/MHz 能到多少。

  附件内容为本次评测移植的代码,先分享给大家评测。欢迎拍砖!

GD32E50x_USART_Printf_CoreMark_V1.1.0.rar

4.83 MB, 下载次数: 1

赞赏

1

查看全部赞赏


回复

684

帖子

2

资源

版主

不错不错,下载来跑跑看,一直看别人都在测评这个,自己还没试过。


回复

3180

帖子

1

资源

五彩晶圆(初级)

260和585?这优化了啥提升了一倍多?

个人签名人已离开,无事别找,找也找不到。

回复
您需要登录后才可以回帖 登录 | 注册

最新文章 更多>>
    关闭
    站长推荐上一条 1/6 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表