【先楫半导体HPM6750EVKMINI评估板试用体验】基准性能测试之二:coremark

描述

本文来源电子发烧友社区,作者:李先生, 帖子地址:https://bbs.elecfans.com/jishu_2284342_1_1.html

前言
根据手册描述性能可达 5.6 CoreMark / MHz
mcu
 
我们就实际跑个分看看。
 
获取代码
https://github.com/eembc/coremark
进入HPM6750EVKMINI/proj/led目录
Clone代码
git clone https://github.com/eembc/coremark
删除其他文件,只保留如下内容,并删除barebones下的.mak文件
mcu
 
添加代码
按照上一步将文件下载到工程目录下后,按照如下方式刷新
mcu
 
可以看到源码添加到了工程目录
mcu
 
按如下设置不编译ee_printf.c因为已经有打印函数rt_kprintf
mcu
 
修改代码
coremark.h
#include "rtthread.h"
 
#include "core_portme.h"改为
#include "barebones/core_portme.h"
 
增加宏定义
#define ITERAtiONS 1
 
#if HAS_PRINTF
#define ee_printf printf
#endif
改为
//#if HAS_PRINTF
#define ee_printf rt_kprintf
//#endif
 
core_portme.h
 
#define HAS_FLOAT 1
改为
#define HAS_FLOAT 0
 
前面添加#include
 
#define COMPILER_FLAGS
    FLAGS_STR /* "Please put compiler flags here (e.g. -o3)" */
#endif
按照实际修改比如
#define COMPILER_FLAGS
    -O3
#endif
 
core_portme.c
#include "coremark.h"改为
#include "../coremark.h"
 
 
实现接口
barebones_clock()
使用rt_tick_get()
所以前面要包含 #include "rtthread.h"
 
CORETIMETYPE
barebones_clock()
{
//#error
//    "You must implement a method to measure time in barebones_clock()! This function should return current time.n"
    return rt_tick_get();
}
 
#define EE_TICKS_PER_SEC           (CLOCKS_PER_SEC / TIMER_RES_DIVIDER)改为
#define EE_TICKS_PER_SEC           RT_TICK_PER_SECOND
 
 
因为已经初始化了环境所以注释掉portable_init
//#error
//    "Call board initialization routines in portable init (if needed), in particular initialize UART!n"
 
 
core_main.c
main改为core_main
 
ee_printf("Total time (secs): %dn", time_in_secs(total_time));改为
 
    ee_printf("Total time (millisecond): %dn", time_in_secs(total_time*1000));
    if (time_in_secs(total_time) > 0)
        ee_printf("Iterations/Sec   : %dn",
                  (int)((default_num_contexts * results[0].iterations*1000.0
                      / time_in_secs(total_time*1000))));
 
main.c中
调用
    int core_main(int argc, char *argv[]);
    core_main(0, 0);
 
由于定义了大数组
#if (MEM_METHOD == MEM_STACK)
    ee_u8 stack_memblock[TOTAL_DATA_SIZE * MULTITHREAD];
#endif
所以main的任务栈要修改大一些
Rtconfig.h#define RT_MAIN_THREAD_STACK_SIZE (2048*4)
 
main任务优先级也提高一点大于shell的优先级
#define RT_MAIN_THREAD_PRIORITY 21
测试
如果提示ERROR! Must execute for at least 10 secs for a valid result!
 
则将#define ITERATIONS 10000改大一点,测试时间要大于10秒。
配置为0则自动计算迭代次数。
mcu
 
 
 
 
问题:优化等级改为-O3#define ITERATIONS 10000出错,改为8000测试。
 
mcu
 
 
主频是816M
 
 
RT_TICK_PER_SECOND=1000
RT_TICK_PER_SECOND=100
 
优化等级0
优化等级3
优化等级0
优化等级3
RAM中运行
717
2290
 
2292
CoreMark/MHz
0.878
2.8
 
2.8
ROM中运行
 
 
 
 
 
和手册描述的5.6CoreMark/MHz刚好差一倍,不知道是不是手册描述的是双核累加。
 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分