当前位置: 首页 > news >正文

SPEC CPU2017的runcpu命令使用

1. 基本语法

runcpu [options] [benchmark_list]

  • options: 可选参数,用于控制测试的运行方式、输出格式、配置文件等。
  • benchmark_list: 可以是单个基准测试名称或一组基准测试,如 500.perlbench_rall(表示运行所有基准测试)。例如,
    单独运行 500.perlbench_r
    runcpu 500.perlbench_r
    可以使用通配符或组名来一次运行多个基准测试。例如,运行所有C++基准:
    runcpu CXX
    可以运行所有基准:
    runcpu all

2. 常用选项

  • --config=<filename>:指定配置文件,例如 --config=myconfig.cfg。配置文件定义了编译器设置、优化级别、系统设置等参数,通常位于 config/ 目录下。
  • --tune=<base|peak|all>:选择基准测试的优化模式。优化模式可以是:1、base: 标准优化模式,严格遵守优化规则。2、peak: 更加激进的优化设置。3、all: 同时执行 basepeak 优化。
  • --size=<test|train|ref>:选择基准测试数据集的大小,test使用小型测试数据集(用于快速运行和验证),train使用中等规模的数据集(通常用于调试),ref使用完整的参考数据集(用于正式性能测量)。
  • --reportable:生成符合报告要求的测试结果。此选项用于生成正式的基准测试报告(不能与调试、测试等模式混用)。
  • --action=run:运行指定的基准测试。其他可能的操作包括:1、build:仅编译基准测试,而不执行。2、validate:仅验证基准测试结果是否符合规范。3、clean:清理测试生成的文件。4、setup:为指定的基准测试准备运行环境,但不执行测试。
  • --iterations=<n>:指定基准测试的重复运行次数(默认是 3 次)。增大迭代次数可以提高测试结果的精度。
  • --threads=<n>:为并行基准测试指定线程数(用于 SPECrate 测试)。如果未指定,测试将默认使用系统的核心数。
  • --copies=<n>:为并行基准测试指定并发执行的副本数(多副本模式下每个副本运行一个基准测试)。常用于多核系统的吞吐量测试。
  • --output=filename:指定输出文件名称。默认情况下,输出会保存在result(结果)目录中。
  • --rawformat=format:指定输出的格式。常用的格式包括:1、text:生成文本报告。2、html:生成 HTML 格式的报告。3、pdf:生成 PDF 格式的报告。
  • --loose:允许某些调优选项不符合标准规范。例如,可能允许在 base 调优模式下使用一些 peak 模式的选项。
  • --rebuild:强制重新编译所有基准测试。即使已有编译结果,也会重新编译。
  • --deletework:运行测试后删除临时工作目录。这有助于节省磁盘空间。
  • --setprocgroup:为每个副本/线程分配到单独的 CPU 处理组。这有助于多核处理器环境中优化资源使用。
  • --validonly:仅执行结果验证,而不重新运行基准测试。通常用于对现有结果进行合规性检查。
  • --noaltconfig:禁止使用配置文件中的 altconfig选项。
  • --verbose:启用详细输出,显示更多运行时信息。
  • --logfile=<filename>:将输出日志保存到指定文件中。
  • --feedback:在编译和运行之间使用反馈机制(如果配置文件支持)。
  • --debug:启用调试模式,输出额外的调试信息。这对排查错误或了解运行细节非常有用。

3. 结果查看与处理

特别注意,--reportable--output 是两个不同的参数,它们的作用和用途是不同的:

3.1 --reportable 参数

--reportable 参数用于生成符合 SPEC 基准测试提交标准 的结果报告。它的主要功能是确保测试结果符合SPEC的规范,可以正式提交给SPEC进行认证和审核。

  • 当使用 --reportable 运行基准测试时,系统会强制遵循一些规定,如使用参考数据集(ref)、标准的配置文件、没有超出允许范围的优化选项等。
  • --reportable 的目的是生成正式的、可报告的结果,这些结果可以被用来进行系统性能的对比和发布。
  • 不指定输出文件--reportable 本身不会指定输出文件的位置,它生成的报告会存放在默认的结果目录(通常是 result/ 目录)中。
3.2 --output 参数

--output 参数用于指定测试结果文件的 输出文件名 和路径。

  • 这个参数允许用户自定义保存测试结果的文件名和位置。例如,如果用户想将结果保存到特定的文件或特定的目录,可以使用 --output
  • --output 的结果可以是报告的多种格式(文本、HTML、PDF、CSV 等),具体格式取决于是否与其他参数一起使用,如 --rawformat
  • --output 参数不强制遵循 SPEC 的提交规则,它仅用于控制结果文件的保存和命名,而不改变测试的严格性或规范性。
