如何在计算机体系结构中处理未解决的条件分支处理策略?
条件分支不能早于引用条件已知时计算。例如,如果指定的条件定义了先前指令结果的符号,则计算的前提是先前指令已执行。
在引用条件变得已知之前,条件分支被认为是未解决的。处理器使用三种基本元素来处理未解决的条件分支,例如阻塞分支处理、推测执行和多路分支,如图所示 -
阻塞分支处理是处理未解决的条件分支的简单方法。在确定条件可以解决之前,条件分支的执行会中断。早期的流水线微处理器,如 MC 68020、MC 68030 和 80386,就是阻塞分支处理的示例。这种方法会导致由于流水线停顿而造成的长时间延迟,如表所示。因此,高级处理器采用了一种更优越的策略,称为推测执行。
阻塞分支处理中的分支惩罚
处理器类型 | 分支预测成功时的惩罚周期 | 分支预测失败时的惩罚周期 |
---|---|---|
MC 68020 (1984) | 5 | 3 |
MC 68030 (1987) | 5 | 3 |
80386 (1985) | 8 | 2 |
使用推测分支处理,可以防止由于未解决的分支条件导致的流水线中断。在检测到未解决的条件分支后,会猜测条件的结果,并沿着猜测的路径继续推测执行。
如图所示,推测执行包含三个关键要素,例如使用的分支预测方案、推测执行的范围以及在发生错误预测时使用的恢复方案。
分支预测可以是固定的或真实的预测。在固定预测中,会持续进行类似的猜测,要么“预测为跳转”(taken),要么“预测为不跳转”(not-taken)。真实的预测有两个可能的结果,要么“预测为跳转”(taken),要么“预测为不跳转”(fall through,顺序路径)。
在推测执行中,处理器会继续推测执行指令,直到条件确定。但是,条件执行开始与相应条件解决之间的时间间隔可能会有很大差异。
在发生错误预测的情况下,需要实现两个基本要素,例如丢弃推测执行的结果并继续执行另一个路径,例如正确的路径。当存在多个挂起的条件分支时,应选择并遵循相应的备用路径。
最后,多路分支是处理未解决的条件分支的最积极的方案。因此,在遇到未解决的条件分支时,会同时遵循两个可能的路径。当计算出特定条件时,正确的路径会保留下来。这条路径被接受,错误的路径被丢弃。