每段时间相同
一条指令流水线被分为
k
段,每一段时间都为 Δ t \Delta t Δt,连续输入n
条指令。
处理完n
个任务所用的时间记作
T
k
T_k
Tk:
T
k
=
k
Δ
t
+
(
n
−
1
)
Δ
t
T_k=k\Delta t+(n-1)\Delta t
Tk=kΔt+(n−1)Δt
这个比较好理解,看时空图即可
吞吐率记作
T
P
TP
TP:
T
P
=
n
T
k
=
n
k
Δ
t
+
(
n
−
1
)
Δ
t
TP= \frac{n}{T_k}=\frac{n}{k\Delta t+(n-1)\Delta t}
TP=Tkn=kΔt+(n−1)Δtn
n个任务,用n除以总时间,就是每个任务的平均处理时间,平均多久处理一个任务,就是吞吐率。
效率:流水线中的设备实际使用时间与整个运行时间的比值,即流水线设备的利用率。
一共分为k
段,需要k
个设备,那么每个设备的效率我们记作
e
i
e_i
ei
一个设备,在整个过程中,每一条指令都要使用一次,所以使用了n次,加上每一次都是
Δ
t
\Delta t
Δt,所以就是
n
Δ
t
n\Delta t
nΔt
e
i
=
n
Δ
t
T
k
=
n
Δ
t
k
Δ
t
+
(
n
−
1
)
Δ
t
=
n
k
+
n
−
1
e_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
=
e
1
+
e
2
+
.
.
.
+
e
k
k
=
k
e
1
k
=
e
1
=
n
Δ
t
T
k
=
n
k
+
n
−
1
E=\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
Δ
t
T
k
=
T
P
Δ
t
E=\frac {n\Delta t}{T_k}=TP\Delta t
E=TknΔt=TPΔt
每段时间不同
一条指令流水线被分为
k
段,k段时间分别为 e 1 , e 2 , . . . , e k e_1,e_2,...,e_k e1,e2,...,ek,连续输入n
条指令。
处理完n
个任务所用的时间记作
T
k
T_k
Tk:
T
k
=
∑
i
=
1
k
Δ
t
i
+
(
n
−
1
)
m
a
x
(
Δ
t
1
,
Δ
t
2
,
.
.
.
,
Δ
t
k
)
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)次最长的执行过程。
吞吐率
T
P
TP
TP:
T
P
=
n
∑
i
=
1
k
Δ
t
i
+
(
n
−
1
)
m
a
x
(
Δ
t
1
,
Δ
t
2
,
.
.
.
,
Δ
t
k
)
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
效率:
先说一小段的效率
e
i
e_i
ei
e
i
=
n
Δ
t
i
T
k
=
n
Δ
t
i
∑
i
=
1
k
Δ
t
i
+
(
n
−
1
)
m
a
x
(
Δ
t
1
,
Δ
t
2
,
.
.
.
,
Δ
t
k
)
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
就是每一段的加起来,求均值
先看每一段加起来
e
1
+
e
2
+
.
.
.
+
e
k
=
n
Δ
t
1
T
k
+
n
Δ
t
2
T
k
+
.
.
.
=
n
∑
i
=
1
k
Δ
t
i
T
k
e_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
=
1
k
Δ
t
i
k
T
k
=
n
∑
i
=
1
k
Δ
t
i
k
∑
i
=
1
k
Δ
t
i
+
(
n
−
1
)
m
a
x
(
Δ
t
1
,
Δ
t
2
,
.
.
.
,
Δ
t
k
)
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
=
T
P
1
k
∑
i
=
1
k
Δ
t
i
E=TP\frac{1}{k} \sum_{i=1}^{k}\Delta t_i
E=TPk1i=1∑kΔti
瓶颈问题:
我们把流水线中这种时间最长的段称为流 水线的瓶颈段。如图, S 2 S_2 S2就是瓶颈段。
解决瓶颈段有两个方法:
-
细分瓶颈段
-
-
重复设置瓶颈段
-
重复设置瓶颈段后的时空图:
9条指令
重复设置瓶颈段的缺点是:控制逻辑比较复杂,所需的硬件增加了。
加速比
加速比:完成同样一批任务,不使用流水线所用的时间与使用流水线所用
的时间之比。
使用流水线的时间是
T
P
TP
TP
不用流水线的时间,就是每一条指令所需时间加起来。