3.3 区别与用途
  • --reportable 控制的是测试的 合规性 和生成报告的 严格性,用于确保结果可以提交给SPEC。
  • --output 控制的是测试结果的 文件存储位置和名称,用于灵活地管理输出文件。
    这两个参数可以 同时使用,当用户需要生成符合提交标准的报告并且想要自定义输出文件的路径时,可以如下组合,生成一份符合 SPEC 提交要求 的报告,并将其保存为 my_report.txt 文件。
    runcpu --reportable --config=myconfig.cfg --tune=base --size=ref --output=my_report.txt all
3.4 基准测试结果查看、导出和分析
3.4.1 导出结果

导出结果时,用户可以选择多种格式,例如PDF、CSV等,以便进行进一步的分析或分享。
(1) 导出为PDF格式文件
要将结果导出为PDF文件,可以使用 runcpu 命令结合 --rawformat 选项:
runcpu --reportable --rawformat=pdf --output=myresults.pdf
此命令生成的PDF文件将包含最近一次运行的基准测试结果报告。

(2) 导出为CSV格式文件
对于需要进一步数据分析的情况,可以将结果导出为CSV格式,以便导入到数据分析工具中:
runcpu --reportable --rawformat=csv --output=myresults.csv
CSV文件中的数据可以用Excel、Python或其他工具进行详细分析。

3.4.2 查看结果

SPEC CPU2017运行完基准测试后,自动生成的结果会存储在指定的目录中。查看这些结果有多种方式:
(1) 结果目录
测试结果通常存储在安装目录的 result/ 子目录中。每次测试运行都会生成一个新的结果文件夹,文件夹名称通常以时间戳和测试配置命名。例如:
/path/to/cpu2017/result/cpu2017.004.refspeed2024-09-05-12-30-45/

(2) 查看HTML或文本报告

  • HTML文件:可以在浏览器中查看,包含完整的测试结果和图表。打开路径中的 .html 文件即可:
    firefox /path/to/cpu2017/result/cpu2017.004.refspeed2024-09-05-12-30-45.html
  • 文本文件:用 cat 或其他文本编辑工具查看 .txt 文件中的结果:
    cat /path/to/cpu2017/result/cpu2017.004.refspeed2024-09-05-12-30-45.txt

(3) 使用 runcpu 查看结果
用户也可以通过命令行工具 runcpu 直接查看上一次运行的测试结果:
runcpu --reportable last
此命令会显示上一次基准测试运行的详细报告,包含性能分数和相关数据。

3.4.3 深入分析和自定义报告

用户可以根据需要定制输出格式,或生成更详细的报告:
(1) 自定义输出格式
SPEC CPU2017提供了自定义输出格式的选项。通过修改配置文件或使用命令行参数,用户可以定义特定的报告格式。详见SPEC CPU2017的官方文档或 runcpu --help

(2) 反馈机制
通过 --feedback 选项,用户可以在编译和运行之间使用反馈机制,以优化运行。例如:
runcpu --feedback all
该选项可以生成包含反馈优化的结果,用于更深入的性能调优分析。

3.4.4 比较不同测试的结果

比较多次运行的结果是分析性能趋势和验证系统一致性的重要步骤。用户可以手动比较结果目录中的数据,或者编写脚本自动化比较过程。
(1) 手动比较
查看每个测试的结果文件(如 .txt.html),对比不同运行的性能分数、时间和资源消耗。
(2) 自动比较
使用脚本或工具对比多个结果文件中的关键指标,如SPECspeed和SPECrate分数。这样可以方便地生成趋势图或汇总报告。

3.4.5 归档结果

为了长期保存和管理基准测试结果,建议将结果文件打包归档。可以使用以下命令将结果目录打包为压缩文件:
tar -czvf spec_results_backup.tar.gz /path/to/cpu2017/result/
这样会生成一个包含所有结果的压缩文件 spec_results_backup.tar.gz,便于日后参考或恢复。

4. 使用示例

以下是一些常见的使用示例:

示例 1:仅编译基准测试而不运行

runcpu --action=build all
此命令只编译所有基准测试,但不实际运行。

示例 2:运行所有基准测试并使用指定配置

runcpu --config=myconfig.cfg --tune=base --size=ref all
此命令运行使用myconfig.cfg 配置文件,运行所有基准测试,使用标准(base)优化模式和参考数据集(ref)。

