根据手册描述coremark得分为403我们就实际测一测。
获取代码
https://github.com/eembc/coremark
添加头文件包含路径
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
-O3执行的很快,时间不够
将#define ITERATIONS 1000改为
#define ITERATIONS 10000
-Ofast 和-O3一样
可以看到优化等级会带来结果的巨大差异。
我们的跑分和手册描述的403还是有一点点差距,可能和编译器和优化环境等都有一些关系。
https://www.eembc.org/coremark/scores.php
下可以查看其他芯片跑分进行对比
Coremark的移植比较简单,本文进行了coremark的基准测试,可以看出和手册的值有一点差异,因为编译器等环境不一样。编译器优化对得分影响很大。