示例1:线性流水线,输入任务是不连续的情况,计算流水线的吞吐率、加速比和效率。用图8.4所示的一条4段浮点加法器流水线计算8个浮点数的和:
Z=A+B+C+D+E+F+G+H

由于存在数据相关,要在A+B的运算结果在第4个时钟周期末尾产生之后,在第5个时钟周期才能继续开始做加C的运算。这样,在每两个加法运算之间,每个功能部件都要空闲3个时钟周期。这时候,实际上与不采用流水线的顺序执行方式完全一样。

解:把上式作一个简单的变换,得到:
Z=[(A+B)+(C+D)]+[(E+F)+(G+H)]
小括号内的4个加法操作之间,由于没有数据相关,可以连续输入到流水线中。只要前两个加法的结果出来之后,第一个中括号内的加法就可以开始进行。8个浮点数求和的流水线时空图如图8.19所示。

图 8.19 用一条4段浮点加法器流水线求8个树之和流水线时空图

从流水线的时空图中可以很清楚地看到,7个浮点加法共用了15个时钟周期。假设每一个流水段的延迟时间均为Dt,则有Tk=15 Dt,n=7。那么,流水线的吞吐率TP为:
流水线的加速比S为:
流水线的效率E为:
示例2:线性多功能静态流水线,输入任务是不连续的情况,计算流水线的吞吐率、加速比和效率。
用TI-ASC计算机的多功能静态流水线计算两个向量的点积:
Z=AB+CD+EF+GH

解:为了尽量减少数据相关性,充分发挥流水线的作用。计算的顺序应该是先做4个乘法:AB、CD、EF和GH,然后做两个加法AB+CD和EF+GH,最后求总的结果Z。流水线的时空图如图8.20所示。
从流水线时空图中看到,用20个时钟周期完成了7个运算。当每一个功能段的延迟时间都为Dt时,有:Tk=20 Dt,n=7。流水线的吞吐率TP为:

如果采用顺序执行方式,完成一次乘法要用4个Dt,完成一次加法要用6个Dt,则完成全部运算要用:
则流水线的加速比S为:
整个流水线共有8段,流水线效率E为:
图8.20 用TI-ASC多功能静态流水线求两个向量点积的流水线时空图

整个流水线的效率很低,其原因主要有如下四个。
(1) 是多功能流水线在做某一种运算时,总有一些功能段是空闲的;
(2) 是静态流水线必须等待前一种运算全部排出流水线之后,才能重新进行连接;
(3) 是题目本身存在有数据相关,当发生数据相关时,必须等待前一个运算结果产生之后,下一个运算才能开始;
(4) 是流水线有装入与排空部分,当输入到流水线中的任务不多时,装入与排空部分所占的比例比较大。