【问题标题】:How does the branch predictor know it has made a wrong guess?分支预测器如何知道它做出了错误的猜测?
【发布时间】:2012-07-12 12:03:33
【问题描述】:

我的问题来自Mystical's answer。据我了解,您有一条分支指令,它可以转到另一条指令,比如0x123344,也可以继续执行。

如果分支预测器根据过去的模式从其中任何一个中进行猜测,它如何意识到自己犯了错误并恢复它?

【问题讨论】:

    标签: processor branch-prediction


    【解决方案1】:

    这一切都来自分阶段的处理器,过去部分 CPU 保持空闲,现在我们尽可能地利用每一小块。如果没有分支或条件事件,这将是顺利的,但有时我们需要改变正在发生的事情。

    因此,正如 Mystical 所提到的,预测器会做出猜测,以便大多数时间空闲的计算能力不会等待。处理器继续猜测猜测的内容,并在等待的前一条指令完成时与预测器进行比较。如果它猜对了,则不会发生任何事情,如果它猜错了,则会发送一个信号,并抛出预测点之后的阶段并以正确的值再次运行。

    在技术层面如何做到这一点因架构而异。它与其说是一种还原操作,不如说是它使在错误预测之后计算的所有内容无效,并且这些过程被重做。

    【讨论】:

    • 只是有点挑剔。 抛出中断,因为这对操作系统是可见的。分支错误预测完全在硬件中处理,软件完全不知道它(除了潜在的性能差异)。事件没有统一的术语,但中断始终用于指代可能会中断操作系统且对软件可见的事件。
    • 正如我在上面的描述中所说的,当分支评估完成时,会有一个答案,真假。预测器猜测真假。您可以说它几乎是分支开始,因为它现在具有它所做的预测和分支的实际评估,并且它在最后一个 == 条件中比较两者。它就是这样知道的。它只是将现在知道的内容与过去假设的内容进行比较,预测值存储在一边以供将来检查。
    猜你喜欢
    • 2014-08-25
    • 2013-10-09
    • 2019-05-10
    • 2016-02-05
    • 2020-04-16
    • 2023-03-10
    • 2019-08-19
    • 2023-03-16
    • 2014-04-25
    相关资源
    最近更新 更多