CPU计算性能speccpu2006的测试方法及工具下载
- 简介
- 测试原理
- 目录结构
- 测试方法
- 基准测试项解析
- 测试结果
- 常见问题FAQ
简介
SPEC CPU2006是SPEC组织推出的CPU子系统评估软件,重点测试系统的处理器、内存子系统和编译器。
SPEC CPU2006包括了CINT2006和CFP2006两个子项目,前者用于测量和对比整数性能、包含12个不同的基准测试,而后者则用于测量和对比浮点性能、包含17个不同的基准测试。
SPEC CPU2006测试中,测试系统的处理器、内存子系统和使用到的编译器(SPEC CPU2006提供的是源代码,并且允许测试用户进行一定的编译优化)都会影响最终的测试性能,而I/O(磁盘)、网络、操作系统和图形子系统对于SPEC CPU2006的影响非常的小。
speccpu2006-v1.0.1百度网盘下载地址:
链接:https://pan.baidu.com/s/1R-RCA3ZKSnpbyXgqEl7bSw?pwd=a3h8
提取码:a3h8
测试原理
Spec2006测试模式分为rate测试和speed测试两项,其中rate测试主要衡量系统的多并发运算处理性能即平常我们所说的多线,speed测试主要衡量系统的单任务处理性能即平常我们所说的单线。
12项整数运算和17项浮点运算会在1.5章节中详细说明,除此之外,还有两个随机数产生测试程序998.sperand(整数)和999.specrand(浮点),它们虽然也包含在套件中并得到运行,但是它们并不进行计时以获得得分。这两个测试主要是用来验证一些其他组件中会用到的PRNG随机数生成功能的正确性。
各个测试组件基本上都由C和Fortran语言编写,有7个测试项目使用了C++语言,而Fortran语言均用来编写浮点部分。
目录结构
源目录结构中每个文件/文件夹用途如下表:
文件/文件夹 | 用途 |
---|---|
Benchspec | 用于存放基准项测试代码、编译文件、运行文件、记录等 |
Bin | 用于存放可执行文件,如specperl、runspec等 |
Config | 用于存放配置文件 |
Docs | 用于存放html格式文档 |
Docs.txt | 用于存放txt格式文档 |
redistributable_sources | 可再发行文件夹,包含归档文件、原始资源、SPEC修改的内容等 |
Result | 用于存放测试结果 |
Tools | 用于存放默认工具,安装时会编译安装tools中内容 |
Cshrc | 设置SPEC CPU2006环境变量 |
install.bat | 安装SPEC CPU2006,或生成二进制文件 |
install.sh | 安装SPEC CPU2006完整的基准树,或生成二进制文件 |
LICENSE | SPEC CPU2006基准产品的许可协议 |
LICENSE.txt | SPEC CPU2006基准产品的许可协议 |
MANIFEST | SPEC CPU2006的文件清单 |
README | SPEC CPU2006的自述文件 |
README.txt | SPEC CPU2006的自述文件 |
Revisions | 版本更变说明文件 |
Shrc | 设置SPEC CPU2006环境变量 |
shrc.bat | 设置SPEC CPU2006环境变量 |
SUMS.tools | SPEC CPU2006的bin文件夹的文件清单 |
uninstall.sh | 卸载SPEC CPU2006工具二进制文件 |
version.txt | 记录工具版本信息 |
测试方法
前置条件:保证机器物理内存大于或等于cpu核数的2倍(如CPU核数4,内存要大于等于8G)。
1.打开终端,安装依赖包:
apt-get install gcc g++ gfortran libbz2-dev
2.解压缩speccpu2006测试工具包,并附执行权限:
tar xvf speccpu2006-v1.0.1-newest.tar -C /home > /dev/null
chmod -R a+x /home/speccpu2006-v1.0.1
3.编辑 tools/src/buildtools 文件(311行和312行)
注释该行
export LD_LIBRARY_PATH DYLD_LIBRARY_PATH
在./Configure行前加一行
export PERLFLAGS="-A libs=-lm -A libs=-ldl"
4.修改$SPECCCPU/tools/src/make-3.8.0/glob/glob.c文件,
在209行“#if !defined __alloca && !defined GNU_LIBRARY”和230行“#endif”前添加“//”注释掉。
5.安装speccpu2006:
./install.sh
在弹出的提示信息中,选择yes,后回车
6.加载环境变量:
. ./shrc (注意这里是:.空格./shrc)
7.检查SPEC CPU2006是否安装成功
runspec -V
8.选择相应配置文件进行测试:
arm平台:
runspec -c arm64.cfg -n 1 -r 1 all(单线程)
runspec -c arm64.cfg -n 1 -r N all(多线程)
x86_64平台:
runspec -c x86.cfg -n 1 -r 1 all(单线程)
runspec -c x86.cfg -n 1 -r N all(多线程)
mips平台:
runspec -c mips64.cfg -n 1 -r 1 all(单线程)
runspec -c mips64.cfg -n 1 -r N all(多线程)
参数说明:
-n 指定测试轮数(3轮测试的话测试完成后会自动算出Base Ratio的几何平均数(几何平均数与算数平均值不同,几何平均数是对各变量值的连乘积开项数次方根),3轮以下则不显示该分数,需要手动算分; 手动算几何平均数方法:可在EXCEL表格中执行函数 =GEOMEAN(G8:G24));
-r N,设置cpu核数,N和CPU核数一致,根据台式机或服务器的核数去指定多线程N的值;
all代表浮点和整型参数都测试。
基准测试项解析
整型测试
浮点测试
测试结果
查看测试结果:
①测试结果会在测试时打印在终端输出当中,可在终端中看到结果分数;或在SPECCPU/result目录中查看测试结果文件。
②执行整数测试时,会在SPECCPU/result目录中生成以下五个文件:
“CINT2006.xxx.flags.html”
“CINT2006.xxx.pdf”
“CINT2006.xxx.rsf”
“CINT2006.xxx.txt”
“CPU2006.xxx.log”
③执行浮点测试时,会在SPECCPU/result目录中生成以下五个文件:
“CFP2006.xxx.flags.html”
“CFP2006.xxx.pdf”
“CFP2006.xxx.rsf”
“CFP2006.xxx.txt”
“CPU2006.xxx.log”
其中:
flags.html文件中间存放了本次测试中每个测试项使用的所有Flags信息;
pdf文件为最常用的结果文件,其中包含了结果的柱状图、Hardware信息、Software信息、结果的数据表、General Notes、Flags等多种信息;
rsf文件为SPEC CPU2006是原始结果文件,可通过该文件重新生成其他结果文件;
txt文件内容和pdf文件类似,区别是txt为纯文本结果文件。
示例:
单线程测试结果如下图所示:
本次测试单线程整型值为:14.2
浮点型为:13.5
多线程测试结果如下图所示:
本次测试多线程整型值为:45
浮点型为:42.6
结果判断标准:
测试项 | 建议值 |
---|---|
单线整型 | 桌面:8.8以上;服务器:11以上 |
单线浮点 | 桌面:8.3以上;服务器:9.6以上 |
多线整型 | 与CPU核心数相关。桌面可参考如下公式:多线整型分数 >= 单线整型分数 × CPU核心数 × 3/4 |
多线浮点 | 与CPU核心数相关。桌面可参考如下公式:多线浮点分数 >= 单线浮点分数 × CPU核心数 × 3/4 |
调优方案:
SPEC CPU2006测试中,测试系统的处理器、内存子系统和使用到的编译器(SPEC CPU2006提供的是源代码,并且允许测试用户进行一定的编译优化)都会影响最终的测试性能,而I/O(磁盘)、网络、操作系统和图 形子系统对于SPEC CPU2006的影响非常的小。
根据上述描述,影响因素包含CPU、内存、编译器。通常的优化方案包含:
1 更换性能更强劲的CPU
2 插满内存条
3 更换内存类型,如DDR3换成DDR4
4 更新性能更佳的内核版本
5 编译器:升级gcc、g++、gfortran
6 编译器使用的库:升级libc、libm、libdl、ld、libcrypt库版本
7 编译器的编译选项:选用合适的编译参数可起到优化作用,比如-O3、-ffast-math、-funroll-loops、-fprefetch-loop-arrays等。
8.编译器选择:选择优化更好的编译器,如icc、icpc、ifort等。
常见问题FAQ
1、问题一:
问题描述:SPEC CPU2006在make阶段出现报错“glob/glob.c:xxx: undefined reference to __alooca
”
解决办法:修改$SPECCCPU/tools/src/make-3.8.0/glob/glob.c文件,在209行“#if !defined __alloca && !defined GNU_LIBRARY”和230行“#endif”前添加“//”注释掉。
2、问题二:
问题描述:运行SPEC CPU2006浮点测试,416.gamess测试项无结果,报错“IEEE_UNDERFLOW_FLAG”
解决办法:修改cfg文件中416.gamess编译参数中为“FOPTIMIZE=-O3 -march=native -fno-tree-dominator-opts -std=legacy -funroll-loops -ffast-math -fwhole-program -flto=jobserver -fuse-linker-plugin -fno-aggressive-loop-optimizations”
3、问题三:
问题描述:龙芯架构机器运行SPEC CPU2006报错“/bin/ld: cannot find lm、/bin/ld: cannot find lc、/bin/ld: cannot find lgfortran”
解决办法:1) 安装glibc-static和gfortran
2)创建libgfortran软链接:$ ln -s /usr/lib64/libgfortran.so.3 /usr/lib64/libgfortran.so
4、问题四:
问题描述:SPEC CPU2006执行runspec时报“Can’t locate strict.pm”
解决办法:加载SPEC CPU2006的环境变量,执行:$ source shrc
5、问题五:
问题描述:执行时报“/usr/bin/ld:cannot find -lstdc++”
解决办法:安装glibc-static和libstdc+±static包
6、问题六:
问题描述:执行了xxxx86架构上416、447、450项报错无结果
解决办法:
1、修改源文件ecp.F中的ZFNLM(121)为ZFNLM(125)
2、修改源文件nameio.F中的X(10)为X(1)
3、修改源文件qfmm.F中的COEFF(1,2))为COEFF(1,1))
4、修改x86.cfg文件中的416项编译参数,125行修改为FOPTIMIZE=-O3 -march=native -fno-tree-dominator-opts -std=legacy -funroll-loops -ffast-math -fwhole-program -flto=jobserver -fuse-linker-plugin -fno-aggressive-loop-optimizations
5、修改源文件parameter_handler.cc中的763和777行第一个单引号为双引号
6、修改源文件mpsinput.cc第75行,==0去掉,m_input前加!
7、重新运行这几项:runspec -c x86.cfg -n 1 416.gamess
runspec -c x86.cfg -n 1 447.dealII
runspec -c x86.cfg -n 1 450.soplex
7、问题七:
问题描述:SPEC CPU2006执行install.sh时,报perl相关错误
解决办法:原因为perl编译过程未引入数学库,需要修改$SPECCPU2006/tools/src/buildtools文件中关于perl编译部分的./configure命令行上面加入export PERLFLAGS=“-A libs=-lm -A libs=-ldl”
8、问题八:
问题描述:执行SPEC CPU2006后,有几率不会将运行文件删掉,这会导致占用大量磁盘空间,对于磁盘空间较少的系统很多服务起不来(比如图形起不来)。
解决办法:执行:$ rm -rf $SPECCPU/benchspec/CPU2006//run/run
9、问题九:
问题描述:运行SPEC CPU2006测试483.xalancbmk无结果,报错“copy #0 non-zero return code”
解决办法:安装SPEC CPU2006在英文目录下,重新运行此项:$ runspec -c arm64.cfg -n 1 483.xalancbmk
10、问题十:
问题描述:运行SPEC CPU2006时,464.h264f测试项死循环长时间卡住
解决办法:在cfg文件中464.h264ref项的编译选项处添加“-fno-aggressive-loop-optimizations”
11、问题十一:
问题描述:执行SPEC CPU2006运行报“Error Comparing……”类似错误
解决办法:使硬件环境达到SPEC CPU2006的要求:
1) 内存 > CPU核心数 × 2
2) 磁盘剩余空间 > CPU核心数 × 3