锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

计算机系统 流水线技术

时间:2022-09-18 10:00:00 ske线绕电阻器制动电阻器

Python视频微信订餐小程序课程视频

https://edu.csdn.net/course/detail/36074

Python实战量化交易理财系统

https://edu.csdn.net/course/detail/35475

计算机系统 流水线技术

Mar 31, 2022? 字数统计:3.3k(字) ?? 阅读时间:11(分钟)

本文介绍了计算机系统中使用的装配线技术,包括与装配线相关的基本知识、工作原理、性能改进、吞吐率、加速比和效率以及存在的问题。

简单介绍流水线技术

计算机系统的性能通过并行硬件(利用时间并行性,不同于空间并行性)来提高。

装配线技术将一项任务分解为若干顺序执行的子任务。不同的子任务由不同的操作部件执行,这些部件可以同时平行工作。该技术的关键在于重叠执行,这样可以在不增加硬件或只增加少量硬件的或只增加少量硬件的情况下提高几倍。

流水线的分级

流水线可分为三个层次:

(1)操作部件级流水线(操作符操作流水线) 流水线的工作模式由复杂的算术操作和逻辑操作组成。
(2)指令级流水线将一个指令的执行过程分解为三个阶段:取指令、分析指令和执行指令。
(3)处理机间级流水线(宏流水线) 由 N(N>=2)处理器通过存储器串行连接,每个处理器完成特殊任务,每个处理器的结果需要存储在与下一个处理器共享的存储器中。

装配线的分类

根据流水线的实际应用,可以从不同的角度进行分类。

静态流水线:只能在同一时间内操作连接方式(必须是单功能)工作。
动态流水线:允许在同一时间内按各种不同的连接方式工作(必须是多功能的)。

线性流水线:从输入到输出,每个功能段只允许经过一次,没有反馈回路。
非线性流水线:从输入到输出,一些功能段通过流水线多次存在反馈回路,常用于递归调用。

单功能流水线:只能实现加法操作等固定功能。
多功能流水线:不同的连接可以通过不同的连接方式实现(资源利用率更高、更灵活,但控制更复杂)。

装配线的特点和工作原理

  • 连续任务必须在流水线处理。
  • 在装配线的每个操作部件后面,一个缓冲寄存器(定器),称为装配寄存器,用于保存本阶段的执行结果,以确保各部件之间的速度匹配,各部件独立并行运行。换句话说,装配寄存器用于在两个相邻的操作之间传输数据,以确保以后使用的数据的供应,并将每个部分的处理工作隔离开来。
  • 因为流水线的主要工作方式是把大的操作任务分解为多个独立的、小的操作部件,依靠多个操作部件并行工作来缩短程序执行时间的。因为流水线中各段的执行时间应该尽量相等,执行时间最长的一段将成为整个流水线的瓶颈。
  • 流水技术适用于大量重复的时序流程,只有在输入端连续提供任务时,才能充分发挥流水线的效率。
  • 排入时间和排空时间存在于流水线中。

上图是我画抽象后的典型例子 5 级 CPU 执行流水线,但是这张图没有办法说明流水线技术最重要的特点,所以我通过了时空图描述装配线的工作。装配线的处理方向对应于多个任务按顺序逐一执行。

我们假设处理器的执行指令分为三个阶段,即取指、分析和执行。 t,然后上图描述的指令顺序执行的时空图,上图描述的是指令流水线执行的时空图。

通过上图,我们可以看到顺序执行 3 每一个指令都需要时间 9t,实施流水线所需的时间是 5t,实际上,流水线采用的执行方法是同时取指、分析和执行三个阶段组件并发工作 1 同时分析第一条指令的执行阶段 2 指令,取第 3 条指令。

如果不容易理解,可以把这个场景比作三个人 A\B\C 在操作苹果的过程中,包括 A 负责把苹果放入到水槽中,B 水槽里的苹果负责清洗,C 每次只能操作一个苹果,负责把水槽里的苹果捡起来放在袋子里。严格的顺序执行类似于 A 在做把第一个苹果放进水槽的动作时,B 和 C 当这个动作完成后,处于等待状态,B 此时执行清洗水槽中的苹果操作, A 处于无事可做的状态,C 处于等待状态,清洗后,C 开始执行把水槽里的苹果捡起来放在袋子里的动作,此时 A 和 B 处于空闲的状态。

假设有 n 苹果需要处理,每个苹果处理的三个阶段的单位时间是 t,那么:

顺序执行所需的时间为:n x 3 x t
可以这样计算流水线执行工作模式所需的时间:3 x t (n-1) x t

在这里计算时,我们实际上涉及多个参与,包括指令的数量指令的执行阶段每个指令执行阶段所需的单位时间,在上述情况下,指令的数量是 3 条,指令的执行阶段是 3 我们假设每个指令执行阶段所需的单位时间是相等的。接下来,让我们来看看一个稍微复杂的情况。

假设: 指令的数量(n):4条 指令的执行阶段(k):4个 每个指令执行阶段所需的单位时间:t  

