[原创] 【贝能高性价比ATSAMD51评估板】基准性能测试之五:coremark测试

qinyunti   2022-12-1 11:35 楼主

前言

  根据手册描述coremark得分为403我们就实际测一测。

image-20221201113541-1.png  

过程

添加代码

获取代码

https://github.com/eembc/coremark

image-20221201113541-2.png  

添加头文件包含路径

image-20221201113541-3.png  

 

移植接口

core_portme.h中

typedef size_t         ee_size_t;

改为

typedef ee_u32         ee_size_t;

 

core_portme.h中按照实际改为

"-O0" "-O3" "-Ofast"等

 

增加

#include <stdio.h>

注释掉

//#define NULL ((void *)0)

 

#define ITERATIONS 1000

该宏控制循环次数,时间不够时增加该值

#define CLOCKS_PER_SEC 1000

该宏指定时间的单位

#define HAS_PRINTF 1

使用printf输出

注释掉//int ee_printf(const char *fmt, ...);

 

core_portme.c中

实现

barebones_clock()

{

#error \

    "You must implement a method to measure time in barebones_clock()! This function should return current time.\n"

}

改为

barebones_clock()

{

//#error \

//    "You must implement a method to measure time in barebones_clock()! This function should return current time.\n"

 return SYSTICK_GetTickCounter();

}

 

前面添加头文件

#include "definitions.h"

 

 

注释掉

//#error \

//    "Call board initialization routines in portable init (if needed), in particular initialize UART!\n"

 

我们初始化在main函数中完成

 

由于我们有了printf多以不添加ee_printf.c否则要实现

uart_send_char

 

core_main.c中main函数改为

coremark_main

测试

Main.c中申明

int coremark_main(int argc, char *argv[]);

 

调用main函数中调用coremark_main

-O0

image-20221201113541-4.png  

 

-O3执行的很快,时间不够

image-20221201113541-5.png  

将#define ITERATIONS 1000改为

#define ITERATIONS 10000

 

image-20221201113541-6.png  

 

-Ofast 和-O3一样

image-20221201113541-7.png  

可以看到优化等级会带来结果的巨大差异。

 

我们的跑分和手册描述的403还是有一点点差距,可能和编译器和优化环境等都有一些关系。

 

https://www.eembc.org/coremark/scores.php

下可以查看其他芯片跑分进行对比

image-20221201113541-8.png  

 

 

总结

Coremark的移植比较简单,本文进行了coremark的基准测试,可以看出和手册的值有一点差异,因为编译器等环境不一样。编译器优化对得分影响很大。

 

回复评论 (1)

403的跑分处于一个什么水平?

在爱好的道路上不断前进,在生活的迷雾中播撒光引
点赞  2022-12-2 07:39
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复