Shr*_*jan 1 hardware cpu-architecture processors
我研究了一下,发现了 Intel pentium pro、AMD K7、IBM Power PC,但这些都已经很老了。我无法找到有关使用这些机制进行动态调度的当前处理器的任何信息
每个现代 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/但昂纳的microarch指南更侧重于如何优化它,如该寄存器重命名不是现代 CPU 的瓶颈:重命名宽度匹配问题宽度,并且同一寄存器可以在 4 条指令的问题组中重命名 4 次。
管理 RAT 的进步包括 Nehalem 引入了分支未命中的快速恢复:对分支上的 RAT 进行快照,以便您在检测到分支未命中时可以恢复到那里,而不是在开始恢复之前耗尽较早的未执行的 uops。
还有 mov-elimination 和 xor-zeroing 消除:它们在寄存器重命名时处理,而不需要后端 uop 来写入寄存器。(对于异或归零,大概有一个物理零寄存器和归零习语将架构寄存器指向该物理零。 在 x86 程序集中将寄存器设置为零的最佳方法是什么:xor、mov 或 and?以及x86 的 MOV 真的可以吗?是“免费的”?为什么我完全不能重现这个?)
如果你打算做 OoO exec,你不妨全力以赴,所以AFAIK 没有现代只是记分板而不是寄存器重命名。(记分板加载的有序内核除外,因此缓存未命中延迟不会停止,直到后面的指令实际读取加载的目标寄存器。)
仍然有顺序执行核心不做任何事情,将指令调度/软件流水线留给编译器/人类。又名静态调度。这并不罕见;广泛使用的廉价智能手机芯片使用 ARM Cortex-A53 等内核。大多数程序都存在内存瓶颈,您可以在有序内核中允许一些内存级并行,尤其是存储缓冲区。
有时每次计算的能量比性能更重要。