CoreMark 测试指南

news2024/11/19 14:41:41

1、coremark 简介

coremark 是由EEMBC提出的一个评价CPU性能指标的跑分软件。其主要目标是测试处理器核心性能。CoreMark程序使用C语言写成,包含如下四类运算法则:数学矩阵操作(普通矩阵运算)、列举(寻找并排序)、状态机(用来确定输入流中是否包含有效数字)、CRC(循环冗余校验),都是在真实的嵌入式应用中很常见的操作,这也是CoreMark比其他测试标准更有实际价值的原因所在。

目前只发布了1个版本: https://github.com/eembc/coremark/tree/v1.01


CoreMark标准的测试方法很简单,就是在某配置参数组合下单位时间内跑了多少次CoreMark程序,其指标单位为CoreMark和CoreMark/MHz。
    
CoreMark和CoreMark/MHz 数字越高,意味着性能更高。    
CoreMark/MHz = CoreMark Score/Clock Frequency(CPU RUN)

可参考 https://www.analog.com/media/en/technical-documentation/application-notes/EE-389.pdf    

2、Cross compile 

这里以 NXP-LS1046A  ARM64平台为例 

Hardware Platform:NXP-LS1046A : 4 * A72 cores  1.8GHz

CoreMark详细说明可以参考:coremark

这里以硬件平台NXP-LS1046A为例进行编译配置 : 4*A72 coresCPU系统时钟为100MHz

目前CoreMark只发布了1个版本, 我们可以直接下载

wget https://github.com/eembc/coremark/archive/refs/tags/v1.01.zip

1新建一个编译目录

unzip v1.01.zip && cd coremark-1.01

cp linux64/ arm64 -ad

2修改arm64/core_portme.mak中的CC变量为正确的交叉编译工具

CC=/data/toolchain/gcc-linaro-7.2.1-2017.11-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc

3测试多核性能时,需配置XCFLAGS来打开需要的宏

测试NXP-LS1046A 4CPU性能, 编译方式:

make PORT_DIR=arm64 XCFLAGS="-DTOTAL_DATA_SIZE=12000 -DPROFILE_RUN=1 -DMULTITHREAD=4 -DUSE_PTHREAD -pthread"

mv coremark.exe coremark_4core

测试单核性能, 编译方式:

make PORT_DIR=arm64

mv coremark.exe coremark_1core

说明:

测试多核性能(根据核数确定,这里是4核,选用多线程方式)

XCFLAGS="-DMULTITHREAD=4 -DUSE_PTHREAD -pthread"

也可选多进程方式,可实际测试看性能表现选择线程还是进程:

XCFLAGS="-DMULTITHREAD=4 -DUSE_FORK"

多核可选优化参数, 根据程序产生profile参数优化性能,可实际测试看性能表现,选择是否使用该参数:

XCFLAGS="-DTOTAL_DATA_SIZE=12000 -DPROFILE_RUN=1"

3、测试

这里以测试NXP-LS1046A 4CPU性能为例。

测试结果可以跟 EEMBC官方认证结果进行对比参考: coreMark Scores

为保证测试到最佳性能,测试前请确保系统上没有其它负载。

3.1 多核性能测试

#./coremark_4core 0x0 0x0 0x66 0 7 1 2000

root@localhost:~# ./coremark_4core 0x0 0x0 0x66 0 7 1 2000
2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 19128
Total time (secs): 19.128000
Iterations/Sec   : 41823.504810
Iterations       : 800000
Compiler version : GCC7.2.1 20171011
Compiler flags   : -O2 -O2 -O5 -DTOTAL_DATA_SIZE=12000 -DPROFILE_RUN=1 -DMULTITHREAD=4 -DUSE_PTHREAD=1 -pthread -DPERFORMANCE_RUN=1  -lrt
Parallel PThreads : 4
Memory location  : Please put data memory location here
			(e.g. code in flash, data on heap etc)
seedcrc       : 0xe9f5
[0]crclist       : 0xe714
[1]crclist       : 0xe714
[2]crclist       : 0xe714
[3]crclist       : 0xe714
[0]crcmatrix     : 0x1fd7
[1]crcmatrix     : 0x1fd7
[2]crcmatrix     : 0x1fd7
[3]crcmatrix     : 0x1fd7
[0]crcstate      : 0x8e3a
[1]crcstate      : 0x8e3a
[2]crcstate      : 0x8e3a
[3]crcstate      : 0x8e3a
[0]crcfinal      : 0x4983
[1]crcfinal      : 0x4983
[2]crcfinal      : 0x4983
[3]crcfinal      : 0x4983
Correct operation validated. See readme.txt for run and reporting rules.
CoreMark 1.0 : 41823.504810 / GCC7.2.1 20171011 -O2 -O2 -O5 -DTOTAL_DATA_SIZE=12000 -DPROFILE_RUN=1 -DMULTITHREAD=4 -DUSE_PTHREAD=1 -pthread -DPERFORMANCE_RUN=1  -lrt / Heap / 4:PThreads