让我们来看看更复杂的情况

假设: 指令的数量(n):3条 指令的执行阶段(k):4个 各指令执行阶段所需的单位时间:A(1t) B(3t) C(2t) D(1t)  

因此,我们可以总结出一指令流水线完成 n 计算任务所需总时间的公式:

Tk=∑i=1kti (n?1)max(t1,t2,??,tk)Tk=∑i=1kti (n?1)max(t1,t2,···,tk)T_k = \sum_{i=1}^kt_i (n -1 ) max(t_1,t_2,···,t_k)
此外,从上图可以看出,装配线的性能瓶颈取决于多个操作中每个执行阶段所需的最长单位时间(取 t1,t2,t3,t4,···tk 的最大值),在设计流水线时,每个操作执行单位的时间应尽可能相等。

流水线的性能指标

通过吞吐率、加速率、加速线效率等指标,我们可以衡量一段流水线的性能。


吞吐率( Though Put rate, TP )

吞吐量是指流水线在单位时间内完成的任务数量或输出结果数量。
吞吐率的计算公式如下:

TP=nTkTP=nTkTP = \frac n{T_k}
其中,n 表示任务(指令)的数量。

假设现在有一条线性流水线分成 k 段落和段落的执行时间分别为 t1,t2,···tk,然后流水线就完成了 n 连续任务所需的总时间为:

Tk=∑i=1kti (n?1)max(t1,t2,??,tk)Tk=∑i=1kti (n?1)max(t1,t2,···,tk)T_k = \sum_{i=1}^kt_i (n -1 ) max(t_1,t_2,···,t_k)
通过推断,可以得出流水线的实际吞吐率为:

TP=n∑ki=1ti (n?1)max(t1,t2,??,tk)TP=n∑i=1kti (n?1)max(t1,t2,···,tk)TP = \frac n{ \sum_{i=1}^kt_i (n -1 )max(t_1,t_2,···,t_k)}
此时,流水线的最大吞吐率为:

TPmax=1max(t1,t2,??,tk)TPmax=1max(t1,t2,···,tk)TP_{max} = \frac 1{ max(t_1,t_2,···,t_k)}
从上述公式可以看出,当装配线各段的执行时间不完全相等时,吞吐率主要由装配线中执行时间最长的功能段决定,该功能段已成为整个装配线的瓶颈,其执行时间称为瓶颈时间。为了解决这个问题,你可以考虑细分瓶颈部分,以减少瓶颈时间。

说明流水线的实际吞吐率小于最大吞吐率。 n >= k 只有在他们约会的时候。

假设现在有一条6段线性流水线,它们的单位执行时间分别是1ns,2ns,3ns,4ns,3ns,2ns,那么: 流水线完成10个连续任务所需的总时间 = (1   2   3   4   3   2)   (10 -1)4 = 15   36 = 51ns 流水线的实际吞吐率 = 10/ 51 = 0.196
该流水线的最大吞吐率 = 1 / 4 = 0.25

比较理想的情况是,一条 k 段连续流水线中的每段执行时间均相等(设为 t),那么:
该流水线完成 n 个连续任务需要的总时间可以表示为:

Tk=kt+(n−1)tTk=kt+(n−1)tT_k = kt + (n - 1)t
因此,实际的吞吐率为:

TP=nTk=nkt+(n−1)t=n(k+n−1)tTP=nTk=nkt+(n−1)t=n(k+n−1)tTP = \frac n{T_k} = \frac {n}{ kt + (n - 1)t} = \frac {n}{ (k + n - 1)t}
此时,最大的吞吐率为:

TPmax=limn→∞n(k+n−1)t=1tTPmax=limn→∞n(k+n−1)t=1tTP_{max} = \lim_{n \to \infty} \frac {n}{ (k + n - 1)t} = \frac {1}{t}

假设上面这段流水线中每一段执行时间都是等量的,比如2ns,那么我们再计算一遍:
该流水线完成10个连续任务需要的总时间 = (2 + 2 + 2 + 2 + 2 + 2) + (10 -1)2 = 12 + 18 = 30ns
该流水线的实际吞吐率 = 10 / 30 = 0.333
该流水线的最大吞吐率 = 1 / 2 = 0.5


加速比( Speedup Ratio, S )

加速比是衡量流水线性能的另一个关键指标,它其实指的是不使用流水线(顺序)执行和使用流水线来执行同一段任务所用总时间的比。

计算流水线加速比的基本公式为:

S=ToTkS=ToTkS = \frac {T_o}{ T_k }
当流水线的各个流水段的执行时间不相等的时候,一条 k 段线性流水线完成 n 个连续任务的实际加速比可以表示为:

S=n∑ki=1ti∑ki=1ti+(n−1)max(t1,t2,⋅⋅⋅,tk)S=n∑i=1kti∑i=1kti+(n−1)max(t1,t2,···,tk)S = \frac {n\sum_{i=1}^kt_i}{ \sum_{i=1}^kt_i + (n -1 )max(t_1,t_2,···,t_k)}
假设,某流水线分为 5 段,若每一段所需要的时间分别为 1ns、2ns、3ns、4ns、2ns,那么该流水线的加速比为:

