9

我想知道 Intel i7 处理器的分支预测是如何工作的?

目前,我知道称为“动态分支预测”的预测器。

对于 1 位预测器:硬件总是预测分支指令采用与上次执行时相同的方向。

在实践中效果更好的改进版本是 2 位预测器。为了进一步提高预测精度,引入了2位预测方案。在这些方案中,预测必须有两次错误才会改变。

i7 是否具有与上述相同的预测器?

4

2 回答 2

9

我们对分支预测器的了解大部分来自测试。英特尔并没有公布太多细节。误预测损失约为 18 个时钟周期,因此准确的分支预测很重要。

英特尔使用两级分支预测器。内部级别被认为与 Core 2 CPU 相同。

外层更复杂,甚至可以正确预测固定计数高达 64 的循环。使用两个 18 位全局历史缓冲区。一个包含至少进行过一次的所有跳跃。另一个包含最重要的跳跃。(这些缓冲区中的条目数未知。)

请注意,间接跳转和调用有自己的预测器。

于 2012-06-30T06:44:50.227 回答
6

最简洁的答案是不。

我有理由确定没有英特尔 CPU 使用您描述的一位预测器。

最初的 Pentium 使用两位描述符,就像您描述的那样。它使用的四个值通常被描述为“强烈不采用”、“弱不采用”、“弱采用”和“强烈采用”。每当一个分支被采用时,计数器就会向“强烈采用”移动一个位置。每当一个分支不被采用时,它就会向“强烈不采用”移动一个位置。这是一个饱和计数器,因此如果(例如)在计数器已经处于“强烈占用”状态时采用分支,则计数器根本不会改变。[我应该补充一点:这就是英特尔记录它的方式,并且显然打算让它发挥作用——如果没有记错的话,Agner Fog 和 Terje Mathiesen 发现它的工作方式确实有点不同——而且,通常不如这样)。

从 Pentium/MMX 和 Pentium Pro 开始,他们设计了一个更复杂的两级分支预测器。它添加了一个 4 位分支历史记录,用于选择 16 个 2 位计数器之一。这意味着,如果您有(例如)采用、采用、未采用、采用、(然后重复)的模式,它将迅速适应该模式,并正确预测所有分支。

不确定i7 中分支预测的细节,但我认为可以肯定地说它至少与 Pentium Pro 一样复杂,而不是对原始 Pentium 的倒退。

于 2012-06-30T07:26:28.327 回答