本文主要是使用SPEC2006在ARM平台进行测试,用的Linux系统为Debian,通过具体操作实例讲述测试过程,SPEC2006是SPEC新一代的行业标准化的CPU测试基准套件。重点测试系统的处理器,内存子系统和编译器。这个基准测试套件包括的SPECint基准和SPECfp基准。 其中SPECint2006基准包含12个不同的基准测试和SPECfp2006年基准包含19个不同的基准测试。SPEC设计了这个套件提供了一个比较标准的计算密集型,高性能的跨硬件的CPU测试工具。在SPEC CPU 2006基准有几种不同的方法来衡量计算机性能。 一种方式是测量计算机完成单一任务的速度,另一种方式吞吐量,容量或速率的测量。
总的过程概述:
1、搭建系统环境;
2、解压测试文件;
3、执行安装脚本;
4、初始化环境变量;
5、复制并修改cfg文件;
6、根据测试需要带入参数并执行测试;
安装好linux操作系统,以及相应语言的编译器如:gcc gcc-g++ gcc-gfortran;
[root@localhost /]# apt-get install gcc gcc-g++ gcc-gfortran -y
将speccpu2006的安装包上传到操作系统,解压进入测试目录
[root@localhost /]# tar -xvf speccpu2006-v1.0.1.tar -C .
[root@localhost /speccpu2006-v1.0.1]# cd speccpu2006-v1.0.1
##四、执行安装脚本
[root@localhost /speccpu2006-v1.0.1]# ./install.sh //如遇没有权限执行脚本,请确保是否为root用户,同时给所以文件加入可执行权限
[root@localhost /speccpu2006-v1.0.1]# chmod -R a+x *
[root@localhost /speccpu2006-v1.0.1]# source shrc
[root@localhost /speccpu2006-v1.0.1/config]# cd config/
[root@localhost /speccpu2006-v1.0.1/config]# cp arm64.cfg test.cfg //根据架构选择不通的cfg文件
//跟需要修改cfg配置,如硬件配置,编译参数和各个子项的编译参数,(因为本人在测试过程中,因为编译器版本的原因,造成编译报错,所以要修改子项编译参数,后面章节会讲),具体图片如下:
1、单个项目测试
runspec -c test.cfg 429.mcf --rate 4 -n 1 --noreportable
2、int整型数测试
runspec -c test.cfg int --rate 8 -n 1 -size=ref --noreportable --output_format all
3、fp浮点数
runspec -c test.cfg fp --rate 8 -n 1 -size=ref --noreportable --output_format all
4、全项目测试
runspec -c test.cfg --rate 8 --noreportable --size=ref --tune=base -o text,screen,pdf -I --iterations=1 all
1)ref:测试规模(测试规模有test,ref,train其中test最小跑的时间最短,如果测试编译器正确性的时候可以用test规模,但是想测试性能时候用ref)
2)iterations=3次:测试次数(编译器性能稳定时候测一次就行),也可以写成n 3;
如果想得到加权统计的结果,也就是常说的cpu的spec分数,需要设置iterations大于等于3。
3) all 测试范围: 表示进行fp和int测试(将all替换成int 或 fp 进行定点和浮点的测试;将all替换成456/444等文件编号,表示对某一测试项进行单独测试)
对于CPU的SPEC测试,默认这一项是all,但是对于其中的某一项测试分数不满意,可通过指定此测试项的编号,进行单独测试。测试也会得到一个分数,做单项的性能调优时候,可以用得到。
4)输出格式:-o text,screen,pdf 表示测试完成,生成报告的格式,依次分别是txt,屏幕显示和pdf格式,保存目录在spec解压目录result中。
5)noreportable && reportable : 表示检测/不检测生成的二进制文件是否修改过。
–reportable 如果原来生成的二进制文件被修改了,则运行时会自动重新编译生成二进制文件,确保运行的程序是原始的程序。
6)测试核数:-r 设置测试的CPU核心数目;
7)测试模式:-tune = base 基准测试;-tune = peak 峰值测试;-tune默认是base 可以选择base, peak, or all ,Report 首先是base,其次是peak.
8)-I : 表示测试中,如遇报错,略过错误继续测试;
子项目 | 语言 | 说明 |
---|---|---|
400.perlbench PERL编程语言 | ANSI C | 负载由三个script组成:主负载是垃圾邮件检测软件SpamAssassin,一个是email到HTML的转换器MHonArc,最后一个是specdiff |
401.bzip2 压缩 | ANSI C | 负载包括六个部分:两个小的JPEG图片、一个程序、一个tar包起的几个源程序文件、一个HTML文件、混合文件包括压缩起来的高可压缩文件及不怎么可压缩的文件,测试分别使用了三个不同的压缩等级进行压缩和解压缩 |
403.gcc C 编译器 | C | 对9组C代码进行了编译 |
429.mcf 组合优化 | ANSI C w/libm | MCF是一个用于大型公共交通中的单站车辆调度的程序,429.mcf运行于32/64位模型时分别需要约860/1700MB的内存 |
445.gobmk 人工智能:围棋 | C | 围棋 |
456.hmmer 基因序列搜索 | C | 使用HMMS(Hidden Markov Models,隐马尔科夫模型) 基因识别方法进行基因序列搜索 |
458.sjeng 人工智能:国际象棋 | ANSI C | 国际象棋 |
462.libquantum 物理:量子计算 | ISO/IEC 9899:1999(“C99”) | libquantum是模拟量子计算机的库文件,用来进行量子计算机应用的研究 |
464.h264ref 视频压缩 | C | 使用两种配置对两个YUV格式源文件进行H.264编码 |
471.omnetpp 离散事件仿真 | C++ | 包括约8000台计算机和900个交换机/集线器,以及混合了各种从10Mb到1000Mb速率的大型CSMA/CD协议以太网络模拟 |
473.astar 寻路算法 | C++ | 实现了2D寻路算法A*的三种不同版本 |
483.xalancbmk XML处理 | C++ | XML文档/XSL表到HTML文档的转换 |
410.bwaves 流体力学 | Fortran 77 | 对三维瞬跨音速粘性流中冲击波的模拟计算 |
416.gamess 量子化学 | Fortran | 三种SCF自洽场计算:胞嘧啶分子、水和Cu2+离子、三唑离子 |
433.milc 量子力学 | C | 四维SU(3)格点规范理论的模拟,用来研究QCD量子色动力学、夸克及胶子 |
434.zeusmp 物理:计算流体力学 | Fortran 77/REAL*8 | 用来计算理想、非相对论条件下的流体力学和磁流体力学,434.zeusmp模拟计算了一个统一磁场中的3D冲击波 |
435.gromacs生物化学/分子力学 | C & Fortran | GROMACS是一个分子力学计算套件,然而也可以用于非生物系统,435.gromacs模拟了在一个水和离子溶液中的蛋白质溶菌酶结构在各种实验手段如核磁共振的X光照射下的变化 |
436.cactus ADM物理:广义相对论 | Fortran 90, ANSI C | 436.cactusADM对时空曲率由内部物质决定的爱因斯坦演化方程进行求解,爱因斯坦演化方程由10个标准ADM 3+1分解的二阶非线性偏微分方程组成。 |
437.leslie 3d流体力学 | Fortran 90 | LESlie3d是用来计算湍流的计算流体力学程序,437.leslie3d计算了一个如燃油注入燃烧室的时间分层混合流体。 |
444.namd 生物/分子 | C++ | NAMD是一个大型生物分子系统并行计算程序,444.namd模拟了了92224个原子组成的A-I载脂蛋白 |
447.dealII 有限元分析 | C++ w/Boost lib | deal.II是定位于自适应有限元及误差估计的C++库,447.dealII对非常系数的亥姆霍兹方程进行求解,它使用了基于二元加权误差估计生成最佳网格的自适应方法,该方程在3维得解 |
450.soplex 线形编程、优化 | ANSI C++ | SoPlex使用单纯形算法解线性方程 |
453.povray 影像光线追踪 | ISO C++ | POV-Ray是一个光线追踪渲染软件,453.povray渲染一幅1280x1024的反锯齿国际象棋棋盘图像 |
454.calculix 结构力学 | Fortran 90 & C w/SPOOLES code | CalculiX是一个用于线性及非线性三位结构力学的有限元分析软件,454.calculix计算了一个高速旋转的压缩盘片在离心力的作用下的应力和变形情况 |
459.Gems FDTD计算电磁学 | Fortran 90 | 459.GemsFDTD使用FDTD(有限差分时域)方法求解三维时域中的麦克斯韦方程,计算了一个理想导体的雷达散射截面 |
465.tonto 量子化学 | Fortran 95 | Tonto是一个面向对象的量子化学程序包,465.tonto计算面向量子晶体学,它基于一个符合X光衍射实验数据的、约束的分子Hartree-Fock波函数 |
470.lbm 流体动力学 | ANSI C | 470.lbm使用LBM(格子波尔兹曼方法)模拟非压缩流体,它模拟了两种情况:类似活塞推动的剪切驱动流体和管道流体,测试包含了3000个步骤 |
481.wrf 天气预报 | Fortran 90 & C | 481.wrf基于WRF(Weather Research and Forecastin)模型,对NCAR的数据进行了计算,数据包括了UTC 2001.06.11到UTC 2001.06.12以三小时为间隔的数据 |
482.sphinx3语音识别 | C | 语音识别 |
(1)Error building 416.gamess
解决方法:在配置文件cfg中的Portability Flags中设置416.gamess的编译参数
416.gamess=default=default=default:
FPORTABILITY = -funconstrained-commons -std=legacy
(2)Error building 447.dealII
解决方法:在配置文件cfg中的Portability Flags中设置447.dealII的编译参数
447.dealII=default=default=default:
CXXPORTABILITY = -fpermissive
(3) Error building 450.soplex
解决方法:在配置文件cfg中的Portability Flags中设置450.soplex的编译参数
450.soplex=default=default=default:
CXXPORTABILITY = -std=c++03
(4)Error building 481.wrf
解决方法:在配置文件cfg中的Portability Flags中设置481.wrf的编译参数
481.wrf=default=default=default:
CPORTABILITY = -DSPEC_CPU_CASE_FLAG -DSPEC_CPU_LINUX
FPORTABILITY = -std=legacy
(5)编译时报错
specmake build 2> make.err | tee make.out
/usr/bin/gcc -c -o av.o -DSPEC_CPU -DNDEBUG -DPERL_CORE -O2 -fno-strict-aliasing -DSPEC_CPU_LP64 -DSPEC_CPU_LINUX_X64 av.c
In file included from /usr/include/stdio.h:936:0,
from perlio.h:65,
from iperlsys.h:51,
from perl.h:2585,
from av.c:22:
/usr/include/x86_64-linux-gnu/bits/stdio2.h: In function ‘sprintf’:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:33:10: error: invalid use of ‘__builtin_va_arg_pack ()’
return __builtin___sprintf_chk (__s, __USE_FORTIFY_LEVEL - 1,
^
/usr/include/x86_64-linux-gnu/bits/stdio2.h: In function ‘snprintf’:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:64:10: error: invalid use of ‘__builtin_va_arg_pack ()’
return __builtin___snprintf_chk (__s, __n, __USE_FORTIFY_LEVEL - 1,
^
/usr/include/x86_64-linux-gnu/bits/stdio2.h: In function ‘fprintf’:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:97:10: error: invalid use of ‘__builtin_va_arg_pack ()’
return __fprintf_chk (__stream, __USE_FORTIFY_LEVEL - 1, __fmt,
^
/usr/include/x86_64-linux-gnu/bits/stdio2.h: In function ‘printf’:
/usr/include/x86_64-linux-gnu/bits/stdio2.h:104:10: error: invalid use of ‘__builtin_va_arg_pack ()’
return __printf_chk (__USE_FORTIFY_LEVEL - 1, __fmt, __va_arg_pack ());
^
/usr/include/x86_64-linux-gnu/bits/stdio2.h: In function ‘dprintf’:
原因是spec与gcc 版本不对应 ,gcc 相对于spec2006 来说gcc 版本过高,所以gcc降级
(6)运行上报错:runspec --config mytest.cfg --action=onlyrun --tune=all --reportable int //通过–action 指定 onlyrun 不再编译
*** Error during benchmark setup for 429.mcf
Setting up 445.gobmk ref base gcc43-64bit default: ERROR: Cannot create run directory for 445.gobmk: mkdir /home/nfs/zhaoan/spec/cpu2006/benchspec/CPU2006/445.gobmk/run/run_base_ref_gcc43-64bit.0005: Permission denied at /home/nfs/zhaoan/spec/cpu2006/bin/benchmark.pm line 2073
*** Error during benchmark setup for 445.gobmk
Setting up 456.hmmer ref base gcc43-64bit default: ERROR: Cannot create run directory for 456.hmmer: mkdir /home/nfs/zhaoan/spec/cpu2006/benchspec/CPU2006/456.hmmer/run/run_base_ref_gcc43-64bit.0005: Permission denied at /home/nfs/zhaoan/spec/cpu2006/bin/benchmark.pm line 2073
*** Error during benchmark setup for 456.hmmer
Setting up 458.sjeng ref base gcc43-64bit default: ERROR: Cannot create run directory for 458.sjeng: mkdir /home/nfs/zhaoan/spec/cpu2006/benchspec/CPU2006/458.sjeng/run/run_base_ref_gcc43-64bit.0005: Permission denied at /home/nfs/zhaoan/spec/cpu2006/bin/benchmark.pm line 2073
原因:由于在docker容器中是使用root权限编译的,在138上面再执行时用户是:wxsc ,所以权限有问题
修改:sudo chown -R wxsc:wxsc ./*
(7)运行时报错
Running (#2) 445.gobmk ref base gcc43-64bit default
/home/nfs/zhaoan/spec/cpu2006/bin/specinvoke -d /home/nfs/zhaoan/spec/cpu2006/benchspec/CPU2006/445.gobmk/run/run_base_ref_gcc43-64bit.0006 -e speccmds.err -o speccmds.stdout -f speccmds.cmd -C -q
Socket error Event: 32 Error: 10053.
Connection closing…Socket close.
Connection closed by foreign host.
Disconnected from remote host(192.167.253.138) at 08:50:57.
解决方法:改为后台执行即可
(8)运行时报错
1548641594.38: Contents of nph3.err
1548641594.38: ****************************************
1548641594.38: …/run_base_ref_gcc43-64bit.0009/hmmer_base.gcc43-64bit: /lib/x86_64-linux-gnu/libm.so.6: version `GLIBC_2.27’ not found (required by …/run_base_ref_gcc43-64bit.0009/hmmer_base.gcc43-64bit)
解决方法:编译时改为静态链接
使用的config 是 mytest.cfg ,则修改mytest.cfg文件将
COPTIMIZE = -O2 -fno-strict-aliasing
CXXOPTIMIZE = -O2 -fno-strict-aliasing
FOPTIMIZE = -O2 -fno-strict-aliasing
改为:
COPTIMIZE = -O2 -fno-strict-aliasing -static
CXXOPTIMIZE = -O2 -fno-strict-aliasing -static
FOPTIMIZE = -O2 -fno-strict-aliasing -static
(9)float编译时报错
1548726106.29: ****************************************
1548726106.29: Contents of exam29.err
1548726106.29: ****************************************
1548726106.29: STOP IN ABRT
1548726106.29: ****************************************
1548726106.29: *** Miscompare of exam29.out; for details see
1548726106.29: /cpu2006/benchspec/CPU2006/416.gamess/run/run_base_test_gcc43-64bit.0000/exam29.out.mis
1548726106.29: 0423: 1 0 0 -228.438026762 -228.438026762 0.585016182 0.000000000
1548726106.29: 1 0 0 -228.438026762 -228.438026762 2.057216987 0.000000000
1548726106.29: ^
1548726106.29: 0424: ---------------START SECOND ORDER SCF---------------
1548726106.29: 2 1 0 -13.398272306 215.039754456 0.019611730 2.138165837
1548726106.29: ^
1548726106.29: 0425: 2 1 0 -228.975183270 -0.537156507 0.141897260 0.111481465
1548726106.29: ---------------START SECOND ORDER SCF---------------
1548726106.29: ^
1548726106.29: 0426: 3 2 0 -229.014081256 -0.038897986 0.064028396 0.079634004
1548726106.29: 3 2 0 -13.404086244 -0.005813938 0.000644098 0.008801378
1548726106.29: ^
1548726106.29: 0427: 4 3 0 -229.036210679 -0.022129423 0.025840433 0.007697238
1548726106.29: 4 3 0 -13.404093666 -0.000007422 0.000028154 0.000448854
1548726106.30: ^
1548726106.30: 0428: 5 4 0 -229.036777024 -0.000566345 0.008639408 0.001874192
1548726106.30: 5 4 0 -13.404093683 -0.000000017 0.000000370 0.000004470
1548726106.30: ^
1548726106.30: 0429: 6 5 0 -229.036824895 -0.000047871 0.001734717 0.000979860
1548726106.30: 6 5 0 -13.404093683 -0.000000000 0.000000008 0.000000051
1548726106.30: ^
1548726106.30: 0431: 7 6 0 -229.036831711 -0.000006816 0.000315932 0.000297576
1548726106.30: -----------------
1548726106.30: ^
1548726106.30: 0432: 8 7 0 -229.036832335 -0.000000624 0.000112760 0.000083271
1548726106.30: DENSITY CONVERGED
1548726106.30: ^
1548726106.30: 0433: 9 8 0 -229.036832426 -0.000000092 0.000074046 0.000042607
1548726106.30: -----------------
1548726106.30: ^
1548726106.30: Benchmark Times:
1548726106.30: Start: Tue Jan 29 09:41:45 2019 (1548726105)
1548726106.30: Stop: Tue Jan 29 09:41:45 2019 (1548726105)
1548726106.30: Elapsed: 00:00:00 (0)
1548726106.30: Reported: 0 39727000 0.039727
1548726106.30: Error 416.gamess base test ratio=-0.00, runtime=0.039727, power=0.00w, temp=0.00 deg, humidity=0.00%
1548726106.30: Invalid run; unable to continue.
解决方法:
这个问题通过修改相应的config 中编译优化选项 将
COPTIMIZE = -O2 -fno-strict-aliasing -static
CXXOPTIMIZE = -O2 -fno-strict-aliasing -static
FOPTIMIZE = -O2 -fno-strict-aliasing -static
改为:
COPTIMIZE = -O0 -fno-strict-aliasing -static
CXXOPTIMIZE = -O0 -fno-strict-aliasing -static
FOPTIMIZE = -O0 -fno-strict-aliasing -static
注意:416测试时报错,# Error 416.gamess: Output miscompare,可以在416项中COPTIMIZE、CXXOPTIMIZE、FOPTIMIZE追加-ffpe-summary=none解决
查看具体子项执行的命令:
cd /speccpu2006-v1.0.1/benchspec/CPU2006/416.gamess/run/build_base_x86_64_linux.0000
specinvoke -n -f speccmds.cmd
注意测试前清空缓存:
echo 3 > /proc/sys/vm/drop_caches #清理缓存
遇到测试项目编译不过,可以通过修改测试源码或者更改gcc、c++等编译器的版本进行测试
1、FIO测试硬盘性能参数和实例总结
2、Linux下stream内存带宽测试总结