关于i7的分支预测

Fan*_*ang 9 architecture branch cpu-architecture

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

Currenly,我知道预测器称为"动态分支预测".

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

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

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

Dav*_*rtz 9

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

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

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

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


Jer*_*fin 6

最简洁的答案是不.

我有理由相信没有Intel CPU使用过您描述的一位预测器.

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

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

不确定 i7中分支预测的细节,但我认为可以说它至少和Pentium Pro一样复杂,而不是原来Pentium的回归.