首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >是否有确定性架构仿真器可用?

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

Stack Overflow用户
提问于 2018-06-05 11:17:46
回答 1查看 227关注 0票数 2

是否存在确定性(与每次运行的结果相同)的架构仿真器?它是测试编译器/解释器的基准测试。

我做不是指在任何模拟架构上运行程序的仿真器,而是根据对生成的代码的分析计算效率/速度索引的东西(例如,对于每条指令所用的时间来说,这个东西的值是确定的)。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-05 11:58:07

Intel的IACA是一个静态分析工具。What is IACA and how do I use it?。但它只适用于单个循环,不对缓存效果进行建模,只对管道进行建模。(我认为,它假设了近乎理想的OoO调度,因此可能没有发现ROB大小的限制,只有前端与执行端口相对于循环携带的依赖项延迟瓶颈)。另外,IACA在其成本模型中存在一些缺陷(例如,它对于micro-fusion of indexed addressing modes are wrong for Haswell的无分层规则)。

AFAIK,没有周期精确的x86模拟器公开提供任何现代微架构.我们只有仿真器,它们甚至不试图以与任何真正的硬件相同的速度运行,就像BOCHS和qemu那样尽可能快地运行。我相信英特尔和AMD有内部模拟器软件,以验证CPU设计和建模他们的性能,尽管。

您可能会为解释仿真器(如BOCHS )中的每条指令分配一个循环成本,并获得一个确定的数字,并可能对缓存进行建模(有缓存模拟器)。每次运行它都是一样的,但是它不符合任何实际硬件上的运行时间!

确定性对软件的调优是远远不够的。现代x86 CPU具有许多用于无序执行的微体系结构状态.我们通常可以非常接近地预测他们将如何运行一个循环(http://agner.org/optimize/,以及the x86 tag wiki中的其他性能链接),但是在更大的范围内,有很多事情只有供应商才知道,所以即使我们有时间,我们也无法编写一个真正准确的模拟器。像分支预测这样的事情是通俗易懂的,但细节还没有完全被逆向设计出来。但是,分支预测是一个关键的部分,使一个高度流水线的CPU在任何接近3到4个融合域(前端)uop在实际代码中的时钟。

如果您想要对一台多核计算机建模,那么事情就会变得更加复杂,而SMT / HT在共享一个内核的线程之间增加了许多复杂性。它在真正的硬件中几乎没有确定性,因为小的时间变化会导致不同的线程变得更不同步。

要真正有用,您可能希望能够在Sandybridge、Haswell、Skylake、Bulldozer、Ryzen和Silvermont上测试您的代码。也许不同类型的缓存数量不同,服务器和桌面的L3 /内存延迟也不同。(尽管聚合带宽更高,但许多核心服务器的内核延迟要严重得多,单线程带宽更低。)

因此,为“x86体系结构”提供确定性模拟器的整个想法是很奇怪的。你可以简单的给每条指令一个周期,但那是完全不现实的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50698770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档