流水线&超流水线

来源:互联网 发布:日本进口美工刀片 编辑:程序博客网 时间:2024/04/28 12:14

流水线

     流水线技术是一种将每条指令分解为多步,并让各步操作重叠,从而实现几条指令并行处理的技术。程序中的指令仍是一条条顺序执行,但可以预先取若干条指令,并在当前指令尚未执行完时,提前启动后续指令的另一些操作步骤。这样显然可加速一段程序的运行过程。
市场上推出的各种不同的1 6位/ 3 2位微处理器基本上都采用了流水线技术。如8 0 4 8 6和P e n t i u m均使用了6步流水线结构,流水线的6步为:
( 1 ) 取指令。C P U从高速缓存或内存中取一条指令。
( 2 ) 指令译码。分析指令性质。
( 3 ) 地址生成。很多指令要访问存储器中的操作数,操作数的地址也许在指令字中,也许要经过某些运算得到。
( 4 ) 取操作数。当指令需要操作数时,就需再访问存储器,对操作数寻址并读出。
( 5 ) 执行指令。由A L U执行指令规定的操作。
( 6 ) 存储或"写回"结果。最后运算结果存放至某一内存单元或写回累加器A。
       在理想情况下,每步需要一个时钟周期。当流水线完全装满时,每个时钟周期平均有一条指令从流水线上执行完毕,输出结果,就像轿车从组装线上开出来一样。P e n t i u m、Pentium Pro和Pentium II处理器的超标量设计更是分别结合了两条和三条独立的指令流水线,每条流水线平均在一个时钟周期内执行一条指令,所以它们平均一个时钟周期分别可执行2条和3条指令。 
     流水线技术是通过增加计算机硬件来实现的。例如要能预取指令,就需要增加取指令的硬件电路,并把取来的指令存放到指令队列缓存器中,使M P U能同时进行取指令和分析、执行指令的操作。因此,在1 6位/3 2位微处理器中一般含有两个算术逻辑单元A L U,一个主A L U用于执行指令,另一个A L U专用于地址生成,这样才可使地址计算与其它操作重叠进行。

 

超流水线

      超级流水线以增加流水线级数的方法来缩短机器周期,相同的时间内超级流水线执行了更多的机器指令。采用简单指令以加快执行速度是所有流水线的共同特点,但超级流水线配置了多个功能部件和指令译码电路,采用多条流水线并行处理,还有多个寄存器端口和总线,可以同时执行多个操作,因此比普通流水线执行的更快,在一个机器周期内可以流出多条指令。

 

      一般而言,CPU执行一条指令需要经过以下阶段:取指->译码->地址生成->取操作数->执行->写回,每个阶段都要消耗一个时钟周期,同时每个阶段的计算结果在周期结束以前都要发送到阶段之间的锁存器上,以供下一个阶段使用。所以,每个时钟周期所消耗的时间就是由以上几个阶段中的耗时最长的那个决定的。假设耗时最长的阶段耗时为s秒,那么时钟频率就只能设计到1/s赫兹(这里不考虑阶段间信号传递的时间和锁存器的反应时间)。

      那么,要提高时钟频率,一种可能的方法就是减小每个阶段的时间消耗。其中一种最简单的办法,就是将每个阶段再进行细分成更小的步骤,同样是细分后的每个阶 段,单个阶段的运算量小了,单位耗时s也就减少,这样实际上就是提高了时钟频率。这种将标准流水线细分的技术,就是超级流水线技术。当然,流水线和超级流 水线之间并没有很明显的区别。这样的技术,虽然提高了CPU的主频,但是也带来了很大的副作用:

      首先,细分后的每一个阶段都要在其后使用锁存器锁存,因此将一个阶段细分为N的子阶段并不能让单位时间减少到s/N, 而是s/N + d, 其中d为锁存器的反应时间。这实际上就是增加了多余的时间消耗。

      其次,随着流水线级数的加深,一旦分支预测出现错误,会导致CPU中大量的指令作废,这样的消耗是十分巨大的。

      以上原因,也就是什么Pentium IV具有31级的流水线,指令的执行效率却赶不上只有14级流水线的Pentium M。