一、流水线处理器 1、流水线原理
一条指令的执行可以分为取值、分析和执行3个阶段,这3个阶段的执行分别由控制器内部的取值部件、指令分析部件和指令执行部件3个独立的功能部件完成。在传统的控制器中,这3个阶段在时间上是分时进行的,即指令的3个阶段在时间上是顺序执行的,指令的这种执行方式又称为串行执行。
在串行执行方式中,n条指令的执行时间为:
T??(t取指令i?t分析指令i?t执行指令i)
i?1如果取指令、分析指令和执行指令的3段时间都相等,每段时间都等于t ,则执行n条指令的时间为:T=3nt
采用串行执行指令的方式的优点是控制简单,节省硬件。缺点是:①执行指令的速度慢。只有当上一条指令执行完毕后,才能开始下一条指令的执行,即在任何时刻,控制器中只有一条指令在执行。②功能部件利用率低。例如,在取指令时,取指部件是“忙”的,而指令分析部件和执行部件是“空闲”的。因此,串行执行指令并不能充分发挥控制器内各独立功能部件的作用。
为了克服串行执行指令的缺点,提高指令的执行速度和控制器各部件和利用率,指令的执行过程可以采用类似于工厂中的流水线装配形式,使指令的3个执行阶段在控制器各部件实现流水作业,控制器各部件总处于“忙”状态。
如果取指令、分析指令和执行指令的3段时间都相等,且每段时间都等于t,则执行n条指令的时间为:T=(2+n)t 。
上述分析是针对在一条流水线有3个独立的功能部件而言的。若一条流水线有m个功能独立的部件S1 ,S2,……,Sm,这种流水线控制器的并行程度会显著提高。
n为了充分发挥流水线的作用,流水线中的功能部件和任务必须满足以下条件:
(1)
在流水线中处理的任务必须是连续的,只有连续不断的任务才能充分发挥流水线的效率。
(2) 把一个任务(一条指令或一个操作)分解为几个有联系的子任务,每个子任
务由一个独立的功能部件来完成。
(3) 在流水线中的每一个功能部件的后面都要有一个高速缓冲器用于保存本段
的执行结果。
(4) 流水线中各段的执行时间应尽可能相等,否则将会引起“堵塞”或“断流”
现象。
(5) 流水线需要有“装入时间”和“排空时间”。只有流水线完全充满时,整个
流水线的效率才能得到充分发挥。
2、流水线分类
按并行等级技术分类,可以将流水线分为指令流水线、算术流水线和处理器流水线3种。 (1) 指令流水线
指令流的处理过程可分为取值、分析指令(译码)、取操作数、执行几个过程段,将这几个过程段并行处理的流水线称为指令流水线。目前,几乎所有的高性能控制器都采用指令
流水线。
(2) 算术流水线 对算术运算的各步骤实现并行操作,称为算术流水线。如流水线加法器、流水线乘法器、流水线快速傅里叶变换等。现代处理器中广泛采用算术流水线,如STAR-100采用4级流水运算器,Pentium处理器采用8级定点流水线和2级浮点流水线。
(3) 处理器流水线
在程序步骤上实现操作并行称为处理器流水线,有时称为宏流水线。这种流水线把两个或两个以上处理器通过存储器串行连接起来,每个处理器对同一数据流的不同部分分别进行并行处理。
3、流水线中的相关问题 所谓相关,是指在一段程序的相近指令之间存在某种关系,这种关系影响指令的并行执行。通常把相关问题分为两大类:一类是数据相关,另一类是控制相关。
(1) 数据相关
在执行本条指令的过程中,如果用到的指令、操作数、变址偏移量等正好是前面指令的执行结果,则必须等待前面的指令执行完成,并把结果写到主存或通用寄存器中之后,本条指令才能开始执行,这种相关称为数据相关。
数据相关主要有指令相关、主存操作数相关、通用寄存器相关和变址相关4种。解决数据相关的方法通常有两种:一种方法是推后分析法,在遇到数据相关时,推后本条指令的分析,直到所需的数据写到相关的存储单元中;另一种方法是设置专用路径,即不必等待所需的数据写入到相关存储单元中,而是经专门设置的数据通路读取所需要的数据。
1) 指令相关
在一个顺序执行的程序段中,当下一条指令(或若干条指令)本身的内容取决于当前指令的执行结果,就产生指令相关。
解决指令相关的根本方法是程序设计时不允许修改指令,即后续指令的内容和前面指令的执行结果无关。当然,不允许修改指令还有更重要的原因,即现代计算机设计方法要求程序具有再入性,可以被递归调用等。另外,在程序执行过程中不修改指令也有利于程序的诊断和调试。
2) 主存操作数相关 当当前指令的执行结果要写到主存,下一条指令的操作数也取自主存,并且这两个主存单元地址相同时,就发生了主存操作数相关。
解决主存操作数相关一般采用推后处理法。处理方法如图所示。第k条指令的“结果写主存A1单元”发生在一个时钟周期接近末尾处,而第k+1条指令的“读主存A1单元”请求出现在同一周期的开始位置。在设置有存储控制器的处理器中,只要把写结果的优先级安排得高于读操作数的优先级。由于存储控制器访问请求是定时进行的,它在一个时钟周期的最末尾处对这一周期的所有访问源进行排队。
在一般处理器中,对访问主存的请求,排队的优先级从高到低分别为输入输出请求、写结果、读操作数和取指令。
3) 通用寄存器数据相关
在寄存器—寄存器型(RR型)指令和寄存器—存储器型(RS型)指令的执行过程中,就可能发生通用寄存器数据相关。
发生通用寄存器数据相关的情况与寄存器本身的结构和所采用的控制时序也有关系。如
果通用寄存器是用D触发器构成,而且在通用寄存器到运算器之间建有直接数据通路,而不设置缓冲寄存器或锁存器,则不会发生通用寄存器数据相关。D触发器允许在同一节拍中实现寄存器之间的循环传送。在这种情况下,实际上不需要分析周期,在一个节拍就可以完成从通用寄存器中通过两个多路选择分别读两个操作数到运算器,操作数在运算器中完成运算,并把结果再写到通用寄存器中。
如果构成通用寄存器的不是D触发器,或者是在通用寄存器到运算器之间设置有缓冲寄存器或锁存器,则可能发生通用寄存器数据相关。在这种情况下,为了保证送入通用寄存器的数据是正确的,可以将“分析指令k+1”推后一个周期到“执行指令k”完成之后再开始,实际上是分析指令和执行指令串行进行。
4) 变址相关 在许多处理器中,把通用寄存器兼做变址寄存器使用。由于在变址寄存器中存放的变量在指令分析过程中用它来计算有效地址,因此与通用寄存器数据相关类似,有可能发生变址相关。因为计算有效地址在指令分析的一开始就进行,因此变址相关造成的后果要比通用寄存器数据相关更为严重。
解决变址相关的方法可以采用推后分析和设置专用通路两种方法。采用专用通路实际上是通过增加硬件设备来换取提高指令执行速度的一种方法。
(2) 控制相关
控制相关是指由条件分支指令、转子程序指令、中断等引起的相关。在流水线中,控制相关对流水线的吞吐率和效率的影响比数据相关要大得多,而且条件转移指令在一般程序中所占的比例相当大。中断虽然在程序中所占的比例不大,但是中断发生在程序中的哪一条指令,发生在一条指令执行过程中的哪一个功能段都是不确定的,因此处理好条件转移和中断引起的控制相关很重要。其中的关键问题有两个:一是要确保流水线能正常工作,二是减少因“断流”引起的吞吐率和效率的下降。
对于条件转移指令,一般情况下都要在指令执行到流水线的最后功能段时,转移条件才能建立,因此在条件转移指令进入流水线后,到形成转移条件前,后续指令不能进入流水线。很显然,这会使流水线的吞吐率和效率严重下降。从相关的角度来看,条件转移指令或断点指令与后续指令存在着一种相关,使它们不能同时进入流水线中执行。这种相关是一种控制上的相关,因此被称为控制相关或全局相关。
当遇到控制相关问题时,可以采用以下4种方法解决: ①延迟转移技术。延迟转移技术是在遇到转移指令时,依靠编译器把一条或几条没有数据相关或控制相关的指令调度到转移指令的后面。当被调度的指令执行完成后,转移指令的有效目标地址也已经计算出来了。
②静态转移预测技术。所谓静态转移预测是指在处理器的硬件或软件设计完成后,转移预测的方向就已经确定了,预测的方向可能是转移成功的方向,也可能是转移不成功的方向。在程序实际执行过程中,转移预测的方向不能改变。如果在硬件上设置一个目标缓冲栈及相应的控制逻辑,静态转移预测技术还可以在转移成功和不成功两个方向都预取指令。这样,转移造成的损失可以减少一些。
③动态转移预测技术。所谓动态预测技术是指控制器能够根据程序的执行过程动态地改变转移的预测方向,根据近期转移是否成功的历史记录来预测下一次的转移目标。
④提前形成条件码。对于一般的条件转移指令,转移条件码是由上一条运算型指令产生的。对于大多数情况,不必等运算完成之后,而在运算实际开始之前或在运算中间就能产生条件码,这样,转移的目标就已确定了,从而可确保预取指令的正确性。对于循环控制指令,可能通过编译器将一般的循环控制指令转变为专门的循环控制指令,并设置一个专门的条件
码寄存器,把产生条件码的运算型指令和使用这个条件码的条件转移指令分离开,只要循环体长度不是很短,循环体中所有指令再加上两条循环控制指令就可以充满流水线,流水线就不会有“断流”的情况发生,因些流水线的效率就不受影响。
相关推荐: