CoreMark

CoreMark
http://www.eembc.org/
http://www.eembc.org/coremark/download.php
CoreMark是用来衡量嵌入式系统中中心处理单元(CPU,或叫做微控制器MCU)性能的标准。
该标准于2009年由EEMBC组织的Shay Gla-On提出,并且试图将其发展成为工业标准,从而代替陈旧的Dhrystone标准。
代码使用C语言写成,包含如下的运算法则:列举(寻找并排序),数学矩阵操作(普通矩阵运算)和状态机(用来确定输入流中是否包含有效数字),最后还包括CRC(循环冗余校验)。


Version 1.01
2K performance run parameters for coremark.
CoreMark Size    : 666
Total ticks      : 522683  (core_portme.c 需传入ticks, 7687 HAL_GPT_CLOCK_SOURCE_32K)
Total time (secs): 16.334  (Total_ticks/source_clocl_per_sec_32K)
Iterations/Sec   : 306.11  (CoreMark Score)
Iterations       : 5000    (算法迭代次数)
Compiler version : GCC5.3.1 20160307 (release) [ARM/embedded-5-branch revision 234589]
Compiler flags   : -Os
Memory location  : STATIC
seedcrc          : 0xe9f5
[0]crclist       : 0xe714
[0]crcmatrix     : 0x1fd7
[0]crcstate      : 0x8e3a
[0]crcfinal      : 0xbd59
Correct operation validated. See readme.txt for run and reporting rules.
cjson_test completed


http://www.eembc.org/coremark/index.php 中的processor result data如下
Processor    Operating Speed in MhzCoreMark/MHz (1)CoreMark
Core i7 860         2800             5.94       16622.34
STM32L476                 80             3.32         265.61 
(7687主频 200MHz)


