【问题标题】:About Branch Prediction of i7关于i7的分支预测
【发布时间】:2012-07-01 14:05:36
【问题描述】:

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

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

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

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

i7 有和上面一样的预测器吗?

【问题讨论】:

  • 我几乎可以向您保证,所有细节都是公司专有机密。

标签: architecture branch cpu-architecture


【解决方案1】:

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

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

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

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

【讨论】:

    【解决方案2】:

    简短的回答是否定的。

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

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

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

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

    【讨论】:

    • 请注意,两位预测器可能是饱和的(即从一个状态到下一个状态,边界处于强烈采用或强烈不采用),或者它们可能有一个滞后计数器,使它们能够从弱不采取到强烈采取,从弱采取到强烈不采取直接。
    猜你喜欢
    • 2018-07-06
    • 2012-06-25
    • 2014-04-25
    • 2014-03-03
    • 2013-04-21
    • 2016-07-01
    • 2011-02-01
    • 2015-11-24
    • 2012-07-02
    相关资源
    最近更新 更多