Branch penalty in pipeline results from non-zero distance between ALU and IF.
这句话是什么意思?
最佳答案
如果没有(正确的)分支预测,在 ALU 决定条件分支或间接分支的走向之前,fetch 并不知道接下来要获取什么。因此它会停止,直到分支在 ALU 中执行。
或者如果预测不正确,从错误路径获取/解码的指令是无用的,因此我们将其称为分支错误预测惩罚;分支预测在正常情况下隐藏它。
另一个术语是“分支延迟”——从获取分支指令到前端获取有用的下一条指令之间的周期数。
请注意,即使是无条件分支也有分支延迟:指令是分支这一事实只有在解码后才能得知。这在管道中比执行更早,因此可能的损失比条件分支或间接分支要小。
<小时/>例如,在第一代 MIPS R2000(经典的 5 级 RISC)中,条件分支在 EX 阶段只需要半个周期,而 IF doesn't need the address until the 2nd half of a clock cycle, so the total branch latency is kept down to 1 cycle 。 MIPS 通过 branch-delay slot 隐藏该延迟。 :分支之后的指令始终执行,无论是否采用该分支。 (包括无条件直接分支;ID 阶段可以自行生成目标地址。)后来更深入的流水线 MIPS CPU(尤其是超标量和/或乱序)确实需要分支预测,而延迟时隙无法完全预测分支。隐藏分支延迟。
关于assembly - 分支罚款是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56412615/