2

我进行了一些研究,发现了有关 Intel pentium pro、AMD K7、IBM power PC 的信息,但这些都相当老了。我找不到有关使用这些机制进行动态调度的当前处理器的任何信息

4

2 回答 2

5

每个现代 OoO exec CPU 都使用 Tomasulo 算法进行寄存器重命名。在一种 SSA 依赖分析中重命名到更多物理寄存器的基本思想没有改变。

自 Pentium Pro 以来,像 Skylake 这样的现代 Intel CPU 已经发展了一些(例如,重命名为物理寄存器文件,而不是在 ROB 中保存数据),但 PPro 和 P6 系列是 Sandybridge 系列的直接祖先。请参阅https://www.realworldtech.com/sandy-bridge/了解有关该新家庭第一个成员的一些讨论。(如果您对 CPU 内部结构感到好奇,请深入地了解它。)另请参阅https://agner.org/optimize/但 Agner 的微架构指南更侧重于如何优化它,例如寄存器重命名不是现代 CPU 的瓶颈:重命名宽度与问题宽度匹配,并且同一寄存器可以在 4 条指令的问题组中重命名 4 次。

管理 RAT 方面的进步包括 Nehalem 引入了分支未命中的快速恢复:在分支上对 RAT 进行快照,以便您可以在检测到分支未命中时恢复到那里,而不是在开始恢复之前耗尽早期未执行的微指令。

还有 mov-elimination 和 xor-zeroing 消除:它们是在寄存器重命名时处理的,而不是需要后端 uop 来写入寄存器。(对于异或归零,大概有一个物理零寄存器和归零习惯用法将体系结构寄存器指向该物理零。 在 x86 程序集中将寄存器设置为零的最佳方法是什么:xor、mov 或 and? x86的 MOV 真的可以吗?是“免费”的?为什么我根本无法重现这个?


如果你打算做 OoO exec,你不妨全力以赴,所以AFAIK 没有什么现代的只是记分牌而不是注册重命名。(除了记分板加载的有序内核,因此缓存未命中延迟不会停止,直到后面的指令实际读取加载的目标寄存器。)

仍然有顺序执行内核不执行任何操作,将指令调度/软件流水线留给编译器/人类。又名静态调度。这并不罕见。广泛使用的廉价智能手机芯片使用 ARM Cortex-A53 等内核。大多数程序都存在内存瓶颈,您可以在有序内核中允许一些内存级别的并行性,尤其是使用存储缓冲区时。

有时,每次计算的能量比性能更重要。

于 2019-10-14T05:08:09.347 回答
0

Tomasulo 的算法可以追溯到 1967 年。它相当古老,已经对其进行了多次修改和改进。此外,还开发了新的动态调度方法。查看http://adusan.blogspot.com.au/2010/11/differences-between-tomasulos-algorithm.html 同样,不再使用记分板,至少不在主流架构中,但其核心概念被用作现代动态调度技术的基本元素。可以公平地说,尽管它们不再按原样使用,但它们的一些特性仍然保留在现代动态调度和乱序执行技术中。

于 2019-10-14T05:14:28.977 回答