测试结果:

3.2单核性能测试

# ./coremark_1core 0x0 0x0 0x66 0 7 1 2000

root@localhost:~# ./coremark_1core 0x0 0x0 0x66 0 7 1 2000
2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 19718
Total time (secs): 19.718000
Iterations/Sec   : 10143.016533
Iterations       : 200000
Compiler version : GCC7.2.1 20171011
Compiler flags   : -O2 -DPERFORMANCE_RUN=1  -lrt
Memory location  : Please put data memory location here
			(e.g. code in flash, data on heap etc)
seedcrc          : 0xe9f5
[0]crclist       : 0xe714
[0]crcmatrix     : 0x1fd7
[0]crcstate      : 0x8e3a
[0]crcfinal      : 0x4983
Correct operation validated. See readme.txt for run and reporting rules.
CoreMark 1.0 : 10143.016533 / GCC7.2.1 20171011 -O2 -DPERFORMANCE_RUN=1  -lrt / Heap

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/454934.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[2019.01.25]Android NDK Crash错误定位

Android NDK开发Crash错误定位: D:\Users\Android\Sdk ndk-stack.exe: D:\Users\Android\Sdk\ndk-bundle\prebuilt\windows-x86_64\bin aarch64-linux-android-addr2line.exe: D:\Users\Android\Sdk\ndk-bundle\toolchains\ aarch64-linux-android-4.9\prebuilt\windows-x86_64…

六、Golang的并发

Go语言的并发指的是能让某个函数独立于其他函数运行的能力。当一个函数创建为goroutine时,Go会将其视为一个独立的工作单元。这个单元会被调度到可用的逻辑处理器上执行。 Go语言运行时的调度器是一个复杂的软件,能管理被创建的所有goroutine并为其分配执…

对考研考公的过分执念,正在悄悄束缚你的职场选择!

随着近年来就业形势的严峻,越来越多的同学在找工作时碰壁,尤其是对于大部分应届生,这种现象尤为明显。 每年数百万的大学生进入到社会,却发现能选择的机会并不多。高等教育规模不断扩大的背景下,职场晋升的门槛越来越…

Hudi最流行数据湖框架介绍

