2.6.3 浮点运算流水线
时间:2010-09-22 来源:yuxinlen
2.6.3 浮点运算流水线
1.流水线原理
计算机的流水处理过程同工厂中的流水装配线类似。为了实现流水,首先必须把输入的任务分割为一系列的子任务,使各子任务能在流水线的各个阶段并发地执 行。将任务连续不断地输入流水线,从而实现了子任务的并行。因此流水处理大幅度地改善了计算机的系统性能,是在计算机上实现时间并行性的一种非常经济的方 法。
在流水线中,原则上要求各个阶段的处理时间都相同。若某一阶段的处理时间较长,势必造成其他阶段的空转等待。因此对子任务的划分,是决定流水线性能的一个关键因素,它取决于操作部分的效率、所期望的处理速度,以及成本价格等等。
假定作业 T 被分成 k 个子任务,可表达为
T={T1,T2,···,Tk}
各个子任务之间有一定的优先关系:若i<j,则必须在Ti 完成以后,Tj才能开始工作。具有这种线性优先关系的流水线称为线性流水线。线性流水线处理的硬件基本结构如下图所示。
图中,处理一个子任务的过程为过程段(Si)。线性流水线由一系列串联的过程段组成,各个过程之间设有高速的缓冲寄存器(L),以暂时保存上一过程子任务处理的结果。在一个统一的时钟(C)控制下,数据从一个过程段流向相邻的过程段。
设过程段 Si所需的时间为τi,缓冲寄存器的延时为τl,线性流水线的时钟周期定义为
τ=max{τi}+τl=τm+τl (2.44)
故流水线处理的频率为 f=1/τ。
在流水线处理中,当任务饱满时,任务源源不断的输入流水线,不论有多少级过程段,每隔一个时钟周期都能输出一个任务。从理论上说,一个具有k 级过程段的流水线处理n 个任务需要的时钟周期数为
Tk=k+(n-1) (2.45)
其中k个时钟周期用于处理第一个任务。k个周期后,流水线被装满,剩余的n-1个任务只需n-1个周期就完成了。如果用非流水线的硬件来处理这n个任务,时间上只能串行进行,则所需时钟周期数为
TL=n·k (2.46)
我们将TL和Tk的比值定义为k级线性流水线的加速比:
(2.47)
当 n>>k 时, Ck->k 。这就是说,理论上k级线性流水线处理几乎可以提高k倍速度。但实际上由于存储器冲突、数据相关,这个理想的加速比不一定能达到。
2.流水线浮点加法器
从图2.16可以看出,浮点数加减法由0操作数检查、对阶操作、尾数操作、结果规格化及舍入处理共4步完成,因此流水线浮点加法器可由4个过程段组成。图2.18仅示出了除0操作数检查之外的3段流水线浮点加法器框图。
假设有两个规格化的浮点数
X=1.1000×22 Y=1.1100×24
当此二数相加时,因X具有较小的阶码,首先应使它向Y对阶,从而得到X=0.0110×24,然后尾数再相加,即
其结果要进行规格化,将尾数向右移1位,阶码加1。即规格化的结果为1.0001×25。
在图2.18所示的流水线浮点加法器框图中,标出了上述例子在每一个过程段和锁存器L中保存的流水运算结果值。
[例29]上述演示中 ,(1)假设每个过程段所需的时间为:求阶差τ1=70ns,对阶τ2=60ns,相加τ3=90ns,规格化 τ4=80ns,缓冲寄存器L的延时为tl=10ns,求4级流水线加法器的加速比为多少?(2)如果每个过程段的时间相同,即都为75ns,(包括缓冲寄存器时间),加速比是多少?
[解:]
(1)加法器的流水线时钟周期至少为
τ=90ns+10ns=100ns
如果采用同样的逻辑电路,但不是流水线方式,则浮点加法所需的时间为
τ1+τ2+τ3+τ4 =300ns
因此,4级流水线加法器的加速比为
Ck=300/100=3
(2) 当每个过程段的时间都是75ns时,加速比为
Ck=300/75=4
[例30] 已知计算一维向量x,y的求和表达式如下:
试用4段的浮点加法流水线来实现一维向量的求和运算,这4段流水线是阶码比较、对阶操作、尾数相加、规格化。只要求画出向量加法计算流水时空图。
[解:]
运算流水线对向量计算显示出很大的优越性,即流水线被填“满”时具有较高的加速比和吞吐率。我们用字母 C,S,A,N 分别表示流水线的阶码比较、对阶操作、尾数相加、规格化四个段,那么向量加法计算的流水时空图如下所示。图中左面表示Xi,Yi两个元素输入流水线的时间,右面表示求和结果Zi输出流水线的时间。流水线填满后,每隔一个时钟周期,流水线便吐出一个运算结果。