心梦 · 2022年08月20日 · 上海市

【MM32F5270开发板试用】CoreMark程序移植

前言

CoreMark是一项测试处理器性能的基准测试。代码使用C语言写成,包含:列举,数学矩阵操作和状态及CRC等运算法则。目前CoreMark已迅速成为测量与比较处理器性能的业界标准基准测试。CoreMark的得分越高,意味着性能更高。在CoreMark的官网上可以大家可以看到各家处理器型号的CoreMark得分。也可以从CoreMark的官网上下载测试代码,亲自测一下自己手中的片子的性能。CoreMark官网的连接地址:http://www.eembc.org/coremark...。本文将一步步来介绍如何将下载的CoreMark测试代码移植到MM32F5270开发板上进行测试。

移植前准备

在正式移植之前需要准备一个具有uart打印功能和1ms中断周期的定时器(使用systick也可以)。
我这里已经准备好了,并且也对uart进行了printf重定向。

下载CoreMark源代码

CoreMark源代码可以点击上面的链接进入下载:

图片.png

开始移植

  1. 提取CoreMark源代码并添加工程

    下载好的源代码有很多文件和文件夹,但是我们需要的只有很少的几个文件,如下:

    图片.png

    其中simple文件夹下面有两个文件需要用到。

    所有需要的文件整理如下:

    core_list_join.c
    core_main.c
    core_matrix.c
    core_state.c
    core_util.c
    coremark.h
    simple/core_portme.c
    simple/core_portme.h

    将如上几个文件添加到工程中,其中core_portme.c和core_portme.h是需要进行修改的文件,我就放在app文件夹下,另外几个文件不需要做修改,就放在coremark文件夹下,同时工程配置中添加文件夹路径,配置好的工程如下:

    图片.png

  2. 配置CoreMark文件

    我们已经添加了所有需要的文件,但现在程序还是不能正常运行,需要进行一些代码改造。

    • 添加硬件初始化代码

    因为core_main.c里面有了一个main函数,所有我们要把我们工程自己的main函数删除,只保留一个main函数,同时需要把硬件初始化代码移到core_main.c的main函数里面去。main函数会先调用portable_init函数来进行相关的初始化,所有我们可以将硬件初始化代码放在portable_init函数的最开始,如下:

图片.png

图片.png

  • 修改计时相关代码

    start_time/ stop_time/ get_time这几个函数,是coremark程序运行时计算程序运行时间所用。我这里使用TIM1进行计时,中断周期为1ms,重写start_time/ stop_time/ get_time这几个函数。

    void
start_time(void)
{
    //GETMYTIME(&start_time_val);
    coremark_cnt_clear();
    TIM_ClearCounterValue((TIM_Type *)TIM1);
    TIM_Start((TIM_Type *)TIM1);
}

void
stop_time(void)
{
    //GETMYTIME(&stop_time_val);
    TIM_Stop((TIM_Type *)TIM1)
}

CORE_TICKS
get_time(void)
{
    CORE_TICKS elapsed
        = (CORE_TICKS)get_cormark_cnt();
    return elapsed;
}
  • 注释掉不用的宏

图片.png

  1. CoreMark运行配置

    • 设置迭代次数

    CoreMark要求程序运行的最短时间至少是10s, 根据使用的系统时钟等情况,可以在Core_portme.h中修改迭代次数。

    //增加迭代次数
    #define ITERATIONS 12000
  • 设置打印信息
    根据具体所用的编译器版本,优化配置进行修改。
    图片.png

    • 设置优化等级

图片.png

运行结果

程序已经完全配置好,并编译成功。
现在我们连接MM32F5270开发板,打开串口调试助手,看看运行结果。

图片.png

每秒运行了400次,比官方提供的coremark数据要高一点,可能与编译器和优化等级有一些关系。

官方跑出来的数据如下:

Profile generation run parameters for coremark.
CoreMark Size : 400
Total ticks : 38377
Total time (secs): 38.377000
Iterations/Sec : 312.687287
Iterations : 12000
Compiler version : GCC 10.3.1
Compiler flags : -0hs -no_size_constraints
Memory location : STACK
seedcrc : 0x4eaf
[0]crclist : 0x6a79
[0]crcmatrix : 0x5608
[0]crcstate : 0xe5a4
[0]crcfinal : 0x8d4c
Correct operation validated. See README.md for run and reporting rules.
done.

推荐阅读
关注数
6143
内容数
276
灵动MM32 MCU相关技术知识,欢迎关注~
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息