如何模拟机器代码在特定的Intel / AMD架构上的执行方式?

时间:2013-12-16 12:49:24

标签: assembly x86-64 intel

假设我从一个特定的主流x86_64处理器架构的角度来编写,甚至只是阅读和理解一些汇编代码及其执行性能,例如, Intel Nehalem,AMD K10,Intel Haswell等。今天的处理器看起来非常复杂,包括标志停顿,无序执行,依赖链问题,能够并行处理不同操作码子集的不同执行端口等,没有两个架构以相同的方式运行代码。

我可以使用哪些模拟器/工具来模拟执行某些汇编代码,并查看对于某些目标架构,哪些行执行哪个时钟滴答导致执行端口的延迟,理想情况下解释为什么某些事情被延迟或重新排序?额外的好但不是必需的能够看到分支预测失败效果,L1 / L2 / L3缓存随时间变化,以及操作码依赖链。如果有一种方法可以触发cpu本身在某种分析模式下运行缓慢并实时报告这种事情也可以。我对英特尔和AMD平台特别感兴趣,但是对于那些我没想到的东西我觉得我对其他架构很感兴趣。

1 个答案:

答案 0 :(得分:3)

你正在寻找的是一个周期准确micro-architectural simulator,有很多,但大多数只提供现代uarch概念的一般实现(OOO,缓存系统,内存单元,分支预测器,预取等。)。还有许多其他architectural simulators,但其中一些甚至没有实现uarch或周期不准确(例如 - 功能模拟器,系统模拟器等)。

你不会看到这样的模拟器的原因是,即使在各种文档和优化指南中发布了大部分uarch功能和特性之后,英特尔和AMD仍然保留了大部分微架构实现的商业秘密,原因显而易见

基于MarssPTLSim可能是here的一个小例外,我认为这与AMD有关,并显示code analyzer与实际CPU保持同步。然而,AMD并没有承认它尽我所知是准确的。他们还有一个名为“SimNow”的新模拟器,我不太熟悉。

添加Bahbar推荐的Intels'Trace of CPU Instruction Reordering - 它可能很有用,虽然它不是真正运行代码的模拟器(更不用说提供运行时跟踪和统计信息收集功能),但它是一个静态分析工具,尝试估计给定代码段的依赖关系和运行时。

另请参阅此相关问题 - {{3}}