项目简介
本项目是一个基于C语言的CoreMark处理器性能基准测试工具,可全面评估处理器性能,具有简单易理解、高可移植性等特性,能通过多种算法测试和参数定制满足不同的测试需求。
项目的主要特性和功能
- 简单易理解:基准测试计时部分源代码行数少,变量和函数命名有意义,代码注释详细。
- 高可移植性:通过独立文件提供I/O和计时抽象层,所有I/O和计时操作都通过该层完成。
- 输出可控:利用系统函数、I/O、命令行参数或volatile变量生成运行时数据,确保计算在运行时进行,输出结果可验证。
- 多算法测试:包含链表操作、矩阵乘法、状态机处理等关键算法测试,全面评估处理器性能。
- 支持并行执行:可设置线程数实现并行执行,支持多种并行实现方式。
- 参数可定制:可通过make标志设置迭代次数、编译器标志等参数。
安装使用步骤
已有源码文件后的操作
编译运行
- 常规编译运行:在项目目录下,输入
make
命令编译并运行基准测试,完整结果保存在run1.log
和run2.log
文件中,CoreMark结果可在run1.log
中找到。 - 交叉编译:对于交叉编译平台,需根据具体平台调整
core_portme.mak
、core_portme.h
(可能还需调整core_portme.c
)。移植到新平台时,可复制默认端口文件夹(如mkdir <platform> && cp linux/* <platform>
),调整移植文件后运行make PORT_DIR=<platform>
。
make目标及标志
- make目标
run
:默认目标,生成run1.log
和run2.log
。run1.log
:以性能参数运行基准测试,并输出到run1.log
。run2.log
:以验证参数运行基准测试,并输出到run2.log
。run3.log
:以配置文件生成参数运行基准测试,并输出到run3.log
。compile
:编译基准测试可执行文件。link
:链接基准测试可执行文件。check
:测试可能未修改的源文件的MD5。clean
:清理临时文件。
- make标志
ITERATIONS
:默认运行时间在10 - 100秒之间,使用ITERATIONS=N
可覆盖设置,如make ITERATIONS=10
运行10次迭代。基准测试至少运行10秒结果才有效。XCFLAGS
:用于从命令行添加编译器标志,如make XCFLAGS="-DMULTITHREAD=4 -DUSE_FORK"
。CORE_DEBUG
:若CRC计算错误,可定义该标志进行调试编译,如make XCFLAGS="-DCORE_DEBUG=1"
。REBUILD
:强制重新构建可执行文件。
无make系统的情况
需编译以下文件:
core_list_join.c
core_main.c
core_matrix.c
core_state.c
core_util.c
PORT_DIR/core_portme.c
示例编译命令:
gcc -O2 -o coremark.exe core_list_join.c core_main.c core_matrix.c core_state.c core_util.c simple/core_portme.c -DPERFORMANCE_RUN=1 -DITERATIONS=1000
./coremark.exe > run1.log
此命令将编译用于性能运行且迭代次数为1000次的基准测试,输出重定向到run1.log
。
并行执行
使用XCFLAGS=-DMULTITHREAD=N
设置并行线程数,N为线程数。有多种并行执行实现方式,也可在core_portme.c
中自定义实现。例如,make XCFLAGS="-DMULTITHREAD=4 -DUSE_PTHREAD -pthread"
将编译用于在4个核心上使用POSIX线程API执行的基准测试;make XCFLAGS="-DMULTITHREAD=4 -DUSE_FORK"
支持分叉方式。若链接时出现undefined reference
错误,需修改平台的core_portme.mak
文件,在LFLAGS_END
参数中添加-pthread
。
运行参数
CoreMark可执行文件接受以下参数(前提是main()
接受参数):
1. 用于数据初始化的种子值。
2. 用于数据初始化的种子值。
3. 用于数据初始化的种子值。
4. 迭代次数(0表示自动,为默认值)。
5. 内部使用保留。
6. 内部使用保留。
7. 仅适用于malloc用户,覆盖输入数据缓冲区的大小。
若不使用malloc
或不支持命令行参数,需通过编译器定义TOTAL_DATA_SIZE
来设置算法的缓冲区大小,标准运行时TOTAL_DATA_SIZE
必须设置为2000字节。示例:make XCFLAGS="-DTOTAL_DATA_SIZE=6000 -DMAIN_HAS_NOARGC=1"
。
提交结果
可在网页上提交CoreMark结果。打开网页浏览器,访问提交页面,注册账户后即可输入分数。
运行规则
- 必需条件
- 基准测试至少运行10秒。
- 对于种子
0,0,0x66
和0x3415,0x3415,0x66
,总缓冲区大小为2000字节的所有验证必须成功。若不使用命令行参数传递给main
,可使用以下命令:make XCFLAGS="-DPERFORMANCE_RUN=1" REBUILD=1 run1.log make XCFLAGS="-DVALIDATION_RUN=1" REBUILD=1 run2.log
- 若使用配置文件引导优化,配置文件必须使用种子
8,8,8
生成,总缓冲区大小为1200字节,命令如下:make XCFLAGS="-DTOTAL_DATA_SIZE=1200 -DPROFILE_RUN=1" REBUILD=1 run3.log
- 所有源文件必须使用相同的标志进行编译。
- 所有数据类型大小必须符合位大小要求,如
ee_u8
为无符号8位数据类型等。
- 允许操作
- 更改迭代次数。
- 更改工具链和构建/加载/运行选项。
- 更改获取数据内存块的方法。
- 更改获取种子值的方法。
- 更改
core_portme.c
中的实现。 - 更改
core_portme.h
中的配置值。 - 更改
core_portme.mak
。
- 禁止操作
更改除
core_portme*
之外的源文件(可使用make check
进行验证)。
报告规则
在数据表上报告结果时,使用以下语法:
CoreMark 1.0 : N / C [/ P] [/ M]
- N:每秒迭代次数(种子为0,0,0x66
,大小为2000)。
- C:编译器版本和标志。
- P:数据和代码分配细节等参数,若所有数据都在RAM堆中分配,该参数可省略;报告CoreMark/MHz时,该参数不可省略。
- M:并行执行类型(若使用)和上下文数量,若未使用并行执行,该参数可省略。
例如:
CoreMark 1.0 : 128 / GCC 4.1.2 -O2 -fprofile-use / Heap in TCRAM / FORK:2
或
CoreMark 1.0 : 1400 / GCC 3.4 -O4
若报告缩放结果,结果必须按以下格式报告:
CoreMark/MHz 1.0 : N / C / P [/ M]
P在报告缩放结果时,内存参数还必须指明内存频率与核心频率的比率。若核心有缓存且缓存频率与核心频率的比率可配置,也必须包含该信息。例如:
CoreMark/MHz 1.0 : 1.47 / GCC 4.1.2 -O2 / DDR3(Heap) 30:1 Memory 1:1 Cache
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】