【问题标题】:Branch prediction - questions about target prediction and using the PC分支预测 - 关于目标预测和使用 PC 的问题
【发布时间】:2012-06-25 19:09:24
【问题描述】:

所以我了解流水线处理器的分支预测中使用的基本技术 - 诸如 2 位饱和计数器、两级自适应预测器等。

这是我的问题:

1) 分支目标预测:为什么这很重要,这里使用了哪些机制?当我想到一个分支时,我会想到“bne r2, r3, LABEL”,它表示如果 r2 != r3 然后分支到 LABEL,这意味着 PC(程序计数器)= PC + LABEL。在这里预测目标有什么神秘之处?根据 LABEL 的编译值,您知道它将是什么。 我可能以某种方式错过了这一点。

2) 为什么程序计数器值本身(例如 0x4001000C)或至少它的最后几位被用作分支预测方案的一部分?我看到了一个方案,其中 PC 的最后 4 位连接到(4 位)分支历史寄存器,并且该 8 位值用于访问模式历史表。 我认为PC非常随意!

感谢您帮助理解这些问题

【问题讨论】:

    标签: x86 hardware computer-architecture branch-prediction


    【解决方案1】:

    在这里预测目标有什么神奇之处?根据 LABEL 的编译值,您知道它将是什么。

    由于 CPU 流水线深度和缓存延迟,在获取指令、完全解码以识别分支目标和能够获取该指令之间需要许多周期。因此,您可以预测目标以便抢先获取下一条指令。

    为什么程序计数器值本身(例如 0x4001000C)或至少它的最后几位被用作分支预测方案的一部分?

    因为 PC 唯一标识了一个特定的分支指令!您还打算如何索引分支预测表?

    【讨论】:

      【解决方案2】:

      添加更多颜色

      1) 对于您给出的示例,分支目标预测并没有那么多。对于虚函数和计算分支(对于 switch 语句等)来说,它更为重要。在这两种情况下,分支目标在编译时都是未知的。在虚函数情况下,它必须从内存位置(虚函数表)加载,而在 switch 语句情况下,我们通常通过查找表中的分支偏移量来完成。即使虚函数case是无条件的,它仍然大量使用BTB。

      2) 基本上有两类通用的预测器,一类是全局的,一类是每个地址的。全局预测器的好处是能够处理更长的模式历史(采用/未采用的历史)。每个地址预测器的好处是能够特定于某些分支位置,但通常具有较短的历史记录(因为它们是每个地址的,因此占用大量空间)。许多处理器使用通常称为锦标赛分支预测器的东西,其中有一个全局预测器和一个每个地址预测器,然后有一个预测器(置信度估计器)来选择预期会给出更好答案的预测器。

      【讨论】:

        猜你喜欢
        • 2015-11-24
        • 2014-04-25
        • 2014-03-03
        • 2012-07-01
        • 2018-07-06
        • 1970-01-01
        • 2016-07-01
        • 2011-02-01
        • 2016-09-14
        相关资源
        最近更新 更多