控制冒险最简单的解决方法是,在译码阶段检测到当前执行的是分支指令时,采用上一小节中的流水线暂停方法,将分支指令后续的指令暂时冻结,直到分支跳转的方向以及目标地址被确定。此法的优点是其简单性,缺点是造成了流水线性能的损失。
为了尽可能保持流水线的性能,一种思路是参考乱序执行的做法,在分支指令后方插入若干条无关指令,使得流水线的所有阶段始终处于工作状态,被插入的指令称为分支延迟槽指令;另一种思路是在分支结果产生之前,预测其可能的跳转方向和跳转目标地址,然后提前执行分支目标处的指令。
分支延迟槽一定程度上降低了汇编程序的可读性。此外,随着流水线深度的增加,延迟槽的实现也变得更加复杂,但其带来的性能提升较为有限。为了简化设计和节省芯片面积,RISC-V ISA没有设置分支延迟槽,而是直接通过分支预测解决控制冒险问题。