2、一般条件转移
条件转移指令有两种,即一般条件转移指令和复合条件转移指令。其中,一般条件转移指令的转移条件来自上一条指令,或更前面的指令。而复合型条件转移指令直接根据本条指令的执行结果决定是否转移。一般条件转移指令的执行时间关系如下:
k: …… ;置条件码CC
k+1: JMP(CC) L ;如果CC为真转向L,否则继续执行k+2
k+2: ……
…: ……
L: ……
对于一般条件转移指令,相关最严重的情况发生在条件码是由上一条指令产生的。如图5.30所示,条件码要在"执行k"的末尾才能形成,而"分析k+1"在一开始就要根据这个条件码判断转移条件是否成立。当指令分析器分析到条件转移指令时,必须停下来等待所需要的条件码,直�"执行k"结束时才能形成条件码。指令分析器根据这个条件码才能判断转移是否成功。
如果转移不成功,尽管指令分析器要停顿一段时间,但是,处理机执行指令的速度损失不大。因为指令分析器在分析完条件转移指令后,可以继续"分析k+2",指令执行部件在"执行k"之后,只要等待一个周期,就又可以继续"执行k+2"。
如果转移成功,而且转移的距离比较近,有可能指令L已经被取到了指令缓冲栈中。这时,只要作废指令缓冲栈中从k+3到L-1之间的所有指令。指令分析器在完成"分析k+1"之后,可以接着进行"分析L"。如果转移距离比较远,指令L不在指令缓冲栈中,则要将指令缓冲栈的所有指令全部作废,指令分析器还要再等待至少一个"取指令L"周期之后才能开始"分析L"。在这种情况下,程序的执行过程与串行执行完全一样。
从上面的分析中可以看到,转移不成功对流水线的影响不大,而当转移成功时,不仅指令执行过程变成了完全串行,而且要作废已经取到指令缓冲栈中的大量指令,从而白白增加了处理机与主存之间的通信量。因此,要通过软件与硬件的多种手段尽可能降低转移成功的概率和减少因为转移成功对流水线造成的影响。