assembly - 分支罚款是什么意思?

标签 assembly cpu-architecture branch-prediction

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/

相关文章:

vhdl - 在单周期数据路径中加载半字和加载字节

c++ - 按位非运算哪个更快 : precalculated table or `~`

if-statement - "IF"贵吗?

assembly - x86 控制台滚动后出现奇怪的打印

assembly - 如何在 SSE 操作的同时使用 MMX

c - GCC 是否为静态分支预测生成次优代码?

assembly - ARM 皮质 M0/M3/M4 :Why PC is always Even number in Thumb State

bit - 8 位和 16 位架构

java - 为什么处理排序数组比处理未排序数组更快?

c++ - 微优化 C++ 比较函数