5.6.1 流水线的基本概念
下面将指令的执行分为取出指令、分析指令和执行指令三个阶段,之前没有采用流水线的方式执行时,一条指令完成以后,才能取下条指令执行。执行过程如图5.12所示。
图5.12 没有采用流水线方式的指令执行
这种执行指令的方式优点是控制简单,有利于实现程序转移。但缺点是执行速度太慢,而且在执行指令时,主存是空闲的,其实此时有的部件和CPU 是可以并行工作的,没有充分利用各大部件。
通过分析以上的问题,采用重叠执行方式,即前一条指令执行完成之前或前一条指令分析完成之前,此时就可以从主存中取指令了。如图5.13和图5.14所示。
图5.13 前一条指令执行完成之前的重叠执行方式
图5.14 前一条指令分析完成之前的重叠执行方式
从上面两种方式来看,相邻的指令能够重叠执行,所以能加快指令的效率,也能有效利用空闲的部件。将上述两种方式进一步加工,采用工厂流水线的方式控制指令的执行,就是指令流水线方式。
流水线数据通路设计原则:指令流水段个数以最复杂指令所用的功能段个数为准;流水段的长度以最复杂功能段的操作所用的时间为准。
例如,模型机的指令LOAD X,含义是将存储器中X 地址的内容装载到AC 中。将LOAD 指令划分为5个阶段,每个阶段涉及的器件如下:
Ifetch(取指):从指令存储器取指令并计算PC+1。
用到的部件:指令存储器IR。
Reg/Dec(取数和译码):寄存器取数,同时对指令进行译码。
用到的部件:寄存器堆读口、指令译码器。
Exec(执行):计算内存单元地址。
用到的部件:扩展器、ALU。
Mem(读存储器):从数据存储器中读。
用到的部件:数据存储器。
Wr(写寄存器):将数据写到AC。
用到的部件:寄存器堆写口。
如图5.15所示,进入流水线的指令流,由于后一条指令的第i步与前一条指令的i+1步同时进行,从而使一串指令总的完成时间大大缩小,做如下的假设,以下单位为ns(1 ns=10-9 s):
图5.15 指令流水线
假定以下每步操作所花经时间为
在单周期模型中,每条指令在一个时钟周期内完成,时钟周期等于最长的LOAD 指令的执行时间,即8 ns,当无流水线时,串行执行,N 条指令的执行时间为8 N ns;采用流水线后,时钟周期等于最长阶段所花时间,为2 ns,每条指令的执行时间为2 ns×5=10 ns,N 条指令的执行时间为[5+(N-1)]×2 ns,在N 很大时,比串行方式提高约4倍,因此,我们可以看出流水线方式下,单条指令的执行时间不能缩短,但能大大提高指令的吞吐量。