S=(1+2+3+4+2)n(1+2+3+4+2)+4(n−1)=12n12+4(n−1)=3n3+n−1S=(1+2+3+4+2)n(1+2+3+4+2)+4(n−1)=12n12+4(n−1)=3n3+n−1S = \frac {(1 + 2 + 3 + 4 + 2)n}{ (1 + 2 + 3 + 4 + 2)+4(n-1)} = \frac {12n}{12 + 4(n-1)} = \frac {3n}{ 3 + n -1}

假设现在有一条4段线性流水线,它们的单位执行时间分别是1ns,2ns,3ns,1ns那么:
顺序执行完成10个连续任务需要的总时间 = (1 + 2 + 3 + 1) * 10 = 70
该流水线完成10个连续任务需要的总时间 = (1 + 2 + 3 + 1) + 3 * (10 -1) = 34
该流水线的实际加速比 = 70 / 34

备注:3的值来自于取(1ns,2ns,3ns,1ns)中的最大值

同理,理想的情况是,一条 k 段连续流水线中的每段执行时间均相等(设为 t),那么:

该流水线完成 n 个连续任务的实际加速比为:

S=nkt(K+n−1)t=nkk+n−1S=nkt(K+n−1)t=nkk+n−1S = \frac {nkt}{ (K+n-1)t } = \frac {nk}{k+n-1}

这种情况下的最大的加速比为:

Smax=limn→∞nkk+n−1=kSmax=limn→∞nkk+n−1=kS_{max} = \lim_{n \to \infty} \frac {nk}{k+n-1} = k

假设现在有一条4段线性流水线,它们的单位执行时间都是1ns那么:\
顺序执行完成10个连续任务需要的总时间 = (1 + 1 + 1 + 1) * 10 = 40\
该流水线完成10个连续任务需要的总时间 = (1 + 1 + 1 + 1) + 1 * (10 -1) = 13\
该流水线的实际加速比 = 40 / 13


效率(E)

流水线的效率指的是流水线的设备利用率,流水线的效率包含时间和空间两部分的因素。
流水线的效率被定义为 n 项任务所占用的时空区与 k 个流水段总的时空区之比。
实际上,n 项任务所占用的时空区其实就是顺序执行 n 项任务所使用的总时间。

计算流水线效率的一般公式为

如果流水线各段的执行时间不相等,那么连续执行 n 项任务时的流水线效率为:

E=n∑ki=1tik(∑ki=1ti+(n−1)max(t1,t2,⋅⋅⋅,tk))E=n∑i=1ktik(∑i=1kti+(n−1)max(t1,t2,···,tk))E = \frac {n\sum_{i=1}^kt_i}{ k(\sum_{i=1}^kt_i + (n -1 )max(t_1,t_2,···,t_k))}

如果流水线中的每段执行时间均相等(设为 t),而且输入的 n 项任务是连续的,那么一条 k 段流水线的效率为:

E=nktk(k+n−1)t=nk+n−1E=nktk(k+n−1)t=nk+n−1E = \frac {nkt}{k(k + n -1)t} = \frac {n}{k + n -1}

此时,流水线的最高效率为:

Emax=limn→∞nk+n−1=1Emax=limn→∞nk+n−1=1E_{max} = \lim_{n \to \infty} \frac {n}{k + n -1} = 1
由上面的数学公式可以看出,当流水线的效率达到最大值 1 的时候,这时流水线的各段均处于忙碌的状态。

结合计算流水线加速比的公式,流水线的效率可以表示为:

E=SkE=SkE = \frac Sk
公式转换一下,则流水线的吞吐率可以理解为流水线的效率和单位时间的比值。

TP=EtTP=EtTP = \frac Et


从上面的公式,我们可以看出当时钟周期t不变的时候,流水线的效率与吞吐率成正比

吞吐率、加速比和效率这些指标都可以用来衡量一条流水线的性能,为了得到比较高的性能,流水线应该尽可能满负荷工作。

综合来看,增加流水线的段数(k的值),流水线的吞吐率和加速比都能提高,但因为每个操作段的输出端都必须要设置一个锁存器(缓冲寄存器),因此当段数增多的时候,锁存器(缓冲寄存器)的总延迟时间也会随之增加,且增加锁存器(缓冲寄存器)的数量,不可避免的要增加流水线的价格成本。因此,在设计流水线的时候需要综合考虑各方便的因素,以选择流水线的最佳段数。

系统中也可能存在多条流水线,假如采用度量为i的超标量流水线处理机来连续处理n条指令,那么因为同时运行了i条流水线,因此平均每条流水线只需要执行n/i条指令。

此外,在实际的情况中,还需要注意流水线中的各段可能会相互影响,阻塞流水线以影响性能。

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章