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随着版本的升级也在不断改善生成代码在效率上的质量表现。

相关推荐
青山是哪个青山9 小时前
LangChain 学习笔记(四):Message 与提示词模板
笔记·学习·langchain
Shell运维手记12 小时前
Linux 常用基础命令学习笔记
linux·运维·笔记·学习·算法·github
FakeOccupational13 小时前
【电路笔记 STM32】Cortex-M7 内核上的数据缓存(D-Cache)结构+MPU+DMA&Cache+STM32CubeMX配置
笔记·stm32·缓存
动词ing13 小时前
【学习笔记】C语言(数组指针与指针数组+字符数组+函数+参数传递+字符串作为形参+递归函数+指针函数+回调函数+结构体嵌套+内存动态分配函数)
c语言·笔记·学习
z落落15 小时前
C# Modbus-ASCII 超详细完整笔记(协议原理+LRC算法+读写源码全拆解)
笔记
hanlin0317 小时前
刷题笔记:力扣第189题-轮转数组
笔记·算法·leetcode
xqqxqxxq18 小时前
Redis 五大常用数据类型 + 通用命令笔记
数据库·redis·笔记
zjnlswd18 小时前
c# 刘铁猛 学习笔记
笔记·学习
LuminousCPP18 小时前
单链表专题(三)-刷题复盘篇:从快慢指针到环形链表 II 数学推导
数据结构·经验分享·笔记·学习·算法·链表
3A Cloud19 小时前
从「心即理」到提示词工程:深度解析 ClawHub 上的阳明心学技能(yangming-xinxue)
人工智能·笔记