1903_CoreMark白皮书阅读笔记

1903_CoreMark白皮书阅读笔记

全部学习汇总: g_embedded: 嵌入式通用技术学习笔记 (gitee.com)

再看ARM的内核架构介绍的时候看到了不同的内核都测试了一个CoreMark/Mhz的参数。从名称看,可以理解为是MCU的算力跑分。至于这部分究竟是测试了哪些功能,接下来跟着白皮书卡一下。

白皮书的文件是可以从Embedded Microprocessor Benchmark Consortium网站上获取的。

CoreMark结果是一个数字,可以用来衡量CPU的运算能力。DMIPS以及BogoMIPS是从其他的角度做了一些类似的测试。

CoreMark是为了能够做到简单且标准化的测试而制定的,可以免费下载(这么看应该是源代码)。设计采用了常见的数据结构和算法,而且用到的运算都是在运行的过程中计算出来的从而避免编译器优化带来的影响。运行的方法以及报告方式也做了标准化的要求。

CoreMark的内容主要是链表处理、矩阵运算、以及状态机跳转。其中,链表会进行翻转、搜索、排序等操作对指针的处理、分散内存的访问等进行测试。如果链表的大小超过了Cache的大小,还可以同时测试内存以及缓存的层级结构的效率。为了检查结果的准确性,还对内容进行了CRC的校验,而CRC校验一者是可以判断对错;二者可以顺便考察一下运算能力。而状态机的跳转主要是用来测试条件分支的执行效率。

链表节点的数据结构中包括数据对象以及index。其中,index的存在是为了记录在排序中的位置。这种设计方式可以在内存比较小的平台上使用,同时避免了使用标准库进行存储的申请分配等操作。这种设计让我联想到了FreeRTOS的链表设计。

无论是什么平台,对比时候链表的节点数目都是相同的。因此,对比的时候主要看数据量而不看实际的内存消耗。

矩阵运算的主要目的是测试循环、MAC等设计。这个过程中同样采用了CRC来进行内容准确性的校验。

状态机一般可以使用switch或者if条件分支来实现,主要的测试点就是MCU的条件分支判断而非循环。

默认情况下,CoreMark需要2KB的存储来存储用到的数据。这么小的内存的需求量在一些低端的嵌入式MCU上都是可以满足的。不过,结合前面的信息我倒好奇,如果都是这么大的话再很多高端的MCU上岂不是会大量使用Cache从而导致得分虚高?

这个是一个基本的测试结果的展示,涉及到了不同的主频下的表现、不同的编译器版本的表现以及相同的MCU和编译器但是不同编译选项的表现。上面所有内容一直但是结果不同的两个就是编译选项不同,这个在文档的后续内容中给出了说明。

另外,从上面的信息看。商用的编译器看起来在效率上通常会比gcc要好一些,而gcc随着版本的升级也在不断改善生成代码在效率上的质量表现。

相关推荐
一只小菜鸡..8 分钟前
南京大学 操作系统 (JYY) 学习笔记:导论与历史的轮回 (OS Introduction)
笔记·学习
xqqxqxxq26 分钟前
LeetCode Hot100 双指针专项题解笔记
笔记·算法·leetcode
懿路向前34 分钟前
【HarmonyOS学习笔记】2026-07-24 | textProcessing 实体识别与踩坑实录
笔记·学习·边缘计算·harmonyos
春生野草1 小时前
C基础--八大排序(个人笔记)
c语言·笔记·排序算法
caimouse2 小时前
MM 学习笔记 09:进程会话与工作集
笔记·学习·reactos
星恒随风2 小时前
C++ 继承进阶:默认成员函数、多继承、虚继承与组合设计
开发语言·c++·笔记·学习
foo1st2 小时前
MySQL 8.0(Windows)升级笔记
数据库·笔记·mysql
caimouse3 小时前
MM 学习笔记 10:页面文件与系统加载器
笔记·学习·reactos
一只小菜鸡..3 小时前
南京大学 操作系统 (JYY) 学习笔记:Hello, OS World! (程序的机器视角)
java·笔记·学习
克里斯蒂亚诺更新13 小时前
ruoyi角色权限的对应关系
笔记