Porting layer:
core_portme.h/c   barebones/cygwin/linux/linux64/simple
—— Compiler_flags
     Iterations number
     MEM_LOCATION ("xip" memory_static)
     HAS_PRINTF 1 HAS_STDIO 1 (#define ee_printf printf)
     HAS_FLOAT 1
     USE_CLOCK 0 HAS_TIME_H 0
     MULTITHREAD 1
     MAIN_HAS_NOARGC 1  MAIN_HAS_NORETURN 1 (Core_main function)
     seed5_volatile 5 (results[0].execs ALL_ALGORITHMS_MASK)
     PERFORMANCE_RUN 1 (seed123 0x0 0 66)(PROFILE_RUN VALIDATION_RUN other seed123)
     #define SEED_METHOD SEED_VOLATILE (seed4 in hard_code, not SEED_FUNC SEED_ARG)
     #define MEM_METHOD MEM_STATIC (global var, 不是MEM_MALLOC MEM_STACK)


     SOURCE_TICKS
     #define CLOCKS_PER_SEC 1000000


Run Rules
What is and is not allowed.
Required
1 The benchmark needs to run for at least 10 seconds.
2 All validation must succeed for seeds 0,0,0x66 and 0x3415,0x3415,0x66, buffer size of 2000 bytes total.
If not using command line arguments to main:
make XCFLAGS="-DPERFORMANCE_RUN=1" REBUILD=1 run1.log
make XCFLAGS="-DVALIDATION_RUN=1" REBUILD=1 run2.log
3 If using profile guided optimization, profile must be generated using seeds of 8,8,8, and buffer size of 1200 bytes total.
make XCFLAGS="-DTOTAL_DATA_SIZE=1200 -DPROFILE_RUN=1" REBUILD=1 run3.log
4 All source files must be compiled with the same flags.
5 All data type sizes must match size in bits such that:
ee_u8 is an 8 bits datatype.
ee_s16 is an 16 bits datatype.
ee_u16 is an 16 bits datatype.
ee_s32 is an 32 bits datatype.
ee_u32 is an 32 bits datatype.
Allowed
Changing number of iterations
Changing toolchain and build/load/run options
Changing method of acquiring a data memory block
Changing the method of acquiring seed values
Changing implementation in core_portme.c
Changing configuration values in core_portme.h
Changing core_portme.mak
Not allowed
Changing of source file other then core_portme* (use make check to validate)






    ARM-GCC 5.3:
https://launchpad.net/gcc-arm-embedded/+download  release.txt

<think> 我们正在讨论Coremark基准测试,用户要求了解Coremark的介绍、使用和测试等相关信息。根据引用内容,Coremark是由EEMBC(嵌入式微处理器基准评测协会)开发的一种基准测试程序,主要用于评估嵌入式系统中处理器的性能。它强调CPU核心和内存系统的性能,特别是在执行常见整数运算和控制操作方面的效率。 引用中提到了CoreMark-PRO,它是CoreMark的升级版,增加了对多核、浮点运算以及更大内存子系统的支持。然而,用户的问题集中在Coremark本身,因此我们将重点介绍Coremark。 从引用[2]中,我们知道Coremark的测试结果是两个指标:CoreMark(单位时间内运行的迭代次数)和CoreMark/MHz(每兆赫兹的CoreMark分数)。分数越高表示性能越好。 引用[3]提供了使用Coremark测试芯片性能的基本方法:从EEMBC官网或GitHub下载源代码,然后根据目标系统进行编译和运行。 因此,我们可以将回答分为三个部分: 1. Coremark介绍:包括其目的、特点、与Dhrystone的区别(因为用户之前问了Dhrystone)以及核心指标。 2. 使用Coremark:如何获取、编译和运行。 3. 测试结果解读:如何计算分数以及如何理解结果。 同时,我们还需要生成相关问题。 注意:在回答中,如果有数学表达式,按照要求使用$...$或$$...$$格式。由于Coremark的计算公式比较简单,我们可以用行内数学表达式表示CoreMark/MHz的计算:$ \text{CoreMark/MHz} = \frac{\text{CoreMark Score}}{\text{Clock Frequency (MHz)}} $ 此外,在回答中引用参考内容时,在末尾添加引用标识,如[^1]。 </think> ### CoreMark基准测试介绍 CoreMark是由EEMBC(嵌入式微处理器基准评测协会)开发的标准化处理器性能评测工具,专注于评估CPU核心在执行常见整数运算和控制操作时的效率[^1]。与早期的Dhrystone相比,CoreMark具有以下特点: - **针对性设计**:避免编译器过度优化导致的分数虚高,确保结果可靠性 - **多维度测试**:包含链表处理、矩阵运算、状态机控制和CRC校验四种算法负载 - **标准化指标**:结果以CoreMark(绝对性能值)和CoreMark/MHz(能效比)表示 $$ \text{CoreMark/MHz} = \frac{\text{CoreMark Score}}{\text{CPU频率 (MHz)}} $$ --- ### CoreMark测试流程 #### 1. **获取源码** 从EEMBC官网或GitHub仓库下载官方代码库[^3]: ```bash git clone https://github.com/eembc/coremark ``` #### 2. **环境配置** 修改配置头文件`core_portme.h`: ```c // 设置时钟频率和计时器 #define CLOCKS_PER_SEC 1000000 // 示例:1MHz时钟 #define EE_TICKS_PER_SEC CLOCKS_PER_SEC ``` #### 3. **编译运行** 根据目标平台选择编译工具链: ```bash # ARM Cortex-M示例 arm-none-eabi-gcc -O2 -DPERFORMANCE_RUN=1 -o coremark.elf core_list_join.c core_main.c core_matrix.c core_state.c core_util.c core_portme.c ``` #### 4. **执行测试** 在目标设备运行程序,输出结果示例: ``` 2K performance run parameters for coremark. CoreMark 1.0 : 650 / GCC 9.3.0 -O2 -DPERFORMANCE_RUN=1 Iterations/Sec : 1200 CoreMark : 1200.00 ``` --- ### 结果解读指南 | **指标** | **含义** | **评估维度** | |------------------|----------------------------------|-------------------| | `CoreMark` | 单位时间完成迭代次数 | 绝对性能 | | `CoreMark/MHz` | 每MHz时钟性能密度 | 能效比 | | `Iterations/Sec` | 每秒算法迭代次数 | 吞吐量 | **性能对比**: - ARM Cortex-M4:约3.4 CoreMark/MHz - RISC-V RV32IMAC:约2.8 CoreMark/MHz - Intel i7-1165G7:约50,000 CoreMark(整体性能参考)[^2] --- ### 与CoreMark-PRO的区别 CoreMark-PRO是进阶版本,增加以下测试维度[^1]: 1. **多核扩展性**:多线程负载分配测试 2. **浮点运算**:增加浮点矩阵运算工作负载 3. **大数据集**:测试缓存与内存子系统效率 $$ \text{综合评分} = \sum(\text{整数权重} \times \text{整数得分}) + \sum(\text{浮点权重} \times \text{浮点得分}) $$ --- ### 典型应用场景 1. **嵌入式选型**:对比微控制器能效比(如STM32 vs ESP32) 2. **编译器优化**:验证不同优化等级(-O0/-O2/-O3)的性能增益 3. **芯片验证**:硅前性能预估与流片后实测对比 > 📌 注意事项:测试需关闭中断,确保单线程独占CPU;结果需标注编译器版本和优化参数[^3]。 --- ### 相关问题 1. 如何为RISC-V架构移植CoreMark测试环境? 2. CoreMark结果受哪些硬件因素影响(缓存大小/内存延迟)? 3. 在实时操作系统中运行CoreMark需要注意什么? 4. CoreMark与Dhrystone的测试结果如何换算?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值