流水线技术是指在程序执行时,多条指令重叠进行操作的一种任务分解技术。把一个任务分解为若干顺序执行的子任务,不同的子任务由不同的执行机构来负责执行,而这些执行机构可以同时并行工作。

如图所示,t1到t3的空闲时间叫做建立时间;t4到t6的空闲时间叫做排空时间。

I1、C1、P1的执行必须严格按照I1,C1,P1的顺序;而C1与I2,P1与C2、I3是可以同时执行的。

1、计算执行时间

假定有某种类型的任务,可分成N个子任务,每个子任务需要时间t,则完成该任务所需的时间为N×t。

  • 若以传统的方式,完成k个任务所需的时间是kNt
  • 使用流水线技术,花费的时间是Nt+(k-1)tl

注意,如果每个子任务所需的时间不同,其时间取决于执行顺序中最慢的那一个,tl即为最长的子任务的执行时间。

例 2:若指令流水线把一条指令分为取指令、分析和执行三部分,三部分的时间分别是取指令2ns,分析2ns,执行1ns。最长的是2ns,因此100条指令全部执行完毕所需要的时间是:(2ns+2ns+1ns)+(100-1) x2ns=203ns

(1)流水线的吞吐率

指在单位时间内流水线所完成的任务数量或输出的结果数量。

Tp=n/Tk

n为任务数,Tk是处理完成n个任务所用的时间。

例1的吞吐率为 100×109 /203=4.93×108/s
(203ns=10×2-9s)

(2)加速比

是指不采用流水线的执行时间/采用流水线的执行时间,用来衡量并行系统或程序并行化的性能和效果。

例1的加速比为 500/203=2.46
(如果不采用流水线,则执行100条指令需要500ns)

例 2:某指令流水线由4段组成,各段所需要的时间如下图所示。

连续输入8条指令时 的吞吐率(单位时间内流水线所完成的任务数或输出的结果数为:

执行时间:Nt+(k-1)t=7t+(8-1)3tl=28Δt
吞吐率:Tp=n/Tk=8/28Δt

2、影响流水线的主要因素

  • 转移指令:因为前面的转移指令还没有完成,流水线无法确定下一条指令的地址,因此也就无法向流水线中添加这条指令。
  • 共享资源访问的冲突:后一条指令需要使用的数据,与前一条指令发生冲突,或者相邻的指令使用了相同的寄存器。
  • 响应中断:当有中断请求时,流水线也会停止。对于这种情况有两种响应方式:
    • 精确断点法:立即停止,这种方法能够立即响应中断;
    • 不精确断点法:流水线中的指令继续执行,不再新增指令到流水线。