当指令1找操作数时,指令4找指令;都需要访问内存,造成冲突
解决冲突的方法
- 让流水线在完成前一条指令对数据的存储器访问时,暂停(一个时钟周期)取后一条指令的操作。
- 另一种方法是设置两个独立的存储器分别存放操作数和指令,以免取指令和取操作数同时进行时互相冲突,使取某条指令和去另一条指令的操作数实现时间上的重叠。
数据相关是流水线中的各条指令因重叠操作,可能改变对操作数的读写访问顺序,从而导致了数据相关冲突。
根据指令间对同一寄存器读和写操作的先后次序关系,数据相关冲突可分为写后读相关(RAW)、读后写相关(WAR)、写后写相关(WAW)。
上述三种数据相关在按序流动的流水线中,只可能出现RAW相关。
在非按序流动的流水线中,由于允许后进入流水线的指令超过先进入流水线的指令而先流出流水线,则既可能发生RAW相关,还可能发生WAR和WAW相关。
以RAW为例:
- 第1条指令:R2-R3的结果放在R1里
- 第2条指令:R5 R1的结果放在R4里,所以要先等第1条指令执行结束将结果放入R1中,第2条指令才能开始取操作数
解决数据相关的方法
- 采用后推法,即遇到数据相关时,就停顿后继指令的运行,直至前面指令的结果已经生成。
- 另一种解决方法是采用定向技术,又称为旁路技术或相关专用通路技术。其主要思想是不必待某条指令的执行结果送回到寄存器后,再从寄存器中取出该结果,作为下一条指令的源操作数,而是直接将执行结果送到其他指令所需要的地方。
控制相关主要是由转移指令引起的。
当转移发生时,将使流水线的连续流动受到破坏。当执行转移指令时,根据是否发生转移,它可能将程序计数器PC内容改变成转移目标地址,也可能只是使PC加上一个增量,指向下一条指令地址。
在第3条指令的取指阶段不知道是否会发生跳转,所以第4条指令进入流水线模式
在第3条指令执行阶段(EI)发现需要跳转,则红框中的部分即转移损失,因为它们原本是不用执行的
解决控制相关
- 可以采用尽早判别转移是否发生,尽早生成转移目标地址;
- 预取转移成功或不成功两个控制流方向上的目标指令;
- 加快和提前形成条件码;
- 提高转移方向的猜准率等方法。
流水线性能通常用吞吐率、加速比、效率3项指标来衡量。
吞吐率在指令级流水线中,吞吐率是指单位时间内流水线所完成指令或输出结果的数量。吞吐率又有最大吞吐率和实际吞吐率之分。
最大吞吐率是指流水线在连续流动达到稳定状态后所获得的吞吐率。对于m段的指令流水线而言,若各段的时间均为Δt,则最大吞吐率为
流水线仅在连续流动时才可达到最大吞吐率。实际吞吐率总是小于最大吞吐率。
实际吞吐率是指流水线完成n条指令的实际吞吐率。实际吞吐率为: