今天是否有任何微处理器使用记分板或 Tomasulo 算法?
Do any microprocessors today use Scoreboarding or Tomasulo's algorithm?
我进行了一些研究,发现了有关 Intel pentium pro、AMD K7、IBM power PC 的信息,但这些都已经很老了。我找不到有关使用这些机制进行动态调度的当前处理器的任何信息
每个现代 OoO 执行官 CPU 都使用 Tomasulo 的寄存器重命名算法。在一种 SSA 依赖分析中重命名到更多物理寄存器的基本思想没有改变。
像 Skylake 这样的现代英特尔 CPU 自 Pentium Pro 以来已经有了一些改进(例如重命名到物理寄存器文件而不是将数据保存在 ROB 中),但是 PPro 和 P6 系列是桑迪布里奇家族。请参阅 https://www.realworldtech.com/sandy-bridge/ for some discussion of the first member of that new family. (And if you're curious about CPU internals, a much more in-depth look at it.) See also https://agner.org/optimize/,但 Agner 的微架构指南更侧重于如何针对它进行优化,例如寄存器重命名不是现代 CPUs 的瓶颈:重命名宽度与问题宽度匹配,并且同一寄存器可以在 4 条指令的问题组中重命名 4 次。
RAT 管理方面的进步包括 Nehalem 引入了针对分支未命中的快速恢复:在分支上对 RAT 进行快照,这样您就可以在检测到分支未命中时恢复到那里,而不是在开始恢复之前耗尽之前未执行的 uops。
还有 mov-elimination 和 xor-zeroing elimination:它们是在寄存器重命名时处理的,而不需要后端 uop 来写入寄存器。 (对于异或归零,大概有一个物理零寄存器和归零习语将体系结构寄存器指向该物理零。 and )
如果你打算完全执行 OoO exec,你不妨全力以赴,所以 AFAIK 没有现代的东西只是记分牌而不是寄存器重命名。 (记分板加载的有序内核除外,因此缓存未命中延迟不会停止,直到后面的指令实际读取加载的目标寄存器。)
仍然有顺序执行核心不做任何事情,将指令调度/软件流水线留给编译器/人类。又名静态调度。这并不罕见;广泛使用的廉价智能手机芯片使用 ARM Cortex-A53 等内核。大多数程序在内存上存在瓶颈,您可以在有序核心中允许一些内存级并行性,尤其是使用存储缓冲区。
有时每次计算的能量比性能更重要。
Tomasulo 的算法可以追溯到 1967 年。它非常古老,并且对其进行了多次修改和改进。此外,还开发了新的动态调度方法。
查看 http://adusan.blogspot.com.au/2010/11/differences-between-tomasulos-algorithm.html
同样,pure 记分板不再使用,至少在主流架构中不再使用,但其核心概念被用作现代动态调度技术的基本元素。
可以说,虽然它们不再原样使用,但它们的一些特性在现代动态调度和乱序执行技术中仍然保持着。
我进行了一些研究,发现了有关 Intel pentium pro、AMD K7、IBM power PC 的信息,但这些都已经很老了。我找不到有关使用这些机制进行动态调度的当前处理器的任何信息
每个现代 OoO 执行官 CPU 都使用 Tomasulo 的寄存器重命名算法。在一种 SSA 依赖分析中重命名到更多物理寄存器的基本思想没有改变。
像 Skylake 这样的现代英特尔 CPU 自 Pentium Pro 以来已经有了一些改进(例如重命名到物理寄存器文件而不是将数据保存在 ROB 中),但是 PPro 和 P6 系列是桑迪布里奇家族。请参阅 https://www.realworldtech.com/sandy-bridge/ for some discussion of the first member of that new family. (And if you're curious about CPU internals, a much more in-depth look at it.) See also https://agner.org/optimize/,但 Agner 的微架构指南更侧重于如何针对它进行优化,例如寄存器重命名不是现代 CPUs 的瓶颈:重命名宽度与问题宽度匹配,并且同一寄存器可以在 4 条指令的问题组中重命名 4 次。
RAT 管理方面的进步包括 Nehalem 引入了针对分支未命中的快速恢复:在分支上对 RAT 进行快照,这样您就可以在检测到分支未命中时恢复到那里,而不是在开始恢复之前耗尽之前未执行的 uops。
还有 mov-elimination 和 xor-zeroing elimination:它们是在寄存器重命名时处理的,而不需要后端 uop 来写入寄存器。 (对于异或归零,大概有一个物理零寄存器和归零习语将体系结构寄存器指向该物理零。
如果你打算完全执行 OoO exec,你不妨全力以赴,所以 AFAIK 没有现代的东西只是记分牌而不是寄存器重命名。 (记分板加载的有序内核除外,因此缓存未命中延迟不会停止,直到后面的指令实际读取加载的目标寄存器。)
仍然有顺序执行核心不做任何事情,将指令调度/软件流水线留给编译器/人类。又名静态调度。这并不罕见;广泛使用的廉价智能手机芯片使用 ARM Cortex-A53 等内核。大多数程序在内存上存在瓶颈,您可以在有序核心中允许一些内存级并行性,尤其是使用存储缓冲区。
有时每次计算的能量比性能更重要。
Tomasulo 的算法可以追溯到 1967 年。它非常古老,并且对其进行了多次修改和改进。此外,还开发了新的动态调度方法。 查看 http://adusan.blogspot.com.au/2010/11/differences-between-tomasulos-algorithm.html 同样,pure 记分板不再使用,至少在主流架构中不再使用,但其核心概念被用作现代动态调度技术的基本元素。 可以说,虽然它们不再原样使用,但它们的一些特性在现代动态调度和乱序执行技术中仍然保持着。