SPEC CPU 2006基准测试的简介、安装、使用和注意事项

SPEC CPU 2006基准测试的简介、安装、使用和注意事项

原文作者黄崇艺。本文的主要内容为SPEC CPU 2006基准测试的简介、安装、使用和注意事项,使用基于LLVM的Address Sanitizer性能测试作为一个实战案例展示。故而全文推荐。

安装

  • 网上找到的版本应该是这个speccpu2006-v1.0.1-newest.tar,在想要安装的目录下执行tar -xvf speccpu2006-v1.0.1-newest.tar就可以解压安装
  • 进入到目录里面cd speccpu2006-v1.0.1
  • 安装 spec ,./install.sh,如果安装出现错误,极有可能是有一些文件没有可执行文件,递归赋予可执行文件就行chmod -R a+x .,不会有问题的
  • 安装完成之后执行./shrc激活spec环境(以后每次重新打开一个 shell 会话的时候都需要激活一下)

构成

  • SPEC有两个部分组成,一个是数据,一个是代码(代码以项目的方式组织),运行需要指定数据以及项目
  • 数据有三个规格
    1. test(小型)
    2. train(中型)
    3. ref(大型)
  • 代码有以下选项
    1. int(整型运算性能)
    2. float,也叫 fp(浮点运算性能)
    3. all_c(全部 c 项目)
    4. all_cpp(全部 cpp 项目)
    5. all(全部项目)
    6. 特定项目,比如 453.povray

编译标准

  • C 语言要使用 -std=gnu89
  • CPP 要使用 -std=c++98
  • 如果要启用 address sanitizer,要注意防止 sanitizer 检测到错误的时候 abort 程序而导致 benchmark 提前终止,需要使用以下编译选项
    -fsanitize=address -fsanitize-recover=address
    
    并且要注入环境变量ASAN_OPTIONS=halt_on_error=0:detect_leaks=0

配制

运行 spec 需要指定配制,在配制文件里面要声明 reportable = 1 才可以有结果输出

运行模式

spec 有两种运行模式,一个是 base ,基本模式,一般使用这个,一个是 peak ,性能模式,测试峰值性能极限

  • 关于这两个关键字的解释,要看下文如何看结果报告那一章节

运行命令

runspec --rebuild -c $name -a run -I -l --size $size -n $NUM_RUNS $PROJECT
  1. --rebuild:每次运行都重新编译,默认行为不是重新编译,而是类似 make -j,另外说一点,spec 使用的不是make,而是specmake
  2. -c:指定运行配制(config)
  3. -a:指定任务,有以下选项(action):
    - build
    - buildsetup
    - clean
    - clobber
    - configpp
    - scrub
    - report
    - run
    - setup
    - trash
    - validate
  4. -I:忽略任何中断
  5. -l:在执行过程中记录输出
  6. --size:选择数据集大小 <test | train | ref>
  7. -n:spec运行的趟数
  8. $PROJECT: <int | fp | all_c | all_cpp | all>

Fortran 错误

  • 由于某些项目是有部分使用 fortran 来实现的,所以如果没有安装 gfortran 的时候可能会导致其编译不了,解决方法有二
    1. 安装 gfortran
    2. FC=echo ,相当于直接告诉它不要编译这部分了,浪费时间的

日志位置

  • 运行完成之后在安装底层目录的 result 文件夹下可以看到运行日志以及结果
    1. 看结尾
      • 以 log 结尾的文件是一个完整运行日志,包括编译输出,运行输出,以及结果归纳
      • 以其他文件类型后缀结尾的都是测试结果归纳,只不过文件格式不一样,内容一样的,一般看txt就行
    2. 看开头
      • CINT 表示使用 C/C++ 编写的 int benchmark
      • CFP 表示使用 C/C++ 编写的 float benchmark
    3. 看中间
      • 中间是一个编号,遵循以时间为递增的规律
  • 另外在每个项目的文件下也会有单独的编译日志以及运行日志,例如
    • ls ./benchspec/CPU2006/400.perlbench/run/build_base_1.0000/这个目录下可以看到编译日志
      • 如果这个项目编译出错了,可以在这个目录下找到make.err日志
    • ls ./benchspec/CPU2006/400.perlbench/run/run_base_test_1.0000/这个目录下可以看到运行日志

