是否有可用的确定性架构仿真器?



是否存在确定性(每次运行结果相同(架构模拟器之类的东西?它是对测试编译器/解释器进行基准测试。

我指的不是简单地在任何模拟架构上运行程序模拟器,而是根据对生成的代码的分析来计算效率/速度指数的东西(例如,该事物对于每条指令所花费的时间具有确定性值(。

我可以在真实机器上计算基准统计数据,但确定性结果将消除机器的特殊性,并允许我看到小优化的效果。

英特尔的IACA是一个静态分析工具。 什么是IACA,我如何使用它? 但它仅适用于单个循环,并且不对缓存效果建模,只对管道进行建模。 (我认为,它假设近乎理想的 OoO 调度,因此可能找不到 ROB 大小限制,只有前端与执行端口与循环承载的依赖延迟瓶颈(。 此外,IACA在其成本模型中也存在一些错误(例如,索引寻址模式微融合的层压规则对于Haswell来说是错误的(。

AFAIK,没有公开的周期精确的x86模拟器可用于任何现代微架构。 我们只有模拟器,它们甚至不会尝试以与任何真实硬件相同的速度运行,就像BOCHS和qemu一样快。 不过,我确信英特尔和AMD内部有模拟器软件来验证CPU设计并对其性能进行建模。

您可能会为像BOCHS这样的解释模拟器中的每个指令分配一个周期成本,并获得一个确定性数字,并且还可以对缓存进行建模(有缓存模拟器(。 每次运行它时都是一样的,但它与任何真实硬件上的运行时间都不对应!

确定性远远不足以引起调优软件的兴趣。 现代 x86 CPU 具有许多用于无序执行的微架构状态。 我们通常可以非常接近地预测他们将如何运行循环(http://agner.org/optimize/,以及x86标签wiki中的其他性能链接(,但是在更大的范围内,有很多事情只有供应商知道,所以我们无法编写一个真正准确的模拟器即使我们有时间。 像分支预测这样的事情是众所周知的,但细节还没有被完全详细地逆向工程。 但是分支预测是使大量流水线 CPU 在实际代码中每时钟维持近 3 到 4 个融合域(前端(uops 的关键部分。

如果要对多核机器进行建模,事情会变得更加复杂,而SMT/HT在共享内核的线程之间增加了很多复杂性。 在实际硬件中,这几乎是不确定的,因为微小的时序变化会导致不同的线程越来越不同步。

为了真正有用,你希望能够在Sandybridge,Haswell,Skylake,Bulldozer,Ryzen和Silvermont上测试你的代码。 也许具有不同缓存量的不同变体,以及L3/内存延迟不同的服务器与桌面。 (众核服务器具有明显更差的非内核延迟,并且即使聚合带宽较高,单线程带宽也较低。

因此,"x86架构"的确定性模拟器的整个想法很奇怪。 你可以简单地给每条指令一个周期的成本,但这完全不现实。

相关内容

  • 没有找到相关文章

最新更新