关于spec2017的困惑

问题描述

最近我正在学习缓存预取。想用spec2017测试之前的预取策​​略,学习spec2017中指令序列的提取方法。我在官网浏览了spec2017的介绍,按照教程安装运行成功。但我还有一些问题?

  1. 首先,我将 config 文件夹中的 Example-gcc-linux-x86.cfg 复制为 Example-gcc-linux-x86-test.cfg。并修改gcc path等,当我使用这个配置文件编译运行spec2017时,出现了很多Example-gcc-linux-x86-test.cfg.2021-06-16T113335Example-gcc-linux- in the config folder x86-test.cfg.2021-06-17T145932Example-gcc-linux-x86-test.cfg.2021-06-17T150445等,他们占据了配置文件夹。这些文件是临时文件,可以删除吗?

  2. 我使用的服务器是 x86_64 GNU/Linux 模型。所以我认为我编译的spec2017是x86。如果我想编译成risc-v,我是否只需要将.cfg文件中的gcc路径指向我的risc-v工具链中的gcc?

  3. 第三点我不明白的是如何设置副本数和线程数。运行 SPECrate 时,我需要设置份数。对于 Specspeed,我需要设置线程数。 copies 可能设置为 cpu 的核心数,线程呢?这个设置会影响最终评估的结果吗?如果是,那么如果每个人都用不同的数字,如何比较?

  4. 我打算用模拟器来运行spec2017,比如gem5。我发现了很多运行时参数。例如,对于 500.perlbench r / 600.perlbench s,在 ref size 的情况下,下图显示了给出的三个输入。这三个输入代表什么?我应该选择哪一个

  5. 使用gem5运行spec2017时,是否需要设置cpu频率或者Cache相关信息?

  6. 我正在做一些预取实验。我应该如何从spec2017中提取相应的trace?这个spec2017是否提供相关支持

可能有很多问题。但如果有人愿意回答我,我将不胜感激! 谢谢!

enter image description here

解决方法

  1. 是的,可以删除这些文件。
  2. 是的,用您的 RV 工具链替换它们。
  3. 线程呢?用户可以进行微调以找到他们系统中更好的“线程”。为什么没有推荐的线程数?因为 SPECSpeed 使用 OpenMP 进行通信,并且不同机器之间的通信成本不同。 SPECSpeed 反映了机器的可扩展性和编译器的自动并行化能力。
  4. 我想你可以通过谷歌找到答案。简而言之,为了检查正确性,我们通常使用测试输入。对于论文中的报告结果,我们通常使用 ref 输入。原则上,所有这些输入都应该运行。因为如果你阅读计算SPEC分数的公式,你会发现reftime是所有输入的执行时间之和。
  5. 如果您正在为真实世界机器的特定 u-arch 建模,您可以通过 march 将相关信息传递给 gcc 或 icc 以获得更好的性能。如果没有,您需要将 uarch 信息传递给 SPEC 或编译器。
  6. 没有。 SPECCPU 2017 没有考虑到这一点。我建议您阅读一些论文,例如 SimPoints 和 SMARTS。