教你如何使⽤SPECCPU2006
因为⼯作原因陆陆续续接触到SPEC的测试,由于此项测试相对门槛⾼⼀些,测试周期长,⽹上靠谱的资料不多,遂将⾃⼰的测试经验总结下来跟⼤家分享。
本⽂只涉及到⼀些基本的测试知识,欢迎有经验的朋友补充,交流~
0 ⼯具介绍
SPEC是标准性能评估公司(Standard Performance Evaluation Corporation)的简称。SPEC是由计算机⼚商、系统集成商、⼤学、研究机构、咨询等多家公司组成的组织,这个组织的⽬标是建⽴、维护⼀套⽤于评估计算机系统的标准。
在早些年,业界使⽤的是其上⼀个版本SPEC CPU 2000。和SPEC CPU 2000⼀样,SPEC CPU 2006包括了CINT2006和C FP2006两个⼦项⽬,前者⽤于测量和对⽐整数性能,⽽后者则⽤于测量和对⽐浮点性能,SPEC CPU 2006中对SPEC CPU 2000中的⼀些测试进⾏了升级,并抛弃/加⼊了⼀些测试,因此两个版本测试得分并没有可⽐较性。
SPEC CPU测试中,测试系统的处理器、内存⼦系统和使⽤到的编译器(SPEC CPU提供的是源代码,并且允许测试⽤户进⾏⼀定的编译优化)都会影响最终的测试性能,⽽I/O(磁盘)、⽹络、操作系统和
图形⼦系统对于SPEC CPU2006的影响⾮常的⼩。
SPEC CPU 2006 benchmark是SPEC新⼀代的⾏业标准化的CPU测试基准套件。重点测试系统的处理器,内存⼦系统和编译器。这个基准测试套件包括的SPECint基准和SPECfp基准。 其中SPECint2006基准包含12个不同的基准测试和SPECfp2006年基准包含19个不同的基准测试。SPEC设计了这个套件提供了⼀个⽐较标准的计算密集型,⾼性能的跨硬件的CPU测试⼯具。在SPEC CPU 2006基准有⼏种不同的⽅法来衡量计算机性能。 ⼀种⽅式是测量计算机完成单⼀任务的速度; 另⼀种⽅式吞吐量,容量或速率的测量。 说明:由于
spec2006⽀持多种类型操作系统。以下安装、测试、移植等介绍均基于Unix 和其他的 Unix-like system如linux。Windows系统不在此范围内。
tips1 :SPEC CPU 2006 是收费⼯具。
之前在某些⽂章或论坛下⾯看到求资源的,建议如果是要做相关CPU测试的话,付费购买,或者向你们的供货商索要吧~
tips2:选择正确的SPEC 安装包
SPEC CPU 2006 跟不同的CPU适配后的⼯具,所以说x86下的源码包不能再MIPS下运⾏,MIPS的也
不能在ARM下运⾏,基本概念,给刚接触的⼈提醒⼀下。
1 安装和编译
安装和编译分为两种情况:⼀对于源码,是需要安装和编译的;另⼀种是在相同环境下编译好的安装包,拷贝过来解压后即可运⾏使⽤。
以Ubuntu 16.4为例⼦,介绍源码的安装和编译过程。
安装
⾸先下载CPU2006到本地,⼀般会下载到镜像⽂件,解压之后可以到install.sh
tips3:SPEC CPU2006没有安装⽬录的要求。
~$ ./install.sh
SPEC CPU2006 Installation
Top of the CPU2006 tree is '/media/*/SPEC_CPU2006v1.1'
Enter the directory you wish to install to (e.g. /usr/cpu2006)
/home/myname/cpu2006
Installing FROM /media/*/SPEC_CPU2006v1.1
Installing TO /home/myname/cpu2006
Is this correct? (Please enter 'yes' or 'no')
yes
...
之后等待安装完成,到此安装过程结束。
编译
根据⽂档,在使⽤之前需要先配置环境。CPU2006中已经集成了配置环境的⽅法,只需要执⾏⼀条命令就可以完成配置操作
source ./shrc
每次重新打开terminal的时候,都需要先运⾏该命令,之后才可以正常使⽤。
在编译⼯具之前,我们⾸先需要进⼊config⽂件夹,根据⾃⼰的需要,复制⼀份已有的配置⽂件模板作为⾃⼰使⽤的⽂件,例如
cp Example-linux64-amd64-gcc43.cfg my.cfg
例如我们只需要测试int型的CPU性能,我们可以执⾏以下操作:
runspec --fig -T base --action=build int
2 运⾏
运⾏的⽅式很简单,即通过runspec 命令+相应的参数,执⾏相应的测试。以下⾯的测试命令为例,介绍SPEC测试。
runspec -config=XX.cfg -size=ref -r 4 -tune=base -noreportable -o text,screen,pdf -I -iterations=3 all
0)配置⽂件:XX.cfg,配置⽂件中可以包含上述命令的所有信息,但是runspec命令的优先级⾼。此⽂件在spec的解压⽬录下,由                  提供的cfg⽂件修改⽽来。
1)测试规模:ref(测试规模有test,ref,train其中test最⼩跑的时间最短,如果测试编译器正确性的时候可以⽤test规模,但是想测试性能时候⽤ref)
2)测试次数:iterations=3次(编译器性能稳定时候测⼀次就⾏),也可以写成n 3;
tips4:如果想得到加权统计的结果,也就是常说的cpu的spec分数,需要设置iterations⼤于等于3。gzip是什么文件夹
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 : 表⽰测试中,如遇报错,略过错误继续测试;
3  常⽤测试参数
上⾯给出了例⼦,介绍了主要的测试参数配置。下⾯给出⼀组常⽤的测试命令及意义。
a.runspec -c test.cfg -i test -I all 基于最⼩测试数据集快速执⾏所有的测试,测试过程中如果某个⽤例发⽣错误,则跳过错误⽤例,继续执⾏其他⽤例。⼀般不⽤于不⽤于正式测试,验证环境是否有问题。
b.runspec -c test.cfg -i ref -n 3 -I all 基于最⼤测试数据集全⾯执⾏所有的测试,⽤于测试单核CPU,测试过程中如果某个⽤例发⽣错误,则跳过错误⽤例,继续执⾏其他⽤例。
c.runspec -c test.cfg –r ref –n 3 fp 基于最⼤测试数据集,只运⾏fp测试
d.runspec -c test.cfg –r ref –n 3 int 基于最⼤测试数据集,只运⾏int测试
e.runspec -c test.cfg -i ref 473.astar 基于最⼤测试数据集只执⾏473.astar单个测试。
f runspec –c test.cf
g –i ref --rate 4 int 基于最⼤数据测试集进⾏rate测试,运⾏4线程测试的分值
其他命令补充
--action build 创建测试项⽬
--action onlyrun 只是运⾏,不进⾏确认测试结果是否正确
--action report 标准测试
--action clean  清理已经建⽴的测试项⽬
tips5:SPEC CPU2006测试的时间很长,举例来说龙芯3A3000三遍浮点测试的时间24⼩时左右,测试不可中断。
tips6:SPEC CPU2006测试时候,需要⼀定的硬盘空间,建议⼤于等于20GB;
4  测试结果
测试结束后在result⽬录下,查看测试结果,测试结果⼀般以测试类型和测试次序进⾏区别,并且会按照整点和浮点进⾏划分。如果是按照正式reportable的模式进⾏测试的话,会出⼀份⽹页版的正式测试结果,参见下图: ⾮正式结果可以去asc或txt⽂档查看,格式例如下⽂:
Base    Base      Base        Peak    Peak      Peak
Benchmarks      Ref.  Run Time    Ratio      Ref.  Run Time    Ratio
-------------- ------  ---------  ---------    ------  ---------  ---------
400.perlbench    9770      430        22.7 S    9770      339        28.8 S
400.perlbench    9770      429        22.8 *    9770      338        28.9 S
400.perlbench    9770      429        22.8 S    9770      339        28.8 *
401.bzip2        9650      559        17.3 *    9650      552        17.5 *
401.bzip2        9650      559        17.3 S    9650      553        17.5 S
401.bzip2        9650      560        17.2 S    9650      552        17.5 S
<          8050      374        21.5 S    8050      337        23.9 S
<          8050      367        22.0 *    8050      337        23.9 S
<          8050      366        22.0 S    8050      337        23.9 *
456.hmmer        9330      213        43.8 S    9330      213        43.7 *
456.hmmer        9330      247        37.8 S    9330      214        43.6 S
456.hmmer        9330      214        43.5 *    9330      213        43.7 S
458.sjeng      12100      616        19.6 *  12100      574        21.1 *
458.sjeng      12100      617        19.6 S  12100      575        21.0 S
458.sjeng      12100      585        20.7 S  12100      574        21.1 S
462.libquantum  20720      14.2    1460  *  20720      14.2    1460  *
462.libquantum  20720      14.4    1440  S  20720      14.4    1440  S
462.libquantum  20720      13.5    1540  S  20720      13.5    1540  S
464.h264ref    22130      578        38.3 *  22130      527        42.0 S
464.h264ref    22130      579        38.2 S  22130      526        42.0 *
464.h264ref    22130      578        38.3 S  22130      526        42.0 S
473.astar        7020      313        22.4 S    7020      313        22.4 S
473.astar        7020      311        22.6 S    7020      311        22.6 S
473.astar        7020      311        22.6 *    7020      311        22.6 *
483.xalancbmk    6900      174        39.7 *    6900      170        40.7 S
483.xalancbmk    6900      174        39.6 S    6900      170        40.5 S
483.xalancbmk    6900      174        39.7 S    6900      170        40.6 *
==============================================================================
400.perlbench    9770      429        22.8 *    9770      339        28.8 *
401.bzip2        9650      559        17.3 *    9650      552        17.5 *
<          8050      367        22.0 *    8050      337        23.9 *
456.hmmer        9330      214        43.5 *    9330      213        43.7 *
458.sjeng      12100      616        19.6 *  12100      574        21.1 *
462.libquantum  20720      14.2    1460  *  20720      14.2    1460  *
464.h264ref    22130      578        38.3 *  22130      526        42.0 *
473.astar        7020      311        22.6 *    7020      311        22.6 *
483.xalancbmk    6900      174        39.7 *    6900      170        40.6 *
SPECint(R)_base2006                  36.7
SPECint2006                          39.1
此结果来源于⽹络,可以看出定点峰值测试结果(peak) 36.7分;定点基准测试结果36.7分。
本⼈实测的龙芯3A3000,单核浮点8-9分,多核浮点26-28分。龙芯3A4000测试结果要好蛮多,可见国产CPU还是取得了不⼩的进步。
5  具体测试项⽬
Spec int2006 12个整点测试项⽬
400.perlbench:C语⾔编写,同spec2000的253.perlbmk类似,是Perl V5.8.7版本的删减版,同样删除了⼀下操作系统特性有关的东西,增加了第三⽅的模块,如:SpamAssassin V2.61,Digest-MD5 v2.33,HTML-Parser v3.35,MHonArc V2.6.8,IO-stringy
V1.205,MailTools V1.60,TimeDate V1.16。400.perlbench采⽤3个脚本进⾏增加负载或⼯作。1.主要的负载在于打开 垃圾邮件过滤软件SpamAssassin。采取的过滤⽅式是采⽤记分制,也就是说会根据我们所设定的标准来给予分数超过标准值的时候即判定为
SPAM(垃圾邮件),其余为⾮垃圾邮件。但对SpamAssassin软件做了很⼤程度的修改,避免⼀些I/0操作,并且没有使⽤贝叶斯过滤。
2.是⽐较流⾏的email到HTML的转换器MHonArc
3.使⽤了spec2006的⼯具套件specdiff。
401.bzip2: C语⾔实现,同spec2000的256.bzip2类似,基于Julian Seward的bzip2 v1.03.唯⼀的不同是SPEC中的bzip2除了输⼊外,⽆⽂件I/O。所有的压缩和解压都在内存中进⾏。输⼊,输出都和gzip的相似。负载包括六个部分:两个⼩的JPEG图⽚、⼀个程序、⼀个tar包起的⼏个源程序⽂件、⼀个HTML⽂件、混合⽂件,包括压缩起来的⾼可压缩⽂件及不怎么可压缩的⽂件。测试分别使⽤了三个不同的压缩等级进⾏压缩和解压缩
<:C语⾔实现,同spec2000的类似。该测试是基于gcc V3.2,为AMDCPU⽣成机器码。相⽐spec2000的,该测试有更多的输⼊⽂件,因此测试压⼒会更⼤,负载来源于对9组C代码进⾏编译。
456.hmmer:C语⾔实现。HMMER是基于隐马尔可夫模型(profile HMMs),⽤于⽣物序列分析⼯作。同Timed HMMer Search 类似。
458.sjeng:C语⾔实现。基于⼀种象棋游戏Sjeng11.2,属于⼈⼯智能的范畴。
462.libquantum:C语⾔实现(C99)。libquantum是模拟量⼦计算机的库⽂件,⽤来进⾏量⼦计算机应⽤的研究。
464.h264ref:C语⾔实现。⼀种视频压缩程序,基于H264AVC 9.3版,去除了I/O和平台相关的东西。
473 astar:C++语⾔实现,实现了2D寻路算法A*的三种不同版本。
Spec fp2006 17个浮点测试项⽬
410.bwaves:Fortran 77语⾔实现,流体⼒学范畴。对三维瞬跨⾳速粘性流中冲击波的模拟计算
416.gamess:Fortran语⾔实现,量⼦化学范畴。采⽤GMAESS组件,包含 胞嘧啶分⼦、⽔和Cu2+离⼦、三唑离⼦等3种SCF⾃洽场计算。
433.milc:C语⾔实现,量⼦⼒学范畴,采⽤MILC组件,包含⽤来研究QCD量⼦⾊动⼒学、夸克及胶⼦的四维SU(3)格点规范理论的模。
436.cactusADM:Fortran 90, ANSI C语⾔实现,物理中的⼴义相对论。来源于Cactus  BenchADM。436.cactusADM对时空曲率由内部物质决定的爱因斯坦演化⽅程进⾏求解,爱因斯坦演化⽅程由10个标准ADM 3+1分解的⼆阶⾮线性偏微分⽅程组成。
437.leslie3d :Fortran 90语⾔实现,属于流体⼒学范畴。 LESlie3d是⽤来计算湍流的计算流体⼒学程序,437.leslie3d计算了⼀个如燃油注⼊燃烧室的时间分层混合流体。
444.namd:C++语⾔实现。属于⽣物/分⼦学范畴。NAMD是⼀个⼤型⽣物分⼦系统并⾏计算程序,444.namd模拟了了92224个原⼦组成的A-I载脂蛋⽩
447.dealII:C++语⾔实现。进⾏有限元分析,w/Boost lib 、deal.II lib、deal.II是定位于⾃适应有限元及误差估计的C++库,447.dealII 对⾮常系数的亥姆霍兹⽅程进⾏求解,它使⽤了基于⼆元加权误差估计⽣成最佳⽹格的⾃适应⽅法,该⽅程在3维得解。
450.soplex:C++语⾔实现。采⽤Plex v1.2.1程序,Plex使⽤单纯形算法解线性⽅程

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。