SPEC是标准性能评估公司(Standard Performance Evaluation Corporation)的简称。SPEC是由计算机厂商、系统集成商、大学、研究机构、咨询等多家公司组成的非营利性组织,这个组织的目标是建立、维护一套用于评估计算机系统的标准。SPEC CPU测试中,测试系统的处理器、内存子系统和使用到的编译器(SPEC CPU提供的是源代码,并且允许测试用户进行一定的编译优化)都会影响最终的测试性能,而I/O(磁盘)、网络、操作系统和图形子系统对于SPEC CPU2006的影响非常的小。–以上来自百度百科
本文以arm64(aarch64)用例验证平台为例说明使用speccpu2017进行cpu验证时的过程和遇到的问题,PC机环境使用ubuntu16.04
百度网盘链接:https://pan.baidu.com/s/1W3FL3EcevVOqA3L28Qxb1A
提取码:8aif
1、下载完以后的文件为: cpu2017-1.0.5.iso ;
2、mkdir 挂载目录 ;
3、mount cpu2017-1.0.5.iso 挂载目录
4、进行镜像到本机的源码拷贝
cd 挂载目录 ;
运行 ./install.sh 根据界面提示输入要把iso光盘镜像中的文件导入到ubuntu哪个目录中,输入自己创建的目录;
等待源码拷贝结束;
5、source shrc 使源码中一些命令行生效;
1、配置文件
在源码/config 目录下有一些芯片平台的推荐配置文件如下
Example-clang-llvm-linux-x86.cfg
Example-gcc-linux-aarch64.cfg
Example-gcc-linux-ppc64le.cfg
Example-gcc-linux-sparc64.cfg
Example-gcc-linux-x86.cfg
Example-gcc-macosx.cfg
Example-intel-compiler-linux-rate.cfg
Example-intel-compiler-linux-speed.cfg
Example-intel-compiler-windows-rate.cfg
Example-intel-compiler-windows-speed.cfg
Example-studio-solaris.cfg
Example-VisualStudio.cfg
Example-xl-linux-ppc64le.cfg
我们将Example-gcc-linux-aarch64.cfg 复制为gcc-linux-aarch64.cfg,修改其中的内容,由于我们是在PC机平台进行编译,在ARM64交叉平台进行验证,因此要对配置文件关于交叉工具链路径和编译时引用的工具链中的库路径进行配置修改;
原来的配置:
%ifndef %{gcc_dir}
% define gcc_dir /opt/rh/devtoolset-6/root/usr # EDIT (see above)
%endif
# EDIT if needed: the preENV line adds library directories to the runtime
# path. You can adjust it, or add lines for other environment variables.
# See: https://www.spec.org/cpu2017/Docs/config.html#preenv
# and: https://gcc.gnu.org/onlinedocs/gcc/Environment-Variables.html
preENV_LD_LIBRARY_PATH = %{gcc_dir}/lib64/:%{gcc_dir}/lib/:/lib64
#preENV_LD_LIBRARY_PATH = %{gcc_dir}/lib64/:%{gcc_dir}/lib/:/lib64:%{ENV_LD_LIBRARY_PATH}
SPECLANG = %{gcc_dir}/bin/
CC = $(SPECLANG)gcc -std=c99 %{model}
CXX = $(SPECLANG)g++ -std=c++03 %{model}
FC = $(SPECLANG)gfortran %{model}
# How to say "Show me your version, please"
CC_VERSION_OPTION = -v
CXX_VERSION_OPTION = -v
FC_VERSION_OPTION = -v
新的配置:
%ifndef %{gcc_dir}
% define gcc_dir /opt/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu # EDIT (see above)
%endif
# EDIT if needed: the preENV line adds library directories to the runtime
# path. You can adjust it, or add lines for other environment variables.
# See: https://www.spec.org/cpu2017/Docs/config.html#preenv
# and: https://gcc.gnu.org/onlinedocs/gcc/Environment-Variables.html
//preENV_LD_LIBRARY_PATH = %{gcc_dir}/lib64/:%{gcc_dir}/lib/:/lib64
preENV_LD_LIBRARY_PATH = %{gcc_dir}/lib/:%{gcc_dir}/libexec/:%{gcc_dir}/aarch64-linux-gnu/lib64:/lib64
#preENV_LD_LIBRARY_PATH = %{gcc_dir}/lib64/:%{gcc_dir}/lib/:/lib64:%{ENV_LD_LIBRARY_PATH}
SPECLANG = %{gcc_dir}/bin/aarch64-linux-gnu-
CC = $(SPECLANG)gcc -std=c99 %{model}
CXX = $(SPECLANG)g++ -std=c++03 %{model}
FC = $(SPECLANG)gfortran %{model}
# How to say "Show me your version, please"
CC_VERSION_OPTION = -v
CXX_VERSION_OPTION = -v
FC_VERSION_OPTION = -v
1、用例概况
源码/benchspec/CPU/下面有许多整形、浮点型的用例
2、单独编译某个用例不进行测试,用于验证用例能不能编译过,此操作在PC上
runcpu --config gcc-linux-aarch64.cfg 510.parest_r --action=setup -i ref -threads=8 -n 3 --tune=all -I --noreportable
3、所有用例编译不进行测试,编译完全部用例比较耗时,一般情况下所有用例一次性编译过的情况不太可能,可以结合以上2步骤将3中不通过的用例单独编译,此操作在PC上
runcpu --config gcc-linux-aarch64.cfg --action=setup -i ref -threads=8 -n 3 --tune=all -I --noreportable
1、经过五中对测试用例的编译后,将源码在ubuntu等环境中将编译后的源码整体通过tar zcvf 将源码和其中编译后的用例打包,并拷贝到嵌入式板卡环境中,由于整体解压后大概有10G,尽量将包拷贝到有20GB左右的嵌入式板卡存储分区中;
拷贝之后进行解压,随后再次执行./install.sh 进行在嵌入式环境下的安装;
2、单独测试某个用例,由于已经在PC进行了编译在嵌入式环境下只需进行
runcpu --config gcc-linux-aarch64.cfg 500.perlbench_r -i ref -threads=8 -n 1 --tune=all -I --noreportable --nobuild
运行多个用例同理,将用例名字填入即可
3、运行全部用例一遍,此操作在嵌入式环境中,-n参数表示测试几遍,可以通过runcpu --help查看参数含义
runcpu --config gcc-linux-aarch64.cfg -i ref -threads=8 -n 1 --tune=all -I --reportable --nobuild
结果在源码/result/目录下 CPU2017.XXX前缀相同的为本次一起进行测试的用例的日志和结果
1、cpuname获取问题,显示如下
Use of uninitialized value $cpuname[0] in pattern match (m//) at
此问题为调用源码/bin下的sysinfo脚本报出的,内部有各种平台的sysinfo_xxx函数调用,查看cpuname获取的文件在嵌入式板卡中是否存在,不存在的话修改此脚本再运行
2、dmidecode挂死问题
log 0 ...trying to get DIMM info from dmidecode
运行到上述打印挂死,在板卡中单独运行此命令看是否挂死,如果挂死将此段在sysinfo脚本中的调用屏蔽,屏蔽后发现还会出现报错如下,
Part of the tools (/log/spec2017-aarch64/bin/sysinfo) is corrupt!
Aborting...
通过grep -rn Part\ of\ the\ tools ./发下此报错在 源码bin/common/setup_common.pl中将exit 1此处注释再次运行,即可;
3、修改以上脚本后,不需要再次执行 ./install.sh 否则无法运行
4、其它问题,待发现总结;