目录 1. 第一章Hudi 框架概述1.1 数据湖Data Lake1.1.1 仓库和湖泊1.1.2 什么是数据湖1.1.3 数据湖的优点1.1.4 Data Lake vs Data warehouse1.1.5 数据湖框架1.1.5.1 Delta Lake1.1.5.2 Apache Iceberg1.1.5.3 Apache Hudi 1.1.6 湖仓一体(Data Lakehouse&#xff…

【1】从零开始学习目标检测:YOLO算法详解

从零开始学习目标检测:YOLO算法详解 文章目录 从零开始学习目标检测:YOLO算法详解1. 🌟什么是目标检测?2.🌟传统的目标检测与基于深度学习的目标检测3.🌟目标检测算法的工作流程4.🌟目标检测可以干什么&am…

拿到新的服务器必做的五件事(详细流程,开发必看)

目录 1. 配置免密登录 基本用法 远程登录服务器: 第一次登录时会提示: 配置文件 创建文件 然后在文件中输入: 密钥登录 创建密钥: 2.部署nginx 一、前提条件 二、安装 Nginx 3.配置python虚拟环境 1.安装虚拟环境 …

自习室管理系统的设计与实现(论文+源码)_kaic

摘要 近年来,随着高校规模的逐步扩大,学生对高校自习室座位的需求也在不断增加。然而,一些高校仍然采用人工管理学院自习室座位,这大大降低了管理效率。显然,开发一个成本低、占用资源少、能提高高校自习室座位管理效率…

WindowsHash简介及windows认证

Windows系统使用两种方法对用户的密码进行哈希处理,他们分别是LAN Manager(LM)哈希和NT LAN Manager(NTML)哈希。 现在已经有了更新的NTLMv2以及Kerberos验证体系。 Windows的系统密码hash默认情况下一般由两个部分组成:第一部分是LM-hash,…

Nginx中间件漏洞复现

Nginx 解析漏洞 该漏洞与nginx、php版本无关,属于用户配置不当造成的解析漏洞。 漏洞原理: 该解析漏洞是PHP fastcgi 的漏洞,在PHP的配置文件 php.ini 中有一个关键的选项 cgi.fix_pathinfo 默认值为1,表示开启。同时在 php-fp…

ASO优化之如何回复Google Play评论

应用的平均评分会影响 Google Play 商店优化 和应用的 Google Play 排名。应用的评分越高,我们在搜索结果中的排名就越靠前。因此,当应用处于 4 星评级范围内时,它会被更多 Google Play 商店的访问者看到和发现。我们可以使用应用雷达中的评级…

Linux进程通信:有名管道

有名管道: 无名管道只能用于有亲缘关系的进程间通信。 因此提出有名管道(也叫FIFO文件),以实现无亲缘关系进程间的通信。 不同于无名管道,有名管道FIFO文件的形式存在于文件系统,与一个路径名关联&#xff…

【复杂网络建模】——Python可视化重要节点识别(PageRank算法)

目录 一、复杂网络建模 二、建模的算法 三、使用PageRank算法进行网络重要节点识别 1、PageRank算法 2、基于PageRank算法的ER网络重要节点识别 3、基于PageRank算法的小世界网络重要节点识别 4、基于PageRank算法的无标度网络的重要节点识别 四、ER网络、小世界网络、…

春秋云境:CVE-2022-24663(远程代码执行漏洞exp)

目录 一、题目 二、构造exp执行php 三、蚁剑连接 一、题目 介绍: 远程代码执行漏洞,任何订阅者都可以利用该漏洞发送带有“短代码”参数设置为 PHP Everywhere 的请求,并在站点上执行任意 PHP 代码。P.S. 存在常见用户名低权限用户弱口令 …

华为OD机试真题(Java),开元音统计(100%通过+复盘思路)

一、题目描述 相对开音节构成的结构为辅音元音(aeiou)辅音(r除外)e,常见的单词有bike cake,给定一个字符串,以空格为分隔符。 反转每个单词的字母,若单词中包含如数字等其他非字母时不进行反转,反转后计算其中含有相对…

苹果手机屏幕上的圆点怎么设置?(开启悬浮按钮)

案例:苹果手机屏幕上的圆点怎么设置? 【求助!苹果手机的小圆点怎么调出来?就是悬浮按钮那个。】 如果您是苹果手机的用户,您可能会在手机屏幕上看到一个小圆点,它可以让您方便地进行操作。这个圆点是 Assi…

TortoiseSVN使用-合并深度介绍

文章目录 3.6 合并深度介绍 本人其他相关文章链接 3.6 合并深度介绍 Working copy(工作副本):即你当前的工作目录,一般默认为这个选项;Recursively(递归):即你选择的目录的版本库,包括了其下面的子文件,子文…

叶黄素的17种功效与副作用(5点使用禁忌请小心)

叶黄素(Lutein)及其同分异构体玉米黄质(zeaxanthin)和内消旋玉米黄质(meso-zeaxanthin)是一种聚集在人类视网膜中的黄斑色素。 它们不能在哺乳动物体内合成,必须从饮食中获得,然后分…

智能家居工厂模式整体设计框架控制设备测试

通俗理解的步骤就是链表通用模板定义(在头文件里定义)、链表的创建(头插尾插,在.C 文件里)、链表的初始化(init配置管脚初始电平等)、链表内容的读取(指令工厂TCP服务端读取客户端发…

【芝士总结】史上最详循环结构讲解(蒟蒻也能学会)

虽然计算机可以在短时间批量处理成千上万条指令,但是不少问题中有许多规律性的重复操作,比如说计算几百个学生的平均分,或者对上万人的名单进行排序。仅使用顺序或者分支结构,对每一步操作都写出对应的语句是不可能的;…

如何用链表实现LRU缓存淘汰算法

链表学习 一、 缓存1.1缓存介绍1.2 缓存策略 二、链表结构2.1 单链表2.2 循环链表2.3 双向链表2.4 双向循环链表2.5 链表与数组性能对比 三、如何基于链表实现LRU缓存淘汰算法 一、 缓存 1.1缓存介绍 缓存是一种提高数据读取性能的技术,在硬件设计、软件开发中都有…