关于i7的分支预测

时间:2012-06-30 06:25:29

标签: architecture branch cpu-architecture

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

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

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

在实践中更好地运行的精炼版本是2位预测器。为了 为了进一步提高预测精度,引入了2比特预测方案。 在这些方案中,预测在改变之前必须是错误的两次。

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

2 个答案:

答案 0 :(得分:9)

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

英特尔使用两级分支预测器。内部级别被认为与Core 2 CPU保持不变。

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

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

答案 1 :(得分:6)

简短的回答是否定的。

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

最初的奔腾使用了两位描述符,就像你描述的那样。它使用的四个值通常被描述为“强烈不采取”,“弱未采取”,“弱采取”和“强烈采取”。无论何时采取分支,计数器都会向“强烈采取”移动一个位置。任何时候没有采取分支,它会移动一个位置“强烈不采取”。这是一个饱和计数器,所以如果(例如)当计数器已经“强烈采用”时采用分支,则计数器根本不会改变。 [我应该补充一点:这就是英特尔记录它的方式,并且显然是为了工作 - 如果内存服务,Agner Fog和Terje Mathiesen发现它确实有点不同 - 而且,通常不如这样)。

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

我不是肯定关于i7中分支预测的细节,但我认为可以说它至少和Pentium Pro一样复杂,而不是回归到原来的奔腾。