取指令 取指令部件 完成 总有一个部件 空闲
指令的并行执行二级流水若 取指 和 执行 阶段时间上 完全重叠, 指令周期 减半 速度提高 1 倍
存在两个原因使得执行效率加倍是不可能的:
- 指令的执行时间 > 取指时间,因此取指阶段可能要等待一段时间,也即存放在指令部件缓冲区的指令还不能立即传给执行部件,缓冲区不能空出。
- 当遇到条件转移指令时,下一条指令是不可知的。因为必须等到执行阶段结束后,才能获知条件是否成立,从而决定下条指令的地址,造成时间损失。
通常为了减少时间损失,采用猜测法,即当条件转移指令从取指阶段进入执行阶段时,指令部件仍按顺序预取下一条指令。
这样如果条件不成立,转移没有发生,则没有时间损失;若条件成立,转移发生,则所取的指令必须丢掉,并再取新的指令。
可将指令的处理过程分解为更细的几个阶段:
- 取指(FI):从存储器取出一条指令并暂时存入指令部件的缓冲区。
- 指令译码(DI):确定操作性质和操作数地址的形成方式。
- 计算操作数地址(CO):计算操作数的有效地址。
- 取操作数(FO):从存储器中取操作数。(若操作数在寄存器中则无须此阶段)
- 执行指令(EI):执行指令所需的操作,并将结果存于目的位置(寄存器中)。
- 写操作数(WO):将结果存入存储器
在流水过程中会出现三种相关,使流水线不断流实现起来很困难,即结构相关、数据相关、控制相关。
- 结构相关:当多条指令进入流水线后,硬件资源满足不了指令重叠执行的要求时产生的。
- 数据相关:指令在流水线中重叠执行时,当后继指令需要用到前面的执行结果时发生的。
- 控制相关:当流水线遇到分支指令和其他改变PC值的指令时引起的。
以上文中六级流水为例
结构相关结构相关是当指令在重叠执行过程中,不同指令争用同一功能部件产生资源冲突时产生的,故又有资源相关之称。