CoreMark
来源:互联网 发布:厦门大学网络教学平台 编辑:程序博客网 时间:2024/05/23 19:41
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
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