看日志

  • 有时候 spec 自带的结果汇总会不完整,因为有些程序有可能被 asan 终止之后在拉起就不被计分了,所有有时候得去日志里面翻找成功运行项目案例的运行时间,在上面提到的那个完整日志里面全局搜索关键字 success 就可以了(忽略大小写)

    • log2excel 脚本,这里是一个简单的将这些 success 项目信息转为 excel 表格的脚本,以及应该喂给这个脚本的 success 数据格式:

      CC               = /root/asanopt/llvm-4.0.0-project/build/bin/clang    -std=gnu89 -fsanitize=address -fsanitize-recover=address -m64 -g
      CXX              = /root/asanopt/llvm-4.0.0-project/build/bin/clang++  -std=c++98 -fsanitize=address -fsanitize-recover=address -m64 -g
      
      400.perlbench base ref ratio=12.85, runtime=760.415379
      400.perlbench base ref ratio=14.33, runtime=681.948309
      400.perlbench base ref ratio=14.44, runtime=676.611816
      401.bzip2 base ref ratio=18.30, runtime=527.208650
      401.bzip2 base ref ratio=18.55, runtime=520.089746
      401.bzip2 base ref ratio=18.78, runtime=513.887221
      403.gcc base ref ratio=18.22, runtime=441.892276
      403.gcc base ref ratio=19.51, runtime=412.592274
      403.gcc base ref ratio=19.76, runtime=407.424780
      429.mcf base ref ratio=29.58, runtime=308.278307
      429.mcf base ref ratio=36.16, runtime=252.184882
      429.mcf base ref ratio=38.58, runtime=236.364282
      433.milc base ref ratio=20.98, runtime=437.482181
      433.milc base ref ratio=21.23, runtime=432.368999
      433.milc base ref ratio=21.41, runtime=428.706485
      444.namd base ref ratio=19.20, runtime=417.752721
      444.namd base ref ratio=19.35, runtime=414.419211
      444.namd base ref ratio=20.47, runtime=391.783225
      445.gobmk base ref ratio=21.42, runtime=489.668323
      445.gobmk base ref ratio=22.60, runtime=464.136214
      445.gobmk base ref ratio=22.85, runtime=458.984958
      447.dealII base ref ratio=27.67, runtime=413.422023
      447.dealII base ref ratio=28.80, runtime=397.228149
      447.dealII base ref ratio=30.58, runtime=374.084230
      450.soplex base ref ratio=28.75, runtime=290.083530
      450.soplex base ref ratio=31.28, runtime=266.656672
      450.soplex base ref ratio=32.73, runtime=254.838331
      453.povray base ref ratio=20.95, runtime=253.951463
      453.povray base ref ratio=21.30, runtime=249.714080
      453.povray base ref ratio=22.47, runtime=236.739422
      456.hmmer base ref ratio=14.50, runtime=643.463325
      456.hmmer base ref ratio=16.22, runtime=575.344854
      456.hmmer base ref ratio=16.35, runtime=570.789854
      458.sjeng base ref ratio=21.67, runtime=558.318427
      458.sjeng base ref ratio=24.55, runtime=492.913527
      458.sjeng base ref ratio=25.18, runtime=480.538434
      462.libquantum base ref ratio=62.08, runtime=333.748264
      462.libquantum base ref ratio=68.76, runtime=301.351093
      462.libquantum base ref ratio=73.88, runtime=280.453628
      464.h264ref base ref ratio=31.03, runtime=713.099006
      464.h264ref base ref ratio=33.94, runtime=652.062848
      464.h264ref base ref ratio=35.00, runtime=632.321436
      470.lbm base ref ratio=58.00, runtime=236.895693
      470.lbm base ref ratio=63.69, runtime=215.746827
      470.lbm base ref ratio=64.17, runtime=214.102158
      473.astar base ref ratio=17.80, runtime=394.369525
      473.astar base ref ratio=18.05, runtime=388.900111
      473.astar base ref ratio=18.77, runtime=374.065830
      482.sphinx3 base ref ratio=30.24, runtime=644.427922
      482.sphinx3 base ref ratio=30.28, runtime=643.674597
      482.sphinx3 base ref ratio=32.57, runtime=598.409849
      483.xalancbmk base ref ratio=20.32, runtime=339.625837
      483.xalancbmk base ref ratio=20.72, runtime=332.940290
      483.xalancbmk base ref ratio=21.84, runtime=315.878660
      998.specrand base ref ratio=119.83, runtime=0.083455
      998.specrand base ref ratio=122.88, runtime=0.081378
      998.specrand base ref ratio=123.67, runtime=0.080860
      999.specrand base ref ratio=122.42, runtime=0.081687
      999.specrand base ref ratio=123.98, runtime=0.080658
      999.specrand base ref ratio=124.79, runtime=0.080134
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曹无悔

请支持我的梦想!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值