分行罚款是什么意思?

use*_*312 4 assembly cpu-architecture branch-prediction

流水线中的分支惩罚是由 ALU 和 IF 之间的非零距离造成的。

这个声明是什么意思?

Pet*_*des 5

如果没有(正确的)分支预测,在 ALU 决定条件分支或间接分支走哪条路之前,fetch 不知道接下来要获取什么。所以它会停止,直到分支在 ALU 中执行。

或者预测不正确,从错误路径获取/解码的指令是无用的,所以我们称之为分支错误预测惩罚;分支预测在正常情况下隐藏它。

另一个术语是“分支延迟”——从获取分支指令到前端获取有用的下一条指令的周期数。

请注意,即使是无条件分支也有分支延迟:指令分支的事实直到被解码后才知道。这在管道中比执行更早,因此可能的惩罚小于条件分支或间接分支。


例如,在第一代 MIPS R2000 中,经典的 5-stage RISC,条件分支在 EX 阶段只需要半个周期,而IF 直到第二个半时钟周期才需要地址,所以总分支延迟保持在 1 个周期。MIPS 使用分支延迟槽隐藏了延迟:分支后的指令总是执行,无论它是否采用了分支。(包括无条件直接分支;ID 阶段可以自行生成目标地址。)后来更深入流水线的 MIPS CPU(尤其是超标量和/或乱序)确实需要分支预测,延迟槽不能完全隐藏分支延迟。