SPEC CPU简介和使用

2023-11-01

前言

SPEC CPU是一套行业标准的CPU密集型基准测试套件。SPEC设计了此套件,以使用实际用户应用程序开发的工作负载,在最广泛的实际硬件范围内提供计算密集型性能的比较度量。这些基准作为源代码提供,要求用户习惯使用编译器命令以及通过控制台或命令提示窗口通过命令解释器使用的其他命令,以便生成可执行二进制文件。

SPEC CPU2006和SPEC CPU2017说明

SPEC CPU2006是2006年6月推出的基准测试套件,它有几种不同的方法来衡量计算机性能。一种方法是测量计算机完成单个任务的速度。这是速度测量。另一种方法是测量计算机在一定时间内可以完成多少个任务。这称为吞吐量,容量或速率测量。

SPEC CPU2006包含12个Integer Benchmarks,和17个Floating Point Benchmarks
详细说明参考:SPEC CPU2006 Documentation

SPEC CPU2017是2017年6月发布的,基准测试包包含43个基准,分为四个套件:
SPECrate 2017 Integer    SPECspeed 2017 Integer
SPECrate 2017 Floating Point    SPECspeed 2017 Floating Point

SPEC CPU2017分别包含:10个Integer rate,10个Integer speed,13个Floating Point rate,10个Floating Point speed

cpu2017目录结构:
  1. benchspec -> CPU -> 主要500-999,43个基准 -> 1) src:源码文件 2)build:编译目录 3)run:运行目录 4)exe:可执行文件目录 5)data:三个数据集目录
  2. benchspec -> Makefile.defaults makefile模板文件
  3. bin -> runcpu runcpu命令文件
  4. bin -> harness
  5. config -> Example-gcc-linux-x86.cfg 模板配置文件,例如:gcc_dir, label, optimize优化参数等
  6. result 存放运行日志

详细说明参考:SPEC CPU2017 Documentation


SPEC CPU 2006使用及注意事项
  1. 修改config目录下的.cfg配置文件(如果是使用的cpu2017的配置文件,需要修改intspeed为int,fpspeed为fp)。
  2. 在cpu2006目录下source shrc。
  3. 基本使用:
// runspec测试433 benchmark,test.cfg配置文件,test数据集,运行一次
runspec -c test.cfg -a run --rebuild -i test -n 1 --noreportable 433

选项说明:

  • -c 等价于--config--conf
  • -a 等价于 --action (此处参数run代表运行,常用参数还有build等)
  • -D 等价于 --rebuild, 表示运行时重新build目录,如果不加此选项不会生效你修改过的test.cfg配置文件,如果已经build成功了,只需要run则可以不加此选项
  • -i 等价于--size 表示数据集大小,数据集共有三种:test、train、ref
  • -n 等价于--iterations 表示每个benchmark的运行次数
  • output_format 输出文件的格式,选项有:txt,html,cfg,pdf,csv

注意事项:

  • -n参数,默认值为3
  • 不加--noreportable则默认为reportable,表示生成的结果是用于可报告的,则每个benchmark它至少为你运行两遍,如果使用--noreportable,则-n指定运行几遍就运行几遍(取值为1,2,3)
  • 对于一个--reportable的运行,必须在编译时和运行时都验证目录内容,即需要加上strict_rundir_verify
  • 如果运行时你修改了配置文件,但你不想让它重新编译,可以把--rebuild选项换成--nobuild

SPEC CPU2017使用及注意事项
  1. 配置文件区分intrate、intspeed、fprate和fpspeed
  2. 使用前也需要source shrc
  3. 基本使用:
// runcpu测试500 benchmark,test.cfg配置文件,test数据集,运行一次
runcpu -c test.cfg -a run --rebuild -i test -n 1 --noreportable 500

选项说明:

  • cpu2017中移除选项-rate-speed-parallel_setup
  • 新增重要选项--threads,默认值为1。如果在配置中使用了openmp选项OMP_NUM_THREADS 则会忽略该选项。
  • -tune tuning,选择tuning使用base或是peak,默认使用base
  • -C 等价于 --copies,表示rate运行多少个copies,根据系统选择32或是64