示例 3:运行单个基准

runcpu --config=myconfig.cfg --tune=base 500.perlbench_r
此命令使用 myconfig.cfg 配置文件,在 base 模式下运行 500.perlbench_r 基准测试。

示例 4:运行单个基准测试并指定输出结果格式

runcpu --config=myconfig.cfg --tune=peak --size=ref --rawformat=csv --output=result.csv 500.perlbench_r
此命令运行 500.perlbench_r 基准测试,使用峰值(peak)优化,并导出结果为CSV格式。

示例 5:并行运行多个副本

runcpu --config=myconfig.cfg --tune=base --size=ref --copies=4 all
此命令使用 myconfig.cfg 配置文件,运行所有基准测试,使用 base 模式、参考数据集,并同时运行4个副本。

示例 6:多线程和多副本运行

runcpu --config=myconfig.cfg --tune=base --threads=8 --copies=4 all
此命令在 8 个线程和 4 个副本的情况下运行所有基准测试。

示例 7:生成报告

runcpu --reportable --config=myconfig.cfg --tune=base --size=ref all
此命令生成一个可报告的结果,符合 SPEC 提交要求。

示例 8:查看最近运行的结果

runcpu --reportable last
此命令查看最近一次测试运行的结果报告。

5. 总结

通过上述步骤,用户可以高效地查看、导出和分析SPEC CPU2017的基准测试结果,包括:

  • 深入分析:利用自定义输出格式和反馈机制,生成详细报告和优化结果。
  • 比较结果:手动或自动化比较多次运行的结果,分析性能趋势。
  • 归档结果:打包并保存结果文件,方便日后查阅和管理。
    从而深入了解系统性能并进行优化,具体来说,
  • runcpu 是SPEC CPU2017的核心工具,用于运行基准测试和生成报告。
  • 可以通过 --config--tune--size 等参数来控制测试的配置和数据集。
  • 可以通过调整 --threads--copies 等并发选项,可以优化并行基准测试的性能。
  • 可以通过 --reportable--output 等选项导出为不同的格式,具体地,--reportable 用于生成正式、可提交的报告,--output 用于指定测试结果文件的保存路径和文件名。用户可以同时使用这两个参数,确保报告符合提交标准的同时,灵活管理输出文件的命名和位置。
  • 可以使用 --rawformat 将结果设置导出为PDF、CSV等的具体格式,以便分析或分享。
  • 可以通过结果目录中的HTML或文本文件,或使用 runcpu --reportable 查看上次运行结果。

官方参考资料https://www.spec.org/cpu2017/Docs/runcpu.html

相关文章:

  • Einsum(Einstein summation convention)
  • 30天pandas挑战
  • 面试准备-6
  • 【Qt】qt发布Release版本,打包.exe可执行文件
  • 如何打造高校实验室教学管理系统?Java SpringBoot助力,MySQL存储优化,2025届必备设计指南
  • 手写登录页面,unique_ptr智能指针
  • 项目实战 ---- 商用落地视频搜索系统(7)---预处理二次优化
  • 海事行政执法证照片要求及尺寸格式修改方法
  • 虚幻中的c++(持续更新)
  • JVM 垃圾回收机制:GC
  • 计算机毕业设计 | SpringBoot+vue 游戏商城 steam网站管理系统(附源码)
  • 浅谈Unity协程的工作机制
  • 模版的价值工程
  • 内推|京东|后端开发|运维|算法...|北京 更多岗位扫内推码了解,直接投递,跟踪进度
  • CSS学习11--版心和布局流程以及几种分布的例子
  • 【C++二分查找 拆位法】2411. 按位或最大的最小子数组长度
  • Java | Leetcode Java题解之第390题消除游戏
  • Windows自动化应用程序已启动/未启动,有进程无进程情况-拽起应用程序
  • Percona 开源监控方案 PMM 详解
  • 爆改YOLOv8|利用图像分割网络UNetV2改进yolov8主干-即插即用
  • https://app.hackthebox.com/machines/Inject
  • Spring —— Spring简单的读取和存储对象 Ⅱ
  • 渗透测试之冰蝎实战
  • Mybatis、TKMybatis对比
  • Microsoft Office 2019(2022年10月批量许可版)图文教程
  • 《谷粒商城基础篇》分布式基础环境搭建
  • 哈希表题目:砖墙
  • Vue 3.0 选项 生命周期钩子
  • 【车载嵌入式开发】AutoSar架构入门介绍篇
  • 【计算机视觉 | 目标检测】DETR风格的目标检测框架解读