问题描述
最近我正在学习缓存预取。想用spec2017测试之前的预取策略,学习spec2017中指令序列的提取方法。我在官网浏览了spec2017的介绍,按照教程安装运行成功。但我还有一些问题?
-
首先,我将 config 文件夹中的
Example-gcc-linux-x86.cfg
复制为Example-gcc-linux-x86-test.cfg
。并修改了gcc path
等,当我使用这个配置文件编译运行spec2017时,出现了很多Example-gcc-linux-x86-test.cfg.2021-06-16T113335
、Example-gcc-linux- in the config folder x86-test.cfg.2021-06-17T145932
、Example-gcc-linux-x86-test.cfg.2021-06-17T150445
等,他们占据了配置文件夹。这些文件是临时文件,可以删除吗? -
我使用的服务器是 x86_64 GNU/Linux 模型。所以我认为我编译的spec2017是
x86
。如果我想编译成risc-v
,我是否只需要将.cfg文件中的gcc
路径指向我的risc-v工具链中的gcc? -
第三点我不明白的是如何设置副本数和线程数。运行 SPECrate 时,我需要设置份数。对于 Specspeed,我需要设置线程数。
copies
可能设置为 cpu 的核心数,线程呢?这个设置会影响最终评估的结果吗?如果是,那么如果每个人都用不同的数字,如何比较? -
我打算用模拟器来运行spec2017,比如gem5。我发现了很多运行时参数。例如,对于 500.perlbench r / 600.perlbench s,在 ref size 的情况下,下图显示了给出的三个输入。这三个输入代表什么?我应该选择哪一个?
-
使用gem5运行spec2017时,是否需要设置cpu频率或者Cache相关信息?
可能有很多问题。但如果有人愿意回答我,我将不胜感激! 谢谢!
解决方法
- 是的,可以删除这些文件。
- 是的,用您的 RV 工具链替换它们。
- 线程呢?用户可以进行微调以找到他们系统中更好的“线程”。为什么没有推荐的线程数?因为 SPECSpeed 使用 OpenMP 进行通信,并且不同机器之间的通信成本不同。 SPECSpeed 反映了机器的可扩展性和编译器的自动并行化能力。
- 我想你可以通过谷歌找到答案。简而言之,为了检查正确性,我们通常使用测试输入。对于论文中的报告结果,我们通常使用 ref 输入。原则上,所有这些输入都应该运行。因为如果你阅读计算SPEC分数的公式,你会发现
reftime
是所有输入的执行时间之和。 - 如果您正在为真实世界机器的特定 u-arch 建模,您可以通过
march
将相关信息传递给 gcc 或 icc 以获得更好的性能。如果没有,您需要将 uarch 信息传递给 SPEC 或编译器。 - 没有。 SPECCPU 2017 没有考虑到这一点。我建议您阅读一些论文,例如 SimPoints 和 SMARTS。