SPEC2017编译配置咨询:选项设置、配置差异及运行命令正确性疑问
问题1:strict_rundir_verify = 0的作用
- SPEC2017默认开启运行目录严格校验,会检查运行目录的结构、权限、是否有上一次运行的残留文件,校验不通过会直接终止测试。
- 把这个参数设为0就是关闭严格校验,适合反复跑测试、手动修改过运行目录内容的调试场景,能避免不必要的报错。但要注意,正式提交SPEC官方认证分数时不能开启该配置,否则结果不符合官方规范,不被认可。
问题2:编译选项的正确性、结果可比性与论文披露问题
哪套编译选项正确
没有绝对正确的标准,完全取决于你的实验场景:
- 如果你需要和官方公开的SPEC分数、其他公开的基准结果对齐,优先参考对应基准使用的优化等级,绝大多数官方提交的base项用的是-O2配置。
- 如果你只做内部对照实验(比如只对比开启/关闭预取的性能差异),只要同一组实验内所有对照组的编译选项完全一致,用-O2或-O3都可以,只要你明确记录自己用的配置即可。
不同编译选项的结果可比性
不同编译选项得到的SPEC2017结果完全不具备横向可比性:
-O3相比-O2开启了更多激进优化,包括循环展开、额外函数内联、更激进的指令调度等,会直接改变程序的指令排布、cache访问特征、内存访问pattern,对预取实验的结果影响尤其大,二者的测试结果不能直接对比。
论文不披露编译规则的原因
常见原因有三点:
- 领域内有默认的通用配置,作者默认读者知晓,没有额外说明;
- 部分作者对SPEC2017的配置细节不熟悉,没有意识到编译选项对结果的影响,遗漏了披露;
- 部分测试使用了厂商提供的未公开优化配置,不适合对外披露细节。
问题3:运行命令的正确性与额外配置
首先你给出的命令存在笔误:最后的al应为all,否则无法正确识别测试集。
命令正确性判断
如果你的配置文件中已经提前配置好了副本数、线程数、测试集范围,这个命令本身可以运行,但针对预取实验有需要调整的地方:
--reportable参数会要求跑3次测试取中位数,且会同时跑base和peak两组测试,如果只是做内部预取实验不需要正式报告,可以去掉该参数,加上--iterations=1减少测试耗时。- 默认情况下runcpu会按照你机器的CPU核心数自动设置线程数、副本数,预取实验通常需要排除多核心/多线程的干扰,建议明确指定参数:
--copies=1 --threads=1,保证单副本单线程运行,避免多任务互相干扰cache和预取行为。 - 如果你不需要跑全量测试集,也可以把
all替换为intspeed(整数测试集)或fpspeed(浮点测试集),进一步减少测试耗时。
内容的提问来源于stack exchange,提问作者Gerrie
相关产品推荐
相关产品推荐

