测试指标
| 测试类型 | 评估目标 | 并行规则 | 适用场景 |
|---|---|---|---|
| SPECspeed | 单任务完成时间(时间越短越好) | 允许OpenMP或编译器自动并行优化(如 -fopenmp) |
单核性能、高频敏感型应用(游戏/实时计算) |
| SPECrate | 单位时间完成任务量(值越高越好) | 禁止任何并行优化,仅通过多副本(Copies)实现多核负载 | 服务器/工作站多核吞吐能力 |
| 测试类型 | 得分计算逻辑 | 得分意义 | 是否越大越好 |
|---|---|---|---|
| SPECspeed | 参考时间 / 实测时间 | 单任务完成效率(时间越短得分越高) | ✅ 是 |
| SPECrate | 任务量 × 副本数 / 实测时间 | 多核吞吐能力(单位时间处理量) | ✅ 是 |
测试模式
| 维度 | base(基准模式) | peak(峰值模式) |
|---|---|---|
| 优化强度 | 标准优化,禁用硬件/编译器私有扩展 | 激进优化,允许厂商定制指令集(如AVX-512) |
| 编译规则 | 严格统一:同语言测试需完全相同的编译选项与顺序 | 灵活定制:可为每个测试单独优化编译参数 |
| 验证要求 | 必须通过结果验证(否则成绩无效) | 允许部分测试未通过验证 |
| 报告优先级 | 官方认证必备(如SPECint_base2017) | 可选补充(如SPECint2017) |
关键区别([网页1][网页3][网页4]):
-
base 确保跨平台公平对比,代表通用性能水平;
-
peak 挖掘硬件极限性能,但可能牺牲兼容性(如依赖特定编译器版本)。
安装方法
tar -xvf cpu2017.tar.gz cd cpu2017 ./install.sh -d /opt/cpu2017 # 指定安装目录
工具版本:
speccpu2017-1.1.5
测试脚本
n_cpu=$(nproc)
basedir=${1:-/opt/speccpu2017}
iterations=${2:-1}
rate=${3:-"intrate fprate"}
speed=${4:-""}
peak=${5:-"false"}
arch=$(uname -m)
[ "$arch" == "x86_64" ] && arch=x86
c_f=$basedir/config/ctyunos-gcc-linux-${arch}.cfg
# Cleanup and copy configuration file
[ -f $c_f ] && rm -rf $c_f
cp $basedir/config/Example-gcc-linux-${arch}.cfg $c_f
# Modify configuration file
sed -i 's#^% define gcc_dir .*#% define gcc_dir "/usr"#g' $c_f
sed -i 's/^% define label .*/% define label "ctyunostest"/g' $c_f
if [ "$(gcc --version | head -n 1 | cut -d ' ' -f 3 | cut -d '.' -f 1)" -ge 10 ]; then
sed -i 's/^#%define GCCge10/%define GCCge10/g' $c_f
fi
# Source environment variables
cd $basedir
source $basedir/shrc
# Run SPEC CPU tests
if [ ! -z "$rate" ]; then
runcpu --config=ctyunos-gcc-linux-${arch}.cfg --tune=base --copies=$n_cpu --noreportable --iterations=$iterations $rate
if [ "$peak" == "true" ]; then
runcpu --config=ctyunos-gcc-linux-${arch}.cfg --tune=peak --copies=$n_cpu --noreportable --iterations=$iterations $rate
fi
fi
if [ ! -z "$speed" ]; then
runcpu --config=ctyunos-gcc-linux-${arch}.cfg --tune=base --threads=$n_cpu --noreportable --iterations=$iterations $speed >
fi
if [ "$peak" == "true" ]; then
runcpu --config=ctyunos-gcc-linux-${arch}.cfg --tune=peak --threads=$n_cpu --noreportable --iterations=$iterations $rate
fi
#result
grep -E "SPEC(speed|rate)\(R\)" $basedir/result/*.txt |grep -v "Not Run" |sed 's/Est.//g'|awk '{print $2,$3}'