每段时间相同
一条指令流水线被分为
k
段,每一段时间都为Δt\Delta tΔt,连续输入n
条指令。
处理完n
个任务所用的时间记作TkT_kTk:
Tk=kΔt+(n−1)ΔtT_k=k\Delta t+(n-1)\Delta t Tk=kΔt+(n−1)Δt
这个比较好理解,看时空图即可
吞吐率记作TPTPTP:
TP=nTk=nkΔt+(n−1)ΔtTP= \frac{n}{T_k}=\frac{n}{k\Delta t+(n-1)\Delta t} TP=Tkn=kΔt+(n−1)Δtn
n个任务,用n除以总时间,就是每个任务的平均处理时间,平均多久处理一个任务,就是吞吐率。
效率:流水线中的设备实际使用时间与整个运行时间的比值,即流水线设备的利用率。
一共分为k
段,需要k
个设备,那么每个设备的效率我们记作eie_iei
一个设备,在整个过程中,每一条指令都要使用一次,所以使用了n次,加上每一次都是Δt\Delta tΔt,所以就是nΔtn\Delta tnΔt
ei=nΔtTk=nΔtkΔt+(n−1)Δt=nk+n−1e_i=\frac {n\Delta t}{T_k}=\frac{n\Delta t}{k\Delta t+(n-1)\Delta t}=\frac{n}{k+n-1} ei=TknΔt=kΔt+(n−1)ΔtnΔt=k+n−1n
(ps:注意,这个只符合,当一个设备每一条指令都会使用它的情况。飞此情况的,并不适用。其实还是从定义出发,效率就是所有设备的实际运行时间,与整个运行时间的比值,其实就是时空图里面被填满的格子,比上总的面积。)
那么整段流水线的效率呢,就是每一段的效率,加起来,求个平均值。
又因为这每一段的效率都一样,所以求均值和不求一样。故整段流水线的效率为:
E=e1+e2+...+ekk=ke1k=e1=nΔtTk=nk+n−1E=\frac{e_1+e_2+...+e_k}{k}=\frac{ke_1}{k}=e_1=\frac {n\Delta t}{T_k}=\frac{n}{k+n-1} E=ke1+e2+...+ek=kke1=e1=TknΔt=k+n−1n
这个结果其实还可以写作:
E=nΔtTk=TPΔtE=\frac {n\Delta t}{T_k}=TP\Delta t E=TknΔt=TPΔt
每段时间不同
一条指令流水线被分为
k
段,k段时间分别为e1,e2,...,eke_1,e_2,...,e_ke1,e2,...,ek,连续输入n
条指令。
处理完n
个任务所用的时间记作TkT_kTk:
Tk=∑i=1kΔti+(n−1)max(Δt1,Δt2,...,Δtk)T_k=\sum_{i=1}^{k}\Delta t_i +(n-1)max(\Delta t_1,\Delta t_2,...,\Delta t_k) Tk=i=1∑kΔti+(n−1)max(Δt1,Δt2,...,Δtk)
为什么是这样呢,看图。这个也好理解,直接看最长的那一段,从头到尾,最长的那一段一共执行了n次,那再观察时空图的末尾,最长的那一段过后,还执行了两小段,再观察时空图的开头,最长的那一段执行之前,还执行了一小段,这前后两部分,其实就是一个指令完整的执行流程,但不包括最长的那一段。所以啊,从n次执行中拿出来一个最长的,跟他们合在一起,就是一次完整的指令执行过程,所以最终的公式就是:一次完整的执行过程+(n-1)次最长的执行过程。
吞吐率TPTPTP:
TP=n∑i=1kΔti+(n−1)max(Δt1,Δt2,...,Δtk)TP=\frac{n}{\sum_{i=1}^{k}\Delta t_i +(n-1)max(\Delta t_1,\Delta t_2,...,\Delta t_k)} TP=∑i=1kΔti+(n−1)max(Δt1,Δt2,...,Δtk)n
效率:
先说一小段的效率eie_iei
ei=nΔtiTk=nΔti∑i=1kΔti+(n−1)max(Δt1,Δt2,...,Δtk)e_i=\frac{n\Delta t_i}{T_k}=\frac{n\Delta t_i}{\sum_{i=1}^{k}\Delta t_i +(n-1)max(\Delta t_1,\Delta t_2,...,\Delta t_k)} ei=TknΔti=∑i=1kΔti+(n−1)max(Δt1,Δt2,...,Δtk)nΔti
那总的效率E
就是每一段的加起来,求均值
先看每一段加起来
e1+e2+...+ek=nΔt1Tk+nΔt2Tk+...=n∑i=1kΔtiTke_1+e_2+...+e_k=\frac{n\Delta t_1}{T_k}+\frac{n\Delta t_2}{T_k}+...=\frac{n\sum_{i=1}^{k}\Delta t_i}{T_k} e1+e2+...+ek=TknΔt1+TknΔt2+...=Tkn∑i=1kΔti
再求均值,那就是除以k
E=n∑i=1kΔtikTk=n∑i=1kΔtik∑i=1kΔti+(n−1)max(Δt1,Δt2,...,Δtk)E=\frac{n\sum_{i=1}^{k}\Delta t_i}{kT_k}=\frac{n\sum_{i=1}^{k}\Delta t_i}{k \sum_{i=1}^{k}\Delta t_i +(n-1)max(\Delta t_1,\Delta t_2,...,\Delta t_k)} E=kTkn∑i=1kΔti=k∑i=1kΔti+(n−1)max(Δt1,Δt2,...,Δtk)n∑i=1kΔti
这个结果,里面那一部分其实就是TP
,所以,还可以写为
E=TP1k∑i=1kΔtiE=TP\frac{1}{k} \sum_{i=1}^{k}\Delta t_i E=TPk1i=1∑kΔti
瓶颈问题:
我们把流水线中这种时间最长的段称为流 水线的瓶颈段。如图,S2S_2S2就是瓶颈段。
解决瓶颈段有两个方法:
细分瓶颈段
重复设置瓶颈段
重复设置瓶颈段后的时空图:
9条指令
重复设置瓶颈段的缺点是:控制逻辑比较复杂,所需的硬件增加了。
加速比
加速比:完成同样一批任务,不使用流水线所用的时间与使用流水线所用
的时间之比。
使用流水线的时间是TPTPTP
不用流水线的时间,就是每一条指令所需时间加起来。