对于MIPS 5阶段管道,分支目标是通过解码阶段知道的,因为如果分支偏移在说明中,则可以轻松提取它,并且还可以读取寄存器解码阶段。
因此,对于订单管道的过度管道,您显然会遇到带有" JR"这样的说明的问题,该说明可能会使用尚未计算的寄存器。对于这样的用途,对于分支目标缓冲区有明确的用途。
但是,对于像" BEQ"这样的指示,我看到了分支预测因子的必要性,但对于分支目标而不是,因为您已经知道分支机构的偏移量,并且当然您知道当前的程序计数器,因此您可以轻松提出分支目的地。
是寄存器跳跃是使用分支目标缓冲区的唯一指令还是我缺少某些内容?
提取阶段需要预测才能知道接下来要获取哪个块。指令缓存具有一定的延迟,但可以管道。DRAM具有更多的延迟,但仍然可以有多个出色的请求(取决于存储器控制器或缓存的外部级别)。因此,提取阶段需要块地解决了当前从内存/缓存到达的块之前的多个周期。。
decode直到获取后才发生,因此,如果您等待直到decode检测无条件直接分支的存在,那是一个额外的失速周期。
看看分支目标缓冲区检测到什么分支错误预测?从x86的角度来看(解码很昂贵并且需要多个阶段,因此更重要)。
)。还要注意,高性能CPU并行解码了多个指令,并且通常在提取和解码之间有一个队列以吸收吸收气泡。如果获取阶段预测有一个分支(条件或无条件,无关紧要),则可以从分支目标排队指令,而不是分支后的指令。
另请参见slow JMP-Instruction,有关X86基准的X86基准,即跳到下一步指导。(即相对偏移= 0)。当序列足够长以不适合BTB时,它会变慢。