前言:
Coremark是一个综合性的基准测试程序,正如其名称所表示的, CoreMark测试是一个简单而又复杂的基准测试程序,是专门用来测试处理器核心性能的。通过执行常用于应用程序中的简单代码(基本的数据结构和算法)来测试cpu性能。结果是计算每秒钟主程序的迭代次数。
CoreMark测试是最大程度抛弃了程序对系统的依赖,不依赖于系统库函数,对编译器依赖也比较小,因此对于不同平台(如大小尾数,高端或低端处理器),其结果有较好的参考价值。运行 CoreMark测试产生一个简单分数,使用户能够快速比较不同处理器的性能。
CoreMark测试是读/写操作、整数操作和状态机控制等操作混合而成,其代码较小并易于理解。和其他 EEMBC基准测试项目不同, coremark不是某一实际的应用测试,但其实际工作内容,都是一些嵌入式系统中常用的算法,包括矩阵操作、链表操作、状态机操作和CRC算法等。
不说废话,开始移植coremark
一下载coremark
http://www.eembc.org/coremark/index.php
这个网站不仅可以下载源码,还能查看所有型号的跑分情况和跑分的环境
二创建printf工程
之前一讲已经详细介绍了创建这个printf工程
https://bbs.eeworld.com.cn/thread-1243147-1-1.html
三工程中添加coremark代码
创建CoreMark Group,添加所有的C文件
添加头文件路径
四修改堆栈大小
五配置CoreMark
(1)修改portable_init函数
修改前
修改后
添加各种初始化函数
(2)把SystemClock_Config, MX_USART1_UART_Init 和 MX_GPIO_Init 函数拷贝到core_portme.c, 并添将加 printf 重定向的代码。
这个比较简单,都是之前Printf工程里的代码复制过来就可以了
(3) core_portme.c文件里添加声明和变量定义
添加头文件
(4)修改计时相关代码
1.添加ITERATIONS定义
#define ITERATIONS 12000///at least 10s
2.添加FLAGS的定义,编译器优化等级
#ifndef COMPILER_FLAGS
#define COMPILER_FLAGS "-O3" /* "Please put compiler flags here (e.g. -o3)" */
3.时间计时处理修改
修改前
修改后
编译下载
失败了不知道哪里出了问题
去COREMARK官网看了STM32H5跑分的要求
DCACHE、ICACHE都开了,分数依旧只有这么多
发现俩个问题
1预取指没有开
#define PREFETCH_ENABLE 1U
开了之后发现跑分依旧没有变化
2优化器重新配置一下,使用LTO加—Omax参数
#ifndef COMPILER_FLAGS
#define COMPILER_FLAGS "-Omax" /* "Please put compiler flags here (e.g. -o3)" */
配置完成,下载测试
985分,可以基本接近官方的1000分了,移植完毕
引用: Jacktang 发表于 2023-5-29 08:44 CoreMark移植后跑分低,最后优化器重新配置一下,使用LTO加—Omax参数,问题解决 谢谢分享啊
目前看来应该是这样 解决了COREMARK跑分低的问题