构建

SPEC,全称 Standard Performance Evaluation Corporation 。SPEC CPU 不是免费的,所以需要自己找资源下载。

因为 bencmark 使用的是 C, PerlFortran ,并且使用了 bzip ,所以需要使用如下命令安装相关依赖:

apt install -y {gcc,g++,gfortran}-4.9

我在安装完 gfortran 后,发现 SPEC CPU 使用的是 f90 ,但是我并没有,所以我用如下命令将 f90 链接到 gfortran

sudo ln -s /usr/bin/gfortran /usr/local/bin/f90

按理说我们可以直接使用如下命令进行安装,也就是将现成的二进制文件拷贝到指定路径:

./install.sh

但是对于很多架构而言,是没有构建好的二进制文件的,需要自行构建,也就是执行如下命令:

./tools/src/buildtools

构建完之后似乎不需要再安装了。

运行

在运行前需要先配置环境变量

source ./shrc

SPEC CPU 由多个 benchmark 组成,你可以使用如下命令来执行名为 bzip2 的 benchmark

runspec bzip2

当然也可以用如下命令来跑全部的 intfloat 和所有测试:

runspec int
runspec fp
runspec all

配置

而实际上, runspec 有多个命令选项,它们都可以使用 --help 参数查看,其中比较重要的有:

短选项长选项说明
-c–config或 –conf
-a–action参数 run 代表运行,常用参数还有 build 等
-i–size表示数据集大小,数据集共有三种:test、train、ref
-n–iterations表示每个 benchmark 的运行次数
output_format输出文件的格式,选项有:txt, html, cfg, pdf, csv

这些选项又都可以写到配置文件中,对于单个样例,有配置文件:

# run one iteration
iterations = 1
# skip peak
basepeak = yes
# show live output
teeout = yes

对于全部样例,有配置文件:

# match spec result standard
reportable = yes
# skip peak
basepeak = yes
# show live output
teeout = yes

此外,因为 SPEC CPU 已经是 2006 年的老东西了,所以需要进行一些兼容性的设置,总结如下:

# optimization flags for base
default=base=default=default:
COPTIMIZE = -O2 -fgnu89-inline -fcommon
CXXOPTIMIZE = -O2 -fpermissive --std=c++98
FOPTIMIZE = -O2 -std=legacy
 
# specify compilers
default=default=default=default:
CC = /usr/bin/gcc
CXX = /usr/bin/g++
FC = /usr/bin/gfortran
 
# fix compilation
int=default=default=default:
PORTABILITY = -DSPEC_CPU_LP64
 
400.perlbench=default=default=default:
CPORTABILITY = -DSPEC_CPU_LINUX_X64
 
462.libquantum=default=default=default:
CPORTABILITY = -DSPEC_CPU_LINUX
 
483.xalancbmk=default=default=default:
CXXPORTABILITY = -DSPEC_CPU_LINUX
 
481.wrf=default=default=default:
CPORTABILITY = -DSPEC_CPU_CASE_FLAG -DSPEC_CPU_LINUX

这套解决方案适用于 X86 (不过似乎 A64 也用得挺好),更加具体的原因,可以参考 这里

样例

SPEC CPU2006 样例如图:

浮点数样例如图:

指标

SPEC CPU 的核心指标是 Ratio ,SPEC CPU 会提供一个参考时间(Ref),Benchmark 会测试出一个实际运行时间(Run Time),前者与后者的比值就是 Ratio ,Ratio 越高越好。

SPEC CPU 有两种测试:

  • Base: 基准测试的基本配置,使用严格的编译器优化选项,确保结果的可重复性和可比性。
  • Peak: 允许使用更激进的优化选项,通常能更好地展示系统的最佳性能。