在遇到条件转移指令时,为了使流水线不"断流",通常采用"猜测法"。在条件转移指令之后,选择一个分支方向,让后续指令继续进入流水线执行。在图8.26中,猜测的分支方向是固定,它选择了转移不成功的方向。
图8.26 条件转移指令在流水线中的执行过程

  在一般情况下,猜测转移不成功的方向,其控制逻辑相对比较简单;因为在遇到条件转移指令时,可以让流水线按照原先的顺序继续往前流动。如图8.26所示,第i条指令是条件转移指令,第i+1、i+2、……条指令可以按虚线方向继续进入流水线执行。因为第i条条件转移指令所需要的条件码是由第i-1条指令给出;在一条由k个流水段的流水线中,第i-1条指令要等到第i+k-2条指令进入流水线时才能形成条件码。如果形成的条件码是转移不成功的,则猜测正确,流水线的吞吐率和效率没有降低,就好象没有条件转移指令一样;相反,如果形成的条件码是转移成功的,则猜测错误,必须改为沿实线方向执行。这时,首先作废流水线中已经执行的第i+1、i+2、……、i+k-2条指令,然后,再从分支点开始执行第p、p+1、……条指令。这种情况下,每执行一条条件转移指令,一条k段流水线就有k-2个流水段被浪费。

  据统计,在一些典型程序中,转移指令所占的比例为p=20%,转移成功的概率为q=60%。对于一条有8个流水段的指令流水线,由于条件转移指令的影响,流水线的最大吞吐率要下降46%,同样,如果指令流水线的流水段数为10,由于条件转移指令的影响,流水线的最大吞吐率将下降到原来的一半以下.
  可见,条件转移指令对流水线的影响是非常大的,必须采取措施来减少这种影响。