简介
流水线(Pipeline)是一种将任务分解为多个小步骤,并让多个不同任务的各个小步骤重叠,从而实现多个任务并行处理,以加速程序运行速度的技术。
为了实现流水线,首先将输入的任务分割成一系列子任务,使各子任务能在流水线的各个阶段并发地执行。将任务源源不断地输入流水线,从而实现了子任务级的并行。流水线对于计算机系统是非常必要的。
在CPU内部,取指令、译码、执行都是由不同部件完成的,所以,以此为例。
1.非流水线时空图:
若不采用流水线,则3个部件在同一时间间隔内,只能有一个执行,其余两个部件处于闲置状态。
2.流水线时空图:
若采用流水线,当任务饱满时,即从第2时刻开始,3个部件同时执行,而且互不干扰。
在流水线中,原则上要求各个阶段的处理时间都相同。若某一阶段的处理时间较长,势必造成其他阶段的空转等待。对子任务的划分,是决定流水线性能的一个关键因素。因此,执行的总时间主要取决于流水操作步骤中最长时间的那个操作。据此:设 流水线由N个操作组成,每段所需时间为(1<=i<=k),完成M个任务的实际时间为,其中为流水操作步骤中最长的段时间。
在流水线处理过程中,当任务饱满时,任务源源不断地输入流水线,不论有多少级过程,每隔一个时钟周期都能输出一个任务。从理论上说,一个具有k级过程的流水线处理n个任务需要的时钟周期数为=k+(n-1)。其中k个时钟周期用于处理第一个任务。k个周期后,流水线被装满,剩余的n-1个任务只需要n-1个周期就完成了。若用非流水线的硬件处理这n个任务,时间上只能串行,则所需的时钟周期数为=n*k。将与的比值定义为k级流水线的加速比=/=(n*k)/(k+(n-1))。