项目简介
本项目是一个基于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】