正确运行效果应该如下:
result


除了使用以上命令测试之外,通常也可以使用脚本进行批量测试,示例脚本使用说明如下:

  1. SPEC CPU2017 GCC测试脚本如下(SPEC CPU2006,ICC、AOCC、LLVM脚本只需简单修改即可):
 #!/bin/bash                                                                                                                                                        
function config()
{
    source /home/zgl/cpu2017/0-setenv-gcc.sh
    source /home/zgl/cpu2017/shrc
    
    path=/home/zgl/cpu2017/test-log
    filename=${1}-`date`-gcc.log
    cfg='gcc.cfg --noreportable'
}
# 可增加一些方法进行每次测试前的memory、cache等清理,
# 使得到的结果更准确

function build(){
   config $1    
   echo '****** buildstart time '`date +%Y-%m-%d-%H-%M-%S`' *****'>>${path}/${filename} cfg>&1

   runcpu -c $cfg  -a clean $1 >>${path}/${filename} 2>&1    
 
   runcpu -c $cfg  -a clobber $1 >>${path}/${filename} 2>&1
    
   runcpu -c $cfg  -a build --rebuild $1>>${path}/${filename} 2>&1    
   echo '****** build-end time is '`date +%Y-%m-%d-%H-%M-%S`' ******'>>${path}/${filename} cfg>&1
}
function run(){
   echo '****** run start time '`date +%Y-%m-%d-%H-%M-%S`' *****'>>${path}/${filename} cfg>&1
   
   runcpu -c $cfg  -a run --nobuild -i ref -n 1  $1 >>${path}/${filename} 2>&1

   echo '****** run-end time is '`date +%Y-%m-%d-%H-%M-%S`' *****'>>${path}/${filename} cfg>&1

}
#build fprate
#run fprate

#build intrate
#run intrate

#build intspeed
#run intspeed

#build fpspeed
#run fpspeed 
  1. config文件可从Spec Results上下载模板之后进行修改:https://www.spec.org/cpu2017/results/cfp2017.html

SPEC CPU与benchmark关系

  SPEC CPU包含多个benchmark,每个benchmark有不同的应用领域,采用语言是C,C++,Fortran,benchmark位于spec cpu目录下的benchspec/CPU目录,每个benchmark包含build,data,Docs,exe,run,Spec等目录。

Q:

  1. 每个 benchmark 的运行与 runcpu(或者 runspec)有什么关系?
  2. benchmark 的这些目录如何生成的?以及每个目录作用是什么?
  3. 对于 rate benchmark(例如:500.perlbench_r)和 speed benchmark(例如:600.perlbench_r)有什么关系?

A:

  • 关于 spec 的运行机制:首先 spec 有一个Makefile.defaults模板文件,spec 先读取 cfg 配置文件,根据模板文件生成对应 benchmark 的Makefile.spec文件,再根据Makefile.spec中的优化选项和配置信息进行编译和运行。
  • 也就是说 benchmark 的 build,exe,run 目录是由 spec 生成,对应文件作用也就分别是存放源码已经 build 生成的中间文件,存放了可执行文件,可执行文件运行目录,包含输出模板信息和输入文件及输入参数信息等。
  • 对于500.perlbench_r600.perlbench_r 这样的 benchmark 打开他们的目录你会发现,它们目录的区别就是 500.perlbench_r 中多一个 src 目录,因为这样的 benchmark,源码是存放在这里的。两个benchmark 的不同还在于它们的 binary 文件可能不一样,输入参数可能不一样,一个是测试rate 另一个测试 speed

  其实我们更应该学会这样使用SPEC:需要运行哪个benchmark 就进入哪个 benchmark 的 build 目录(前提是你运行过runcpu命令生成了目录),直接修改 Makefile.spec 配置,再执行make cleanmake -j 重新编译生成 binary,再把生成的binary copy到run目录运行,如何运行?在run目录下面你会看到speccmds.cmd文件,文件的最后给出了该benchmark的运行参数和输入,如下所示:
cmd
然后你就可以在run目录执行time -p ...,得到运行时间,具体操作如下:

cd cpu2017/benchspec/CPU/600.perlbench_r/build/build_base_gcc-m64.0000/
vi Makefile.spec # 修改配置选项
make clean # 清除中间文件
make -j 32 # 进行编译
cp test ../../run/run_base_test_gcc-x86-m64.0000/ #拷贝可执行到run目录
cd  ../../run/run_base_test_gcc-x86-m64.0000/ #进入到run目录
vi speccmds.cmd  #查看最后的参数
time -p ./test xxxxx    #填入运行的参数 

其它:
  1. 区别cpu2006使用runspec,cpu2017使用runcpu。
  2. 运行test和train数据集只能得到run time,运行ref数据集时间最长,能得到run time和对应的ratio值
  3. SPEC CPU Results中收集了各大平台发布的speed和rate测试的结果集和配置文件(包含base的优化选项和peak的优化选项)。
  4. 注意配置文件中使用的jemalloc库的版本和路径,-lmvec选项库的使用和-vector-library=LIBMVEC选项的使用。
  5. 测base数据时不用打开openmp相关的选项。
  6. 数据测试时为避免终端打印太多运行信息,可关闭teeout选项,运行信息可使用脚本记录到日志文件(运行结果信息:cfg文件,csv文件,html文件,pdf文件等会自动保存到result文件夹)。
  7. 关于jemalloc选项的配置使用和介绍信息在jemalloc介绍和使用

References:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SPEC CPU简介和使用 的相关文章

  • 执行命令而不将其保留在历史记录中[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在进行软件开发时 经常需要在命令行命令中包含机密信息 典型示例是将项目部署到服务器的凭据设置为环境变量 当我不想将某些命令存储在命令历史记
  • 有没有一种快速方法可以从 Jar/war 中删除文件,而无需提取 jar 并重新创建它?

    所以我需要从 jar war 文件中删除一个文件 我希望有类似 jar d myjar jar file I donot need txt 的内容 但现在我能看到从 Linux 命令行执行此操作的唯一方法 不使用 WinRAR Winzip
  • 为什么 Linux 没有 DirectX API?

    在考虑现代显卡的 Windows 系统上 DirectX API 的驱动程序端实现时 我想知道为什么此实现在非 Windows 系统 尤其是 Linux 上不可用 由于明显缺乏此功能 我只能假设有一个我无视的充分理由 但在我的原始理解中 我
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 在centos中安装sqlite3 dev和其他包

    我正在尝试使用 cpanel 在 centos 机器上安装 sqlite dev 和其他库 以便能够编译应用程序 我对 debian 比 centos 更熟悉 我知道我需要的库是 libsqlite3 dev libkrb5 dev lib
  • tcpdump 是否受 iptables 过滤影响?

    如果我的开发机器有iptables规则到FORWARD一些数据包 这些数据包是否被 tcpdump 捕获 我有这个问题 因为我知道存在其他链称为INPUT如果数据包路由到 它会过滤发往应用程序的数据包FORWARD链 它会到达吗tcpdum
  • 从 ttyUSB0 写入和读取,无法得到响应

    我对 Linux tty 不太有经验 我的环境是带有丰富 USB 串行的 Raspbian 什么有效 stty F dev ttyUSB0 38400 cu l dev ttyUSB0 s 38400 cu to dev ttyUSB0作品
  • 无需超级用户即可在 Linux 中打开 RAW 套接字

    我必须编写一个在 Linux 上运行的 ping 函数 语言是 C 所以 C 也可以 在网上搜索并查看源代码ping命令 事实证明我应该创建一个原始套接字 icmp sock socket AF INET SOCK RAW IPPROTO
  • 如何根据标签将单个 XML 文件拆分为多个

    我有一个带有标签的 XML 文件 我想像这样分割文件
  • 如何获取 (Linux) 机器的 IP 地址?

    这个问题和之前问的几乎一样如何获取本地计算机的IP地址 https stackoverflow com questions 122208 get the ip address of local computer 问题 但是我需要找到一个的I
  • .net-core:ILDASM / ILASM 的等效项

    net core 是否有相当于 ILDASM ILASM 的功能 具体来说 我正在寻找在 Linux 上运行的东西 因此为什么是 net core ildasm 和 ilasm 工具都是使用此存储库中的 CoreCLR 构建的 https
  • 内核的panic()函数是否完全冻结所有其他进程?

    我想确认内核的panic 功能和其他类似kernel halt and machine halt 一旦触发 保证机器完全冻结 那么 所有的内核和用户进程都被冻结了吗 是panic 可以被调度程序中断吗 中断处理程序仍然可以执行吗 用例 如果
  • 与 pthread 的进程间互斥

    我想使用一个互斥体 它将用于同步对两个不同进程共享的内存中驻留的某些变量的访问 我怎样才能做到这一点 执行该操作的代码示例将非常感激 以下示例演示了 Pthread 进程间互斥体的创建 使用和销毁 将示例推广到多个进程作为读者的练习 inc
  • 配置tomat的server.xml文件并自动生成mod_jk.conf

    我在用apache 2 2 15 and tomcat6 6 0 24 on CentOS 6 4并希望使用 tomcat 服务器的功能 通过添加以下内容自动生成 mod jk conf 文件
  • Intel 上的 gcc 中的 _mm_pause 用法

    我参考过这个网页 https software intel com en us articles benefitting power and performance sleep loops https software intel com
  • C修改printf()输出到文件

    有没有办法修改printf为了将字符串输出到文件而不是控制台 我尝试在互联网上查找一些内容 发现了类似的电话dup dup2 and fflush这可能与此有关 EDIT 也许我不清楚 问题是这是C考试问题 问题如下 解释一个通常将字符串输
  • 在生产服务器上使用 Subversion 使文件生效的最佳方法是什么?

    目前我已经设置了 subversion 这样当我在 Eclipse PDT 中进行更改时 我可以提交更改 它们将保存在 home administrator 中项目文件 该文件具有 subversion 推荐的 branches tags
  • linux下如何从文本文件中获取值

    我有一些文本格式的文件 xxx conf 我在这个文件中有一些文本 disablelog 1 当我使用 grep r disablelog oscam conf 输出是 disablelog 1 但我只需要值1 请问你有什么想法吗 一种方法
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser

随机推荐

  • WIN10搭建FTP(全套完整)

    版权声明 本文为博主原创文章 遵循 CC 4 0 BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net zhj 1121 article details 85344185 目录 已经搭建好了
  • [源码解读]深入理解pthread中的condition条件变量

    深入理解pthread中的condition条件变量 文章目录 深入理解pthread中的condition条件变量 pthread cond init c pthread cond wait c pthread cond signal c
  • java希尔排序

    public class ShellSort public static void main String args int a 9 8 7 0 1 3 2 10 5 12 7 0 15 int n a length for int add
  • 设置带有vue和单个spa的微型前端架构

    A practical walkthrough on building a micro frontend architecture with multiple Vue js apps using single spa Note that y
  • Dynamics 365 subgrid 保存后刷新主窗体 新方式

    在 Dynamics 365开发中经常遇到 subgrid 保存后刷新主窗体或者 subgrid 刷新后刷新主窗体的需求 在圈内的文章中提供了两种手段 今天补充第三种方式 1 在主表单加一个定时任务 定时的去捞取后台数据库的数据和前台比较
  • JSP ---- 入门

  • PAM4: A new measurement science

    原文地址 This article is part of EDN and EE Times Hot Technologies Looking ahead to 2016 feature where our editors examine s
  • 各自然带代表植被_各气候带对应植被

    1 各种气候对应的代表植被 动物 土壤 农作物 shide 2 地理各自然带所对应的植被带分别是什么 1 热带雨林带 热带雨林 2 热带草原带 热带稀树草原 3 热带荒漠带 热带荒漠 4 亚热带常绿硬叶林带 亚热带常绿硬叶林 5 亚热带常绿
  • CSS animation动画使用详解

    目录 一 animation动画的使用步骤 第一步 定义动画 第二步 使用动画 二 animation的复合属性 三 animation的拆分属性 四 动画属性 一 animation动画的使用步骤 第一步 定义动画 changes为定义的
  • springboot实现复杂业务下的更新操作

    大家好 我是雄雄 欢迎关注微信公众号 雄雄的小课堂 前言 现在是2022年5月4日19 25 55 今天写了个这样的功能 某用户在一天内有多个训练项目 比如 晨跑 有氧训练 跳绳这三个项目 这三个训练项目都在数据库中有记录 每个项目都有开始
  • moment()获取当前时间的前几个小时、前几天、前几个月、前几年

    注意 项目中如果没有安装moment需要先安装引入或直接引入网页 可以参考moment官网 1 获取从当前时间开始的前一个小时是几时 整时 moment subtract 1 hours hour 2 获取当前日期的前一天日期是几日 日 m
  • Linux应用编程之多次打开同一文件进行读写操作与 O_APPEND 标志

    重复打开同一个文件 进行写操作 譬如一个进程中两次调用 open 函数打开同一个文件 分别得到两 个文件描述符 fd1 和 fd2 使用这两个文件描述符对文件进行写入操作 那么它们是分别写 各从各的位置 偏移量开始写 还是接续写 一个写完
  • 《Linux运维总结:Centos7.6之OpenSSH7.4升级版本至9.3》

    一 环境信息 操作系统 Centos7 6 1810 OpenSSH 7 4p1 OpenSSL 1 0 2k fips 如下图所示 注意 升级后由于加密算法的区别 低版本的SSH工具可能无法连接 建议改用Xshell7或SecureCRT
  • 【高级Java架构师系统学习】最新Java高级面试题汇

    性能调优 影响MySQLServer 性能的相关因素 商业需求对性能的影响 系统架构及实现对性能的影响 Query语句对系统性能的影响 Schema设计对系统的性能影响 硬件环境对系统性能的影响 MySQL 数据库锁定机制 MySQL锁定机
  • 当黑客就入门 ZzCMS8.1前台任意脚本上传漏洞复现

    一 环境选择 1 系统环境 Win server 2003 2 靶机IP 192 168 220 132 3 Web环境 Phpstudy2016 4 源码 ZzCMS8 1 lt 点击下载 gt 二 源码部署 1 将源码放入phpstud
  • 如何将typora照片导到csdn上

    解决typora 图片上传到csdn的问题 问题背景 今晚想把typora的笔记传到csdn 却发现照片一直发不过去 总是出现 外链图片转存失败 源站可能有防盗链机制 建议将图片保存下来直接上传 的问题 后来查了一下怎么解决 需要先将导入到
  • 德勤《全球AI发展白皮书》出炉!八大新趋势,三个关键技术一文扫尽【附下载】...

  • json-lib系列包报错原因

    我的JDK是1 6 json lib换了好几个版本还是不行 jsonArray与list之间的转换始终进行不了 之前也用到jsonArray与String之间的转换报错 不得不改用org json jar那个包 今天再次遇到这个问题 我决心
  • Nessus安装与使用

    目录 前言 一 kali安装Nessus 1 访问Nessus官网 2 安装Nessus程序 3 启动Nessus 4 浏览器访问nessus的web网站 5 选择 Managed Scanner 选项 点击 Continue 6 选择 T
  • SPEC CPU简介和使用

    前言 SPEC CPU是一套行业标准的CPU密集型基准测试套件 SPEC设计了此套件 以使用实际用户应用程序开发的工作负载 在最广泛的实际硬件范围内提供计算密集型性能的比较度量 这些基准作为源代码提供 要求用户习惯使用编译器命令以及通过控制