流水线工作方式word资料16页Word格式文档下载.docx
《流水线工作方式word资料16页Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《流水线工作方式word资料16页Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
5.2.2流水线的分级和分类
现代计算机中,流水线处理技术已经得到广泛应用,从不同角度可对流水线进行以下不同的分类、分级。
1.按处理的级别分级
流水线按处理级别可分为三级:
操作部件级、指令级和处理机级。
操作部件级流水就是将复杂的算逻运算组成流水线工作方式。
例如,可将浮点加法操作分成求阶差、对阶、尾数相加以及结果规格化等4个子过程。
指令级流水是把一条指令解释过程分成多个子过程,如前面提到的取指、译码、执行、访存及写回等五个子过程。
处理机级流水是一种宏流水,其中每一个处理机完成某一专门任务,各个处理机所得到的结果需存放在与下一个处理机所共享的存储器中。
2.流水线的分类
(1)按功能分类:
流水线按功能分类可分成单功能流水线和多功能流水线两种。
单功能流水线指的是只能实现一种固定的专门功能的流水线。
例如CRAY-1计算机就是有12个单功能流水线。
多功能流水线指的是通过各站间的不同联结方式可以同时或不同时地实现多种功能的流水线。
例如TI-ASC计算机有4个多功能流水处理器。
它共有8个站,可以按需要进行不同的连接实现定点和浮点算术运算以及多种逻辑移位操作。
多功能流水线从一种功能变为另一种功能时需要重新联结,虽然它对资源的利用率可以较高,应用时也较灵活,但它的控制比单功能流水线复杂得多。
(2)按工作方式分类:
流水线按这种分类方式可分为静态流水线(staticpipelining)和动态流水线(dynamicpipelining)。
静态流水线在同一时间内只能按一种运算的联结方式工作。
它可以是单功能流水线,也可以是多功能流水线。
静态流水线仅当指令都是同一类型时才能连续不断地执行。
当是多功能流水线时,则从一种功能方式变为另一种功能方式时,必须先排空流水线,然后为另一种功能设置初始条件后方可使用。
静态流水线的功能不能频繁地变换,否则它的效率将很低。
目前大多数计算机都用静态流水线。
动态流水线在同一时间内允许按多种不同运算的联结方式工作。
因此动态流水线必是多功能流水线,而单功能流水线必是静态的。
(3)按连接方式分类:
流水线按连接方式可以分为线性流水线与非线性流水线。
线性流水线中,从输入到输出,每个功能段只允许经过一次,不存在反馈回路。
非线性流水线存在反馈回路,从输入到输出过程中,某些功能段将数次通过流水线,这种流水线适合于进行线性递归的运算。
5.2.3流水线性能分析计算
1.技术指标
衡量流水线处理机的性能主要是吞吐率、加速比和效率。
(1)吞吐率:
吞吐率是指单位时间内能处理的指令条数或能输出的结果量。
吞吐率越高,计算机系统的处理能力就越强。
就流水线而言,吞吐率就是单位时间内能流出的任务数或能流出的结果数。
最大吞吐率是指流水线达到稳定状态后可获得的吞吐率。
如果流水线中各个子过程所需要的时间都是△t,在流水线正常满负荷工作时就会每隔△t时间解释完一条指令,即其最大吞吐率TPmax。
而实际上由于各个子过程所完成的工作都不同,所以各自的时间也不同。
为了避免各段之间经过的时间不匹配,也为了保证各段之间数据通路宽度上能匹配,通常都要在各子过程之间插入一个锁存器,这些锁存器都受同一个时钟脉冲同步,这样每个子过程所经过的时间也应将锁存器所需要的延迟包括进去。
时钟脉冲的周期对流水线的最大吞吐率会有直接影响,其值越小越好。
如果各个子过程所需的时间分别为△t1、△t2、△t3、△t4,时钟周期应当为max{△t1,△t2,△t3,△t4},则最大吞吐率可用下面公式表示:
TPmax=1/max{△t1,△t2,△t3,△t4}
即取决于流水线中最慢子过程所需要的时间,其经过时间最长的子过程称为"
瓶颈"
子过程。
例如,一个四段的指令流水线如图5.2.4(a)所示。
其中第1、2、4段所需时间均为△t,而第3段所需的时间为3At,则它的时空图如图5.2.4(b)所示。
此时最大吞吐率乃TPmax=l/3△t,说明第3段为瓶颈段。
为了提高流水线的性能,首先应寻找出瓶颈,然后设法消除此瓶颈。
解决瓶颈有两种方法:
①将瓶颈子过程进一步细分成若干个子过程,使每一子过程与其他子过程时间相等。
如图5.2.5(a)中可设法将瓶颈段S3,进一步分成S3a、S3b和S3c。
三个时间上相当于△t的子过程,即可消除此瓶颈,使最大吞吐率由1/3△t。
恢复为1/△t,当瓶颈子过程无法再细分时,可采用第二种方法。
②在瓶颈段并联设置多套功能段部件,使它们轮流工作。
如图5.2.5(b)所示,在瓶颈段S3,并联设置了3套功能部件,也可使吞吐率恢复到1/△t,图5.2.5(c)示出了相应的流水线工作时空图。
以上讲的都是流水线连续流动时能达到的最大吞吐率。
实际上,流水开始时总要有一段建立时间,此外还常常会由于种种原因使流水线无法连续流动,不得不流一段时间,停一段时间,因此实际吞吐率总比最大吞吐率要小。
假设一指令流水线由m段组成,且各段经过时间都为△t0,则第一条指令从流入到流出需要T0=m△t0的流水建立时间,之后每隔△t0就可以流出一条指令,其时空图如图5.2.3所示。
因此,完成n条指令的解释共需时间T=m·
△t0+(n-1)△t0,在这段时间里,流水线的实际吞吐率为:
可以看出不仅实际的吞吐率总是小于最大的吞吐率,而且只有当nm时,实际的吞吐率才能接近于理想的最大吞吐率。
(2)加速比:
加速比是指采用流水线方式后的工作速度与等效的顺序串行方式的工作速度之比。
对n个求解任务而言,若用串行方式工作需要时间为T1,而用m段流水线来完成此项工作需要时间为Tk,则加速比为:
当nm时,有Sp≈m,显然要获得高的加速比,流水线段数m应尽可能取大,即应加大流水深度。
通常,厂家在机器手册中提供的吞吐率都是指的最大吞吐率。
因此,如果只是让子过程进一步细分,增大m来缩短△t0,却未能在软件、算法、语言编译、程序设计上采取措施,保证连续流动的指令条数n能远远大于子过程数m,则实际的吞吐率将大大低于手册中给出的最大吞吐率。
极端情况n=l时,由于m的增大,锁存器数也增大,从而实际上增大了从流入到流出的流水线通过时间,以至于使其速度反而比顺序串行的还要低。
如果线性流水线各段经过的时间△ti不等,其中瓶颈段的时间为业△tj,则完成n条指令解释所能达到的实际吞吐率为:
其加速比
(3)效率:
效率是指流水线中的各功能段的利用率。
由于流水线有建立和排空时间,因此各功能段的设备不可能一直处于工作状态,总有一段空闲时间。
如果线性流水线中各段经过的时间相等,则在T时间里,流水线各段的效率都会是相同的,均为η0,即
所以,整个流水线的效率
其中,分母m·
T是时空图中m各段以及流水总时间T所围成的总面积,分子m·
n△t0则是时空图中n个任务实际占用的总面积。
因此,从时空图上来看,所谓效率实际就是n个任务占用的时空区和m个段总的时空区面积之比。
显然,只有当nm时,η才趋近于1。
同时还可看出,对于线性流水线,每段经过时间相等的情况下,流水线的效率将与吞吐率成正比,即
应当说明的是,对于非线性流水线或线性流水线中各段经过的时间不等时,这种成正比的关系并不存在,此时应通过画出实际工作时的时空图来分别求出吞吐率和效率。
这就是说,一般情况下,为提高效率减少时空图中空白区所采取的措施对提高吞吐率同样也会有好处的。
因此,在多功能流水线中,动态流水线比静态流水线减少了空白区,从而使流水线吞吐率和效率都得到提高。
如果流水线各段经过的时间不等,各段的效率就会不等,可用如下公式计算:
另外由于各段所完成的功能不同,所用的设备量也就不同。
在计算流水线总的效率时,为反映出各段因所用设备的重要性、数量、成本等的不同使其设备利用率占整个系统设备利用率的比重不同,可以给每个段赋予不同的"
权"
值ai。
这样,线性流水线总效率的一般公式为:
其中,分子为m个段的总的加权时空区,分母为n个任务占用的加权时空区。
对于复杂的非线性流水线,例如,对浮点加减运算器流水线,若"
对阶"
段不是采用全移位器,则每执行一个任务,在"
段可能需循环通过多次,而"
减阶"
段则只需通过一次,这时吞吐率TP和效率η就难以用一些简单的式子求出。
然而只要能画出实际工作时它的时空图,总是可以用下列式子求出实际的吞吐率和效率。
2.流水线性能指标参数计算
对流水线性能指标的计算可通过三种方法:
实测法、分析法和时空图法。
实测法是按各参数测量实际流水线通过时间和任务数之比得出。
分析法是按上面公式代入相应值进行计算,而时空图法还可以根据画出的任务图求得各参数。
例1:
设有四段流水线,△t1=△t3=△t4=△t,△t2=3△t,求选择4个任务和10个任务时的TP,η、Sp。
解:
用分析法计算,由于上述各段时间不等,则应用如下公式计算。
当n=10时,总是可以用下列式子:
用时空图法,如图5.2.6所示:
从图中可以看出,当n=4时
TP=4/((6+3*3)△t)=4/(15△t)=0.267(1/△t)
η=24△t(4*15△t)=2/5=40%Sp=4*2△t/5△t=8/5=1.6TP(1/△t)
η
Spn=4n=10n=1000.2670.3030.3340%
45%
49%
1.61.81.98
通过比较可知:
说明NM流水线性能才发挥得更好。
例2:
用图5.2.7所示的一条4段浮点加法器流水线计算Z=A+B+C+D+E+F+G+H,求流水线的吞吐率、加速比和效率,其中△t1=△t2=△t3=△t4=△t。
由于存在数据相关,要在A+B的运算结果在第4个时钟周期末尾产生之后,在第5个时钟周期才能继续开始做加C的运算。
这样,在每两个加法运算之间,每个功能部件都要空闲3个时钟周期。
这时,实际上与不采用流水线的顺序执行方式完全一样。
对原式作一个简单的变化,可得到:
Z=[(A+B)+(C+D)]+[(E+F)+(G+H)]
小括号内的4个加法操作之间,由于没有数据相关,可以连续输入到流水线中。
只要前两个加法的结果出来之后,第一个中括号内的加法就可以开始进行。
8个浮点数求和的流水线时空图如图5.2.8中所示:
从流水线的时空图中可以很清楚地看到,7个浮点加法共用了15个时钟周期。
假设每一个功能段地延迟时间均相等,都为△t,则有Tk=15△t,n=7。
则流水线的吞吐率TP为:
流水线的加速比S为:
流水线的效率η为:
例3:
设有两个向量A,B各有4个元素,若在如图5.2.9(a)所示的静态双功能流水线上,计算向量点积。
其中,1→2→3→5组成加法流水线,1→4→5组成乘法流水线。
又设每个流水线所经过的时间均为△t,而且流水线的输出结果可以直接返回到输入或暂存于相应的缓冲寄存器中,其延迟时间和功能切换所需的时间都可以忽略不计。
请使用合理的算法,能使完成向量点积A×
B所用的时间最短,并求出流水线在此期间实际的吞吐率TP和效率η。
首先,应选择适合于静态流水线工作的算法。
对于本题,应先连续计算a1×
b1、a2×
b2、a3×
b3和a4×
b4共4次乘法,然后功能切换,按((a1b1+a2b2)+(a3b3+a4b4))经3次加法来求得最后的结果。
按此算法可画出流水线工作时的时空图。
如图5.2.9(b)所示:
由图可见,总共在15个△t的时间内流出7个结果,所以在这段时间里,流水线的实际吞吐率TP为7/15△t。
若不用流水线,由于一次求积需3△t,产生上述结果就需要
4×
3△t+3×
4△t=24△t。
因此,加速比为Sp=24△t/(15△t)=1.6。
该流水线的效率可用阴影区面积和全部5个段的总时空图面积之比求得,即
虽然这个流水运算器的效率连1/3都不到,但其解题速度却提高为串行的1.6倍,而且如果向量A、B的元素数进一步增加时,还会使解题速度和效率继续提高。
用流水运算器求向量点积之所以效率不高的原因很多。
一是静态多功能流水线按某种功能进行流水处理时,总有一些本功能用不到的段处于空闲状态;
二是流水线建立过程中,本功能要用到的某些段也有部分处于空闲状态;
三是进行功能切换时,增加了前一种功能流水线的排空时间以及后一种功能流水线的建立时间。
除此之外,经常存在需要等待把上一步计算的结果经输出回到输入,然后才能开始下一步的计算,这种相关特别在标量流水线中非常普遍。
由于上述多种原因,使得不可能每拍都有数据流入流水线。
所以,流水线最适合于解具有同一操作类型,且输出与输入之间没有任何联系和相关的一串运算。
只要输入数据能连续不断地提供给流水运算器,就能使流水线连续不断地流动,当n值很大时,流水线的效率就可接近于1,实际的效率就可接近于1,实际的吞吐率就可接近于最大吞吐率,即1/n=△t。
5.2.4流水线设计技术
1.时序和缓冲
在流水线处理工作方式中,我们讨论各性能参数时有:
当指令各段处理时间相等时,设为t,当指令条数n远远大于指令段数m时,流水线的吞吐率为TP=1/t,t愈小,TP愈大。
除了尽量减少相关,减少断流外还要提高吞吐率,应使各段时间尽量相等,t尽量小。
增加流水线分段数m,可以使每段执行时间更短,但段数m愈多,由于每段之间都有锁存器,需要加的锁存器愈多,增加的设备愈多,同时使完成一条指令需要时间也加长了。
t是指令执行某一段操作需要的时间。
通常用实现这段微操作需要的逻辑门延迟时间加上走线延迟再加3%冗余量,作为估算t的参考。
在流水线执行中,各部件的执行速度是不一样的。
为使流水线能正常流动,通常增加许多缓冲器,如指令缓冲器、数据缓冲器等。
缓冲器设置多少是有限度的,太多会浪费设备,太少有时缓存数据量太少,影响流水线的正常功能。
2.相关处理
要使流水线具有良好的性能,必须设法使流水线能畅通流动,即必须能做到充分流水,不发生断流。
指令间的相关将使指令流水线出现停顿,这将影响到指令流水线的效率。
所谓指令间的相关指一条指令要用到前面的一条(或几条)指令的结果,因而这条指令必须等待前面的一条(或几条)指令流过流水线后才能执行。
通常可能会出现三种相关:
资源或结构相关、数据相关和控制相关。
(1)资源相关。
资源相关是指当有多条指令进入流水线后在同一机器周期内争用同一功能部件所发生的冲突。
例:
X6=X1+X2X5=X3+X4
两条指令同时要用到一个加法器,此时第二条指令必须等待第一条指令全部完成后才能送到功能部件中去执行。
如果加法是运算流水线,也不允许同时在同一子功能段上运行两条指令。
又如对图5.2.2的五段指令流水线。
现设有五条指令,从图5.2.10可以看出,在时钟4中,第i条的MEM段和第i+3条指令的IP段都要访问存储器。
通常,由于数据和指令存放在同一存储器中,且只有一个访问口,这样便会发生这两条指令争用存储器资源的相关冲突。
解决冲突的方法,一是停顿一拍流水线,通常是将后一条指令停顿一拍后再启动,如图5.2.11所示;
另一种办法是再重复设计一个存储器,使指令和数据分别存放在不同的存储器中。
(2)数据相关。
数据相关是在几条相近的指令间共用相同的操作数时发生的。
例如,指令部件中的某一条指令在进行操作数地址计算时要用到一个通用寄存器的内容,而这个通用寄存器的内容又要由这条指令前的另一条指令产生,但前面那条指令还未进入执行部件(还在指令队列中),还未产生通用寄存器的内容,这时指令部件中的那条指令只能停下来等待。
这就是数据相关引起的流水线停顿。
根据指令间的对同一寄存器读和写操作的先后次序关系,数据相关冲突可分为RAW、WAR和WAW三种类型。
例如,有i和j两条指令,i指令在前,j指令在后,则三种不同类型的数据相关的含义为:
RAW--指令j试图在指令i写入寄存器前就读出该寄存器内容,这样,指令j就会错误地读出该寄存器旧的内容。
WAR--指令j试图在指令i读出寄存器之前就写入该寄存器,这样,指令i就错误地读得该寄存器的新的内容。
WAW--指令j试图在指令i写寄存器之前就写入该寄存器,这样两次写的先后次序被颠倒,就会错误地使由指令i写入的值成为该寄存器的内容。
在流水线流动顺序的安排和控制方面有两种方式:
一种是顺序流动的流水线,这种流水线输出端的数据或指令流出顺序同输入端流入的顺序一样。
另一种是可以不按顺序流动的流水线,这种流水线输出端的流出顺序可以同输入端的流入顺序不一样。
对于顺序流动的流水线,只可能发生一种先写后读的数据相关。
对于在不按顺序流动的流水线中,可能发生后两种数据相关,即先读后写和先写后写的数据相关。
因为在可以不按顺序流动的流水线中,指令执行的顺序可能会起变化,后面的写指令可能越过前面的读指令或写指令,如果正好要访问同一个存储单元,就可能发生先读后写或先写后写的数据相关。
如果流水线要执行以下的两条指令
X1=X2+X3X4=X1-X5
这是一个典型的先写后读(RAW)相关。
结果寄存器的冲突
X6=X1+X2X6=X4×
X5
这是个先写后写的写写相关,两条指令都要用X6存放结果,此时第二条指令也要等待第一条指令完成后才能写。
一条指令要把结果存放到上一条指令存放操作数的寄存器中时发生的冲突。
X5=X4×
X3X4=X0+X6
这是个先读后写的写读相关。
如果这两条指令接连地送到乘法功能部件和加法功能部件中,由于加法比乘法快得多,第二条的结果X4先产生,但必须等待第一条指令做完后才能送X4。
解决数据相关的方法是采用后推法,即遇到数据相关时,就停顿后继指令的运行,直至前面指令的结果已经生成。
因此要设置专门的检查数据相关的硬件,在每一次取数时,要把取数的地址同它前面正在流水线中尚未完成写数操作的所有写数指令的写数地址进行比较,如果有相同的,说明有数据相关存在,就要推迟执行读数操作,等待相关的写数指令完成写数操作,把数真正送入主存或通用寄存器后才能取数。
显然,这将使流水线有较长的停顿。
另一种解决方法是采用定向技术,又称为旁路技术或相关专用通路技术。
即在指令流水线中的读数和写数部分之间设置直接传送数据的通路,使在执行部件向主存或通用寄存器存数的同时,可以把数直接送到正在等待取这个数的指令部件中去。
如果有几条指令都在等待,则可以同时送到这几条指令的相应位置上去。
假设流水线要执行五条如图5.2.12中所示的指令,其中第一条的ADD指令将向R1寄存器写入操作结果,后继的四条指令中都要使用R1中的值作为一个源操作数。
显然,这时就出现了RAW数据相关。
在WB段的末尾,ADD指令的执行结果才写入R1,而后继的指令除XOR外,都需要在此之前使用R1中内容。
采用后推法,则会使流水线停顿三拍。
从图中可见,实际上要写入R1的ADD的操作结果在EX段的末尾处已形成。
如果设置专用通路将此时产生的结果直接送往需要它的SUB、AND和OR指令的EX段,就可使流水线不发生停顿。
显然,此时要对三条指令进行定向传输操作。
为了减少这种操作的次数,可将ID段中的读寄存器堆操作安排在后半部分,而将WB中的写寄存器堆操作安排在前半部分。
这样如图5.2.13所示,对OR指令的定向传输操作就可以取消了。
图5.2.14(a)中示出了这种定向传送的示意图。
图5.2.14(b)中则给出了带有旁路部件的ALU。
图中有两个结果缓冲寄存器,它的内容反映了图5.2.13中AND指令将进入EX段时的情况,此时ADD中生成的结果已进入第二个缓冲寄存器中,即将写入寄存器堆中R1,SUB中生成的结果已存入第一个缓冲寄存器中,此时,第二个缓冲寄存器内容(存放送往R1的结果)可通过旁路通道经多路开关送到ALU中。
这里的定向传送仅是发生在ALU内部。
有时,这种定向传送也可在ALU与其他部件间进行。
(3)控制相关。
控制相关是无条件转移和条件转移引起的,统计表明,转移指令约占总指令的1/4左右。
因此,比起数据相关来,它会使流水线丧失更多的性能,必须很好地处理。
3.转移处理
(1)无条件转移指令。
无条件转移指令可以在指令译码时发现。
在发现无条件转移指令后,指令缓冲寄存器中在无条件转移指令以后的一些预先取出的指令都要作废掉,然后按转移地址重新读取新的指令序列。
在这种情况下,如果指令队列中没有足够的可供执行部件取用的指令,执行部件则可能要停顿。
总之,由于有指令队列的缓冲,无条件转移不一定会引起执行部件的停顿,因此它对指令流水线效率的影响还比较小。
(2)条件转移指令。
条件转移指令虽然在指令流水线前端的指令译码时就能发现,但是确定转移方向的条件码却要在指令流水线的末端的执行部件中产生,才能决定是否实现转移。
所以一旦在指令部件中发现条件转移指令,指令部件就要停顿下来,等待转移指令前面一条指令在执行部件中执行完毕,产生条件码以后,才能确定转移方向,这时整个流水线已经为空,没有指令在里面流动。
如果转移成功,执行新的指令流,就要从指令部件预取新指令开始。
如果转移不成功,指令部件中原来预取的指令还有用,但也要从指令部件分析指令开始。
等到指令流到执行部件时,执行部件已经停顿了相当一段时间,所以条件转移指令对流水线效率影响较大。
为了改进由于条件转移指令引起的流水线断流现象、减少条件转移指令造成的执行部件停顿时间,一般有以下几种措施。
这些措施有的也可以几项并用。
①猜测法:
指令部件发现条件转移指令后,在等待执行部件执行完指令队列中的指令并产生条件码后的这一段时间里,指令部件仍按固定的方向继续预取指令,或者按转移成功的方向预取,或者按转移不成功的方向预取。
等到产生条件码后,如果同猜测的转移方向一致,指令缓冲寄存器组中预先取出的指令可