【问题标题】:How does the branch predictor know if it is incorrect?分支预测器如何知道它是否不正确?
【发布时间】:2014-08-25 22:54:51
【问题描述】:

所以我确实搜索了这个问题,但我找到的答案我不太明白。

我对 CPU 的理解是,指令获取单元仅接收来自分支预测器的指令;然后它将通过 L1i 缓存/L2/L3/RAM 找到要执行的预测指令,然后离开它。

但是,我遇到的问题是;分支预测器如何知道它所做的是否正确?

【问题讨论】:

    标签: caching branch cpu


    【解决方案1】:

    分支指令本身仍在执行,即,条件被评估并确定目标。对于条件分支,如果条件和目标都被正确预测,通常会通知预测器,以便可以将状态更新为强采用/未采用(如果先前的状态是弱采用/未采用)。1

    如果条件或目标被错误地预测,预测器会从执行分支指令中接收正确的信息,错误预测路径中的指令会从流水线中清除,并在正确的地址处重新开始提取。


    1 预测器可能会推测性地更新分支信息并纠正错误预测。推测更新对于全局历史向量来说是典型的,因为下一次预测需要该信息,而在发生错误预测之前通常不需要置信度信息。置信度信息可用于选择性动态预测、减少检查点、确定另一个线程的优先级、降低功耗等,但它通常仅用于防止单个事件改变预测方向。

    【讨论】:

    • 明白了,但是预测器是如何做到这一点的:“如果条件或目标被错误地预测,则预测器接收到正确的信息”?它从哪里得到正确与否的信息?
    • @user3423509 分支指令的执行测试条件,判断是否应该被采用;采用/未采用预测与分支指令一起携带,因此可以确定预测是否正确。目标确定的处理方式类似,尽管对于指令地址相关分支,这可以提前计算,因为在指令解码后可以使用常量偏移量(早期使用经典 RISC)。
    • 抱歉这么久才回复。不过,我还是不太明白。这个“分支”指令到底发生了什么。是预测序列吗?单元在预测之前如何知道预测是否正确?我很困惑...
    猜你喜欢
    • 2012-07-12
    • 2019-07-15
    • 1970-01-01
    • 2021-03-04
    • 2020-03-31
    • 2011-03-21
    • 1970-01-01
    • 2015-11-04
    • 2012-02-16
    相关资源
    最近更新 更多