流水线

时游大约 4 分钟

流水线

基本概念

流水线是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。各种部件同时处理是针对不同指令而言的,它们可同时为多条指令的不同部分工作,以提高各部件的利用率和指令的平均执行速度。

执行一条指令分为:取指->分析->执行

未使用流水线执行时,下一指令得等前指令执行完毕后才能执行。 使用流水线执行时,下一条指令可以在前一条流水线完成取指之后就开始执行

如下图:

  1. 非流水线执行指令 非流水线执行指令

  2. 流水线执行指令 流水线执行指令

流水线周期及流水线执行时间计算

例图
例图
  1. 流水线周期为执行时间最长的一段
  2. 流水线计算公式为:一条指令执行时间(建立流水线时间) + (指令条数-1)*流水线周期
    1. 理论公式:k + (n - 1) * Δt\Delta t k代表建立流水线时间,n代表指令条数
    2. 实践公式:(k + n - 1) * Δt\Delta t k代表分几段处理,n代表指令条数

例:若指令流水线把一条指令分为取指、分析和执行三部分,且三部分的时间分别为取指2ns、分析2ns、执行1ns。那么,流水线的周期是多少?100条指令全部执行完毕需要的时间是多少?

答:

  1. 流水线周期为2ns
  2. 全部执行完毕需要的时间为:
    1. 理论公式:5 + (100 - 1) * 2 = 203ns
    2. 实践公式:(3 + 100 - 1) * 2 = 204ns

流水线吞吐率计算

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

  1. 计算流水线吞吐率的最基本公式如下:

TP = 指令条数流水线执行时间\dfrac{指令条数}{流水线执行时间}

  1. 流水线的最大吞吐率:(Δt\Delta t 为流水线周期时间)

TPmax = limnnk+n1Δt\lim\limits_{n\to\infin}\dfrac{n}{k + n - 1}\Delta t = 1Δt\dfrac{1}{\Delta t}

例:若指令流水线把一条指令分为取指、分析和执行三部分,且三部分的时间分别为取指2ns、分析2ns、执行1ns。那么,流水线的吞吐率为多少?最大吞吐率为多少?

答:吞吐率为100203\dfrac{100}{203} ns,最大吞吐率(理想情况下)为12\dfrac{1}{2} ns

解释:最大吞吐率会忽略流水线建立时间比平常流水线执行所多消耗的时间,只考虑在流水线建立之后每一个流水线的周期就会完成一条指令的运行。

流水线的加速比

完成同样一批任务,不使用流水线所用的时间跟使用流水线所用的时间之比被称为流水线的加速比。

计算流水线的加速比的最基本公式如下:

加速比 S = 不使用流水线执行时间使用流水线执行时间\dfrac{不使用流水线执行时间}{使用流水线执行时间}

例:若指令流水线把一条指令分为取指、分析和执行三部分,且三部分的时间分别为取指2ns、分析2ns、执行1ns。那么,流水线的加速比为多少?

答:不采用流水线的执行时间为:5 * 100 = 500ns,使用流水线的执行时间为203ns,加速比为500203\dfrac{500}{203}

流水线的效率

流水线的效率时指流水线的设备利用率。在时空图上,流水线的效率定义为n个任务占用的时间区与K个流水段总的时空区之比。

假设有一个需要完成的任务由四部分组成,如图一所示: Alt text

在实际流水线执行中,有以下时空图表示,如下图所示: Alt text

计算流水线效率的公式为:

效率 E = n个任务占用的时空区k个流水段的总时空区\dfrac{n个任务占用的时空区}{k个流水段的总时空区} = T 0 kT k \dfrac{T~0~}{kT~k~}

4个任务占用的时空区为:四个数据 * 每个数据的总消耗时间:4 * 4 = 16ns 总时空区:图中x轴15 Δt\Delta t * 4 = 60ns

效率E为:1660=415\dfrac{16}{60} = \dfrac{4}{15}

总结:当流水线的每一个步骤的执行时长差不多相等时,这个流水线的效率是最高的。

上次编辑于:
贡献者: 15327360835chenlulu
Loading...