littlebot
Published on 2025-04-18 / 0 Visits
0

【源码】基于C语言的CoreMark处理器性能基准测试工具

项目简介

本项目是一个基于C语言的CoreMark处理器性能基准测试工具,可全面评估处理器性能,具有简单易理解、高可移植性等特性,能通过多种算法测试和参数定制满足不同的测试需求。

项目的主要特性和功能

  1. 简单易理解:基准测试计时部分源代码行数少,变量和函数命名有意义,代码注释详细。
  2. 高可移植性:通过独立文件提供I/O和计时抽象层,所有I/O和计时操作都通过该层完成。
  3. 输出可控:利用系统函数、I/O、命令行参数或volatile变量生成运行时数据,确保计算在运行时进行,输出结果可验证。
  4. 多算法测试:包含链表操作、矩阵乘法、状态机处理等关键算法测试,全面评估处理器性能。
  5. 支持并行执行:可设置线程数实现并行执行,支持多种并行实现方式。
  6. 参数可定制:可通过make标志设置迭代次数、编译器标志等参数。

安装使用步骤

已有源码文件后的操作

编译运行

  • 常规编译运行:在项目目录下,输入make命令编译并运行基准测试,完整结果保存在run1.logrun2.log文件中,CoreMark结果可在run1.log中找到。
  • 交叉编译:对于交叉编译平台,需根据具体平台调整core_portme.makcore_portme.h(可能还需调整core_portme.c)。移植到新平台时,可复制默认端口文件夹(如mkdir <platform> && cp linux/* <platform>),调整移植文件后运行make PORT_DIR=<platform>

make目标及标志

  • make目标
    • run:默认目标,生成run1.logrun2.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结果。打开网页浏览器,访问提交页面,注册账户后即可输入分数。

运行规则

  • 必需条件
    1. 基准测试至少运行10秒。
    2. 对于种子0,0,0x660x3415,0x3415,0x66,总缓冲区大小为2000字节的所有验证必须成功。若不使用命令行参数传递给main,可使用以下命令: make XCFLAGS="-DPERFORMANCE_RUN=1" REBUILD=1 run1.log make XCFLAGS="-DVALIDATION_RUN=1" REBUILD=1 run2.log
    3. 若使用配置文件引导优化,配置文件必须使用种子8,8,8生成,总缓冲区大小为1200字节,命令如下: make XCFLAGS="-DTOTAL_DATA_SIZE=1200 -DPROFILE_RUN=1" REBUILD=1 run3.log
    4. 所有源文件必须使用相同的标志进行编译。
    5. 所有数据类型大小必须符合位大小要求,如ee_u8为无符号8位数据类型等。
  • 允许操作
    1. 更改迭代次数。
    2. 更改工具链和构建/加载/运行选项。
    3. 更改获取数据内存块的方法。
    4. 更改获取种子值的方法。
    5. 更改core_portme.c中的实现。
    6. 更改core_portme.h中的配置值。
    7. 更改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:2CoreMark 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】