收藏 分享(赏)

第四章 流水线技术.doc

上传人:tkhy51908 文档编号:8157558 上传时间:2019-06-11 格式:DOC 页数:88 大小:1.52MB
下载 相关 举报
第四章 流水线技术.doc_第1页
第1页 / 共88页
第四章 流水线技术.doc_第2页
第2页 / 共88页
第四章 流水线技术.doc_第3页
第3页 / 共88页
第四章 流水线技术.doc_第4页
第4页 / 共88页
第四章 流水线技术.doc_第5页
第5页 / 共88页
点击查看更多>>
资源描述

1、第四章 流水线技术计算机系统结构研究、分析的目的就是为了提高计算机性能,为此,我们采用了许多提高性能的设计思想和技术。流水线技术就是其中最重要的设计思想之一。流水线技术在现代的计算机系统结构中是最普遍的一种技术。流水线技术的基本思想在冯诺依曼(Von Neu mann)归纳的第一台存储程序计算机中已经提出。1946 年 Burks 等人提出的运算与输入输出重叠操作是当今计算机中广泛使用的流水线技术的原始雏形。尽管冯诺依曼没有在他设计的第一台计算机中实现输入输出功能,但当磁芯存储器第一次出现,并作为主要存储介质后,流水线设计思想迅速发展。磁芯存储器速度要比寄存器和控制单元中的晶体管器件慢 10

2、倍以上。为解决主存与 CPU 执行速度之间的瓶颈问题,设计者们研究了很多种方法,使CPU 执行指令的同时,进行一个或多个并发存储器访问。INTEL8086 的两级流水就是为了提高存储器及总线的使用效率而设计的。60 年代,硬件的价格相对较高。流水线技术都用于巨型计算机。IBM 的STRETCH 和 CDC6600 是早期大量应用流水线技术的计算机,它们对后来的计算机系统结构设计有深刻的影响。随着半导体技术的发展,到 80 年代硬件价格大幅度下降,流水线技术在计算机设计中广泛应用,即使在微处理芯片中也是很基本的性能提高措施。INTEL80i86 系列的发展是很好的一个例子。这里要注意的是流水线技

3、术在 RISC设计思想产生前已有广泛使用,只是在 RISC 设计思想中流水线技术采用更广泛而已。4.1 流水线处理的基本原理流水线的作用是提高硬件功能部件的使用率,减少指令的平均执行时间。4.1.1 流水线的基本概念4.1.1.1 什么是流水线技术流水线(pipelining )是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。今天,流水线是制造高性能 CPU 的关键技术。这种技术和并行处理有所区别,流水线是在顺序指令流计算机中实现处理时间重叠的技术,因此流水线的并行处理是指完成一条指令的各个部件在时间上是可以同时重叠工作。因此,各部件同时处理是针对不同指令而言的,各部件分别同时为

4、多条指令的不同部分(step、stage)进行工作,以提高各部件的利用率来提高指令的平均执行速度。计算机流水线概念就象工厂里的装配生产线,每一个工位完成一个部件的装配,前一个工位装配完,传送带将对象带到下一个工位装配,此过程重复进行直到所有工位都流过,产品就被装配完了。指令流水执行是将指令执行分成几个子过程,每一个子过程对应一个工位,我们称为流水级或流水节拍(pipe stage 或 pipe segment) ,这个工位在计算机里就是可以重叠工作的功能部件,称为流水部件。这些不同的功能部件同时重叠处理不同指令的不同子过程。流水级一个连着一个形成一个流水线,一条指2令流过所有的流水级,就完成了

5、它的任务。流水线提高执行指令的能力可以用吞吐率(throughput)来表示。计算机流水线的吞吐率是指单位时间内进出流水线的指令数。流水可以提高吞吐率。由于流水级是相互连接在一起,每一级完成都进入下一级,因此,所有的流水级必须在相同的时间内完成各自的子过程,在流水线中指令流动一步是一个机器周期(machine cycle) 。因为要保证所有流水级在同一时间内处理完自己的工作,机器周期的长度必须由最慢的流水级部件处理子过程所需的时间决定。RISC 技术要求一个机器周期等于一个时钟周期,那么这个时钟周期必须是多相的或多拍的。由时钟的一相或一拍控制一个流水级的移动。流水线设计最难的任务是确定每个流水

6、级功能部件处理的时间长度,平衡每一流水各处理部件的处理时间。在理想条件下,流水线计算机每条指令的平均执行时间是:每条指令平均执行时间 非 流 水 计 算 机 上 指 令 执 行 时 间流 水 线 深 度其中流水线深度是指流水线中总的流水级的数目。在这种条件下,流水线计算机的加速比(Speedup)就等于流水级的深度。实际情况中,流水线中的各级功能部件处理子过程的时间之间是很难平衡的。此外,流水线还包含一些其它的开销。因此,流水线上每条指令的平均执行时间并不是理想情况下的最小值,只是一个接近值。流水线只能减少每条指令的平均执行时间,一条指令的实际执行时间要经过所有流水级,其实际执行时间有可能比未

7、流水时还要长。今后如无特殊说明,在流水线机器上说指令的执行时间,都是指指令的平均执行时间。流水线减少指令平均执行时间可以看作是减少了每条指令的时钟数(CPI) ,也可以看作是减少了时钟周期时间,这主要取决于我们的着眼点:如果某机器每条指令化费的是一个长时钟的周期,那么流水线减少了时钟的周期时间。4.1.1.2 流水线的描述流水线处理器的基本结构形式如图 4-1 所示。其中 Si(Stage)为各流水部件,Li( Lock)为锁存器,C(Clocks)为每个流水部件处理结果进入下一级的控制时钟,其时钟周期(或节拍周期)ti 为一个流水部件处理子过程的时间 t si 加上延迟时间td。L0 L2

8、L3 Lm-1 Lm输入 S1 S2 Sm 输出C图 4-1 流水线处理基本结构由前所述,节拍时间是固定的,则流水级时钟周期应为:Tmaxtsitd我们可以将指令流水执行归纳为如下特点:1. 一条指令分成几个子过程,每个子过程为一个流水级,这些子过程的处理部件在流水时钟控制下组成了流水线。32. 每个子过程由专门的硬件功能部件来完成。这个功能部件和其它的功能部件在工作时间上是重叠的。称这些功能部件是流水功能部件。3. 每个流水功能部件的工作时间是不相同的,流水节拍时间由最长的流水功能部件处理时间决定。4. 流水线工作一般有三个阶段:建立、稳态和排空阶段。5. 理想情况下,在流水线处于稳态时,每

9、一流水节拍时间都得到一条指令执行的结果,流水加速比(Speedup)就等于流水线的级数或流水深度。6. 流水线适用于大量重复性的、可分离的处理过程,顺序计算机的指令执行过程就是重复处理的过程。为了方便流水线处理器结构的分析,我们采用时空图来描述,如图 4-2,其中纵坐标为空间(即各流水级) ,横坐标为时间(流水节拍) 。方格中的数字说明该时间、空间的任务号。S4 1 2 3 4 5 n-1 nS3 1 2 3 4 5 n-1 NS2 1 2 3 4 5 n-1 nS1 1 2 3 4 5 n-1 nt1 t2 t3 t4 t5 tn tn+3 时间图 4-2 流水线处理的时空图但这种描述方法对

10、流水线中指令执行过程的分析很不方便,因而在分析流水线指令执行过程中,我们用指令流水状态图表来描述,这样对指令执行过程情况一目了然。如图 4-3 所示,其中横向表示流水节拍,纵向表示指令序列,图中指令执行状态由符号表示。指令序列 流 水 时 钟 数1 2 3 4 5 6 7 8 9指令 i IF ID EX MEM WB指令 i+1 IF ID EX MEM WB指令 i+2 IF ID EX MEM WB指令 i+3 IF ID EX MEM WB指令 i+4 IF ID EX MEM WB图 4-3 流水状态图这里我们假定处理器分 5 个流水功能部件。如果用流水状态图表描述流水线指令执行过程

11、引起误解或不能说明问题时,我们采用流水功能部件和流水寄存器来代替指令流水状态图表中的执行状态,如图 4-10。4.1.1.3 流水线的分类从不同角度观察,流水线可以有多种分类方法。1.按处理的级别分类可以有:操作部件级、指令级及处理器级三种。操作部件级是将一些较为复杂的算术与逻辑运算,组成流水线处理方式,如高速乘法、浮点运算等。指令级流水是将4一条指令的执行过程分为多个阶段,如前面所述的时间上重叠执行,同时执行多条指令即形成了指令流水。处理器流水线是指对于相同类型的数据流进行处理,每一个处理器完成其专门的任务,各处理器的结果存放在两个处理器之间的存储器中,如图 4-4所示。M1 P1 M2 P

12、2 M3 P3 M4T1 T2 T3图 4-4 处理器级流水 M:存储器 P:处理器 T:任务2.按完成的功能分类有单功能流水线和多功能流水线。单功能流水线只完成一种功能,如乘法或浮点运算;多功能流水线可以完成多种功能,其功能段可以按照不同功能的要求联接,当然功能段的种类比较多。如图 4-5所示,流水线中包括了八个功能段,如果要完成浮点运算,可按图 4-5(b)连接流水;如果完成乘法,则可按图 4-5(c)方式连接流水。1 输 入 输 入 输 入2 求阶差 求阶差3 对 阶 对 阶4 相 加 相 加5 规格化 规格化6 相 乘 相 乘7 累 加 累 加8 输 出 输 出 输 出(a) (b)

13、(c)图 4-5 美国 TI-ASC 多功能流水线(a)流水线功能级 (b)浮点加减时的流程 (c )定点乘法时的流程3.按联接的方式分类在多功能流水线中,根据功能的连接方式不同,可分为静态流水线与动态流水线。静态流水是指在同一个时间内,多功能结构中只能按一种功能的连接方式工作,这对于大量数据进行相同处理来说,具有很好的效果。但是遇到不同功能的交替处理时(如在图 4-5 结构中进行乘法与浮点相加交替运算) ,流水线就失去其优点,运算速度与顺序处理方式没有什么区别。动态流水线是指在同一个时间内,可以有多种功能的连接方式同时工作。如图 4-5 中多个功能段,其中一些功能段正在实现乘法运算,同时其它

14、功能块还可以进行浮点运算或完成别的功能,这种方式的流水工作效率最好,但是控制也变得很复杂。4.按处理的数据类型分类可以分为标量流水线与向量流水线。所谓标量就是除向量数据表示之外的其它数据类型。标量流水线就是指所处理的数据类型中不包含向量数据的流水线。向量流水线,则是专用来处理向量数据的。5.从流水线结构上分类5可以分为线性流水线与非线性流水线。所谓线性流水线,是指各功能块顺序串行连接,无反馈回路;前面所述各种流水线均属此类。非线性流水线是指带有反馈回路的流水线,在流水线上流动的数据流也是非线性的。如图 4-6(a)所示,其正常流水顺序是 S1S2S 3,而在该结构中,每一个功能段都可以输出,而

15、各功能段之间除了寄存器外,还增加了一个多路选择器,可以选择不同的输入。如果在该流水线中完成A、B 两个功能,而 A、B 都需要反馈处理。其数据流的流向由图 4-6(b)中两表给出.。可以看出,对于功能 A,流水线的顺序为 S1S2S3S1S3S3S 1S2,由 S2 得到输出。而功能 B,其流水线的顺序为 S1S3S2S 3S1S2S3,由 S3 得到输出。非线性流水线,通常是一个多功能流水线,多用于递归处理,这种结构对控制的要求很高,也很复杂,除了以前所述需要进行多功能的不同连接外,其输入数据的时间也难以控制,既要发挥流水的优点,又要解决功能段可能冲突的问题。S1 S2 S3 M1 M2 M

16、3L1 L2 L3(a)非线性流水线t0 t1 t2 t3 t4 t5 t6 t7S1 A A AS2 A A (A)S3 A A AS1 B BS2 B B (B)S3 B B B(b)调度预约表图 4-6 M:多路选择器 L:锁存器 S:功能部件4.1.2 基本处理器流水线对于第三章介绍的处理器,只要略加改变就可成为一个简单的流水线处理器。我们将基本处理器的五个执行步骤改为 5 个流水节拍,就形成具有 5 级流水深度的流水线结构处理器,每个节拍为一个时钟,可以启动一条指令,如图 4-7 所示。每条指令需流过个节拍,个时钟才能完成。每个时钟期间硬件将启动一条新指令,流水线中个硬件功能将执行条

17、不同指令的某些子过程。指令序列 流 水 时 钟 数1 2 3 4 5 6 7 8 9指令 i IF ID EX MEM WB指令 i+1 IF ID EX MEM WB指令 i+2 IF ID EX MEM WB6指令 i+3 IF ID EX MEM WB指令 i+4 IF ID EX MEM WB图 4-7 MIPS R2000 的整数流水线其中: IF 取指 ID 译码和取寄存器操作数EX 执行或有效地址计算 MEM 存储器访问WB 写回在这个简单的指令流水状态图中,我们首先来看一下,在一个流水节拍中机器到底做了些什么事情。我们发现:基本处理器进行流水处理时,无法要求数据通路(datap

18、ath)上的一个硬件单元在同一时刻做两个不同的操作。例如:单个 ALU 不能同时进行有效地址计算和加法运算操作。因此,要保证流水线顺利进行,必须消除指令重叠执行时的这种冲突。基本处理器要经过改进才能成为流水线处理器。4.1.2.1 基本流水线的工作过程简单的 RISC 处理器的指令集不是很复杂,我们可以来分析一下,处理器在工作时的硬件资源使用情况。图 4-8 显示了一个级流水的简单处理器数据通路的流水工作过程。图中表明了主要功能单元在不同节拍中的使用情况和多指令重叠执行所带来的相应冲突。我们可以看出,图中时钟周期(CC5)至少有如下几种冲突:图 4-8 基本流水线部件工作首先,取指令和数据存取

19、操作都要使用存储器。可以使用分离的数据和指令存储器,典型的实现方式采用分离的指令 CACHE 和数据 CACHE,如 pentium 芯片就采用这种方式。使用分离的 CACHE 消除了用单一的存储器时出现的冲突。但要注意一点,如果流水线的时钟周期等于非流水线的时钟周期,那么存储器的带宽要增加 5 倍,即非流水时最多 5 个时钟访问两次存储器,流水时一个时钟访问 5 次。第二,寄存器组有两个流水级要使用:其一是在译码级(ID) ,其二是在回写级(WB) 。在不同的位置上使用情况是不同的。由于只有一个寄存器口,在每个时钟周7期内要完成一次读和一次写会产生冲突。如图中半实线框所示。在一个节拍中对同一

20、个寄存器进行读和写是也会有冲突。这个问题我们在后面讨论。第三,图 4-8 中没有画出程序指针 PC 的工作情况,实际上每个时钟启动一条新指令,都必须将指针增加一个值并将其保存起来,为下一条指令的取指级(IF)作准备见表 4-1。这样我们必须重新考虑转移影响的问题,因为转移 PC 值要到 MEM 级才完成计算。这在非流水线的数据通路中是不成问题的,但流水线的数据通路要在取指级(IF)将转移的 PC 指针值修改好,即要提前知道转移的目标地址值。这个问题在控制冲突这一节中将详细讨论。表 4-1 对应图 4-8 的 RISC 计算机流水工作资源使用情况表流水级 PC 指针部件 存储器 数据通道IF P

21、CPC+4 IRMemPCID PC1PC IR1IR ARs1; BRs2EX DMAR A+(IR1 16)#IR11631;SMDRB;16orALUoutputA op (B or (IR116)#IR11631);16orALUoutputPC1+(IR116) #IR11631);16cond( A op 0)MEM if ( cond) PCALUoutputLMDRMemDMARorMemDMARSMDRALUoutput1ALUoutputWB Rd ALUoutput1 or LMDR第四,在 ALU 中加法器在一个节拍中可能有如下三种情况要使用到(见表 4-1):1.在取

22、指级中计算 PC 指针值。2.计算存储器数据存取的有效地址。3.ALU 操作中的算术或逻辑运算。在正常情况下,存储器访问的有效地址计算和 ALU 的本身操作不会发生冲突(不会有两个 EX 级在同一时钟周期内出现) 。只有 PC 指针值的计算会出现冲突。最后,因为在每个时钟周期,每一个流水级都是在工作的,而所有在流水线相应级中的指令都必须在一个时钟内完成,且任何操作的组合都可能在同一时刻发生,因此,流水线上每一个流水部件的处理结果都必须放在寄存器里才能从前一流水级进入到下一流水级。这个寄存器在每个流水级之间称为流水线寄存器(Pipeline Registers)或流水线锁存器(Pipeline

23、Latches) 。图 4-9 是对第三章介绍的基本处理器进行修改后的基本流水线处理器。8图 4-9 图中用流水寄存器分隔了各流水执行单元,非常清楚地指出了指令执行是通过流水锁存器从一个流水部件进入到另一个流水部件。每个流水寄存器其实包含有一组寄存器,而不仅仅是一个,每个执行单元本身已有的保存暂存值的寄存器都可以作为流水寄存器。例如,指令寄存器(IR)就是取指级和译码级之间的流水寄存器 IF/ID。下一级要使用的所有值都必须存放在流水寄存器中。有时前面的流水级部件所需的值是由后面流水级执行结果提供。例如取数指令或 ALU 操作中的目的操作数寄存器,接收来自 MEM/WB 的流水寄存器数据,而不

24、是来自 IF/ID 流水寄存器数据。因为取数指令或 ALU 操作是将指令的结果写入寄存器,而不从它的前级 IF 接收数据。而指令码的目的寄存器段简单地从一级流水寄存器传送到另一级执行单元,送到 WB 级给其使用。流水线中某一时刻流水级可能执行任何指令,也就是说在一对流水寄存器之间,会出现代表各种指令执行的事件组合。首先我们要知道不同的指令进入流水线后,在一个流水节拍或一个机器时钟中,处理器到底做了那些事情。表 4-1 列出了每个流水级在同一机器时钟下处理器所作的工作。表中用流水线寄存器指出了和图 4-9 对应的不同指令执行时数据从一个流水级流入下一个流水级的全过程。这里值得注意的是,流水线的开

25、头两级的工作情况是和当前执行的指令类型无关的。任何指令进入这两级工作情况都是一样的,因为指令要在 ID 级结束时才译码完毕,因此,在这两级中机器做的工作必须和指令类型无关。在 IF 级:取指令和计算新 PC 值,保存新 PC 值在流水寄存器中,供后面计算转移目标地址时使用。在 ID 级:选通寄存器并用符号位扩展指令寄存器 IR 的低 16 位,将 NPC 和 IR 传入 ID/EX 流水寄存器。在 EX 期间:完成 ALU 操作和地址计算,并将指令寄存器 IR 和 B 寄存器(Store指令)传入 EX/MEM 流水寄存器。在 MEM 级: 访问内存,作出转移决定;如果需要,改写 PC 值,并

26、将所需值传送到最后一级。9最后在 WB 级:用 ALU 输出或 Load 指令的结果修改目的寄存器值。在整个流水过程中,指令寄存器始终从一级传送到下一级,对它的使用也随之越来越少。但 IF 级依赖指令执行到 EX/MEM 时是否发生转移,如果发生转移,那么目标地址用来取指和计算下一条指令 PC 值。否则用当前 PC 值取指和计算下一条指令 PC 值。转移影响会导致流水线工作复杂,我们将在后面专门分析。从表中我们看出指令代码中固定源寄存器操作数编码位置是很有用的,它可以在译码的同时选通指令要使用的源寄存器。图 4-9 中我们还看到有 4 个多路选择电路,它是用来控制这个简单的流水线工作的。在 A

27、LU 流水执行级, 2 个多路选择电路用来控制不同类型指令的数据进入 ALU运算器,多路选择电路则由 ID/EX 流水寄存器中的指令寄存器控制。这两个多路选择电路的上部输入端用来输入计算机转移指令的目标地址的数据,由指令是否转移来控制;而下部输入端则用来输入 r-r 型的 ALU 操作类型的数据,由其相应的指令来控制。IF 级的多路选择电路从当前的 PC 值以及 EX/MEM 流水寄存器送过来的转移目标 PC值中选出一个,作为取指令的地址,这个多路选择电路由 EX/MEM 流水寄存器的条件位来控制。第 4 个多路选择电路由 WB 流水级的指令是取数还是 ALU 操作来控制。除了这 4 个多路选

28、择电路外,还有一个多路选择电路,在图 4-9 中没有画出来,前面提到:目的寄存器操作数根据指令类型有两个不同的来源,因此在 WB 级要有一个多路选择电路,用来选择正确的目的操作数的端口,它由 MEM/WB 级流水寄存器中的 IR寄存器来指定是选择指令寄存器 IR 中的立即数,还是选择 ALU 操作的目的寄存器操作数。4.1.2.2 流水线的基本性能流水线增加了 CPU 的指令吞吐率单位时间内完成的指令数,但它不减少单条指令的执行时间。而事实上还略微增加了每条指令的执行时间,这是因为流水线控制需要化费一些时间。增加指令的吞吐率意味着整个程序运行加快、总执行时间减少,并不是单条指令执行加快。单条指

29、令的实际执行时间没有减少,其原因除流水线延时外,还来自流水级之间执行时间、流水线开销的不平衡。这种不平衡降低了指令执行的性能,因为机器时钟比工作最慢的流水执行部件还要慢。流水线开销主要是因为流水线寄存器延时和时钟上升沿引起。流水线寄存器或锁存器延时加上脉冲上升建立时间增加了时钟周期。时钟上升沿决定了时钟周期的最短极限。若一个时钟周期与时钟的上升和锁存开销之和相同,则流水线是不能工作的,因为一个时钟已没有多余的时间用来给流水执行部件工作了。例.假定 RISC 流水线计算机,时钟周期是 10ns,ALU 操作和条件转移要 4 个时钟周期,而存储器访问操作要 5 个时钟周期。这三种指令操作的使用概率

30、相应是40%、20%和 40%。假设由于时钟上升和建立,流水线机器每个时钟要增加 1ns 的开销。忽略任何其它延时影响,问 5 级流水线机器可以获得的加速比是多少?解:非流水线计算机平均每条指令执行时间是:TimeupCPInss104%20)45( ).10用流水线实现,时钟必须运行在最慢的流水执行的脉冲开销上,这个值是:10111ns,此时每条指令平均执行时间是:Timepnss15则流水线计算机的 Speedup 是:Sduns非 流 水 平 均 指 令 执 行 时 间流 水 平 均 指 令 执 行 时 间 倍41这个 1ns 的开销限制了流水线的效率。如果非流水计算机的 CPI 已经是

31、 1,那么流水将带来更小的时钟周期。前面介绍的数据通路只是简单地移去锁存器并让数据从一个执行周期流入到下一个执行周期,那么流水线计算机和这种单周期计算机比较其加速比又是多少呢?例.假定机器指令执行需要个功能单元,这个单元的操作所需时间分别是10ns、8ns、10ns、10ns 和 7ns。假定流水要增加 1ns 的开销。求出流水相对于单周期指令的机器的加速比。解:非流水计算机执行所有指令都用单个时钟,它的每条指令平均时间直接是时钟周期的时间。时钟周期时间等于每一步的执行时间之和:Timeuns108745在流水线机器上的时钟周期必须是流水线中执行时间最长的流水部件的执行时间(10ns) ,再加

32、上 1ns 的开销,总共是 11ns。因为要求 CPI=1,产生的平均指令执行时间也是 11ns,故Speduns451.倍一般认为,流水线改善了 CPI,也可以把它看作是增加了时钟频率尤其是和其它流水线机器比较,但有时候也可以看作两者都得到改善。因为在流水线中,影响时钟频率主要是锁存器,设计者们希望找到一个可以使用很高时钟频率的锁存器。Earle 锁存器(J.G.Earle 1965 年发明)有三个特性在流水线中很适用。第一,它对时钟上升边沿十分敏感;第二,通过锁存器时的延时是一个常数:双门延时(two-gate delay) ,避免了数据通过锁存器时用上升沿触发;最后,锁存器中可实现两个逻

33、辑电平而不增加延时时间。即流水线中两个逻辑电平可以用锁存器重叠,因此来自锁存器的主要开销可以隐含在其中。 对上述基本流水线处理器,如果程序中均是整数指令且每条指令和其它指令之间在流水线中不相关,它的功能可以很好地发挥。但实际上流水线中的指令之间可能是相关的,这将影响流水线的性能。在浮点流水中这种相关情况更复杂。下面几节将讨论这些问题。4.2 流水线工作的主要障碍流水线竞争在流水线中工作的指令流,由于某种原因,阻碍了流水部件在指令的一拍时间(或一个时钟)内完成应有的操作,我们称这种现象为流水线竞争(hazards) 。竞争导致流水线性能下降,使加速比远小于理想情况。流水线中竞争有三种:结构竞争:

34、由资源冲突引起。当多条指令进入流水线后,硬件不能支持所有可能的指令组合形式同时重叠执行。11数据竞争:由指令间数据相关而引起。某条指令的执行依赖于前面指令的执行结果,而指令的流水重叠操作使当前指令对数据使用时间提前了,而此时前面指令的执行结果还没有完成。控制竞争:由指令指针 PC 值的改变而引起。流水线中出现条件转移及其它要改变PC 指针的指令都将改变流水线中的后继指令。4.2.1 流水线竞争时的性能流水线中的竞争使我们要暂时停止(stall)流水线前进,延长这一拍的工作时间。这种情况要比非流水时延时更复杂。在流水线中消除竞争要使一部分指令延时,而另一部分指令可以继续执行。为了讨论方便,我们假

35、设如果有一条指令被延长一拍,这个指令后的所有在流水线中指令均延时一拍。而在这条指令之前的流水线中的指令必须继续执行,这样在停顿期间,IF 级不工作,没有新指令进入流水线。在流水线中插入停顿(stall) ,进一步降低了理想流水性能。根据前面流水线加速比定义,我们可以得出在流水竞争延时的加速比公式: Spedu CPIupTCPIupT 非 流 水 时 平 均 指 令 执 行 时 间流 水 时 指 令 执 行 时 间式中:CPI-up 为非流水时的 CPI。Tup 为非流水时的时钟周期。CPI-p 为流水时的 CPI。Tp 为流水时的时钟周期。从上式中我们可以更明白地看出流水线技术性能是由项乘积

36、构成。前一项反应了 CPI 的减少情况,第二项反应了时钟频率的提高情况。因此可以看作流水线是减少了 CPI 或时钟周期或两者都减少。如不加说明,以后都用 CPI 来比较流水线性能。理想的流水线机器的 CPI 等于,因此流水线机器的实际 CPI 为:CPI-pCPIiCstall1Cstall式中 CPIi 为理想 CPI,Cstall 为流水线中每条指令的停顿数,如果忽略流水线所带来的时钟周期的额外开销,并假定各流水部件工作时间是完全相同的,那么流水和非流水两台计算机的时钟周期是相等的,加速比可表示成: SpeduPIpstal1最简单的情况,当所有指令的时钟数都相同,即都等于流水线级数(流水

37、线深度) 。此时非流水线的 CPI 就等于流水深度,加速比可表示为: SpeduCstald1其中 Pd 为流水深度。如果没有流水线停顿,加速比就等于流水线深度。如果要分析流水线改善时钟周期时间,那么我们可以假设非流水机器的 CPI 和流水机器的 CPI 均为 1,加速比可表示为: SpeduCPIpTuCstalTup 112和上面的分析一样,如果各流水级工作是完全平衡的,且流水不增加时钟开销。那么流水线机器的时钟周期要比非流水线机器时钟周期短,其值为流水深度: TpuPd则加速比又可以表示为: SpeduCstalTupCstalPd11如果没有等待,同样可以得出加速比等于流水深度。4.2

38、.2 结构竞争及防止措施在流水线计算机中指令的重叠执行,实际上是完成指令各子过程的重叠执行,即功能单元流水操作,并且要求硬件资源能支持可能出现的各种指令组合同时进入流水执行单元。如果硬件资源不足而使某些指令组合不能实现,这就产生了结构竞争(资源冲突) 。最常见的结构竞争产生原因是某些功能单元没有完全流水。没有流水的功能单元处理相应的指令子序列不可能在一个时钟周期内完成。另一种常见的结构竞争原因是某些硬件资源复本的数量不足,而造成同一个时钟周期某些指令组合争抢硬件资源。例如处理器的寄存器组只有一个写入口,但某些情况下,在同一个时钟周期内流水要求完成两个写操作,这就产生了结构竞争。当某些指令序列碰

39、到这种竞争,流水线将暂停(stall)指令流水进行,一直到争用部件可用为止。这种暂停增加了 CPI 的值。有些流水线机器数据和指令共享一个内存储器。这种结构当某条指令要进行存储器数据访问时,就产生了和后面的取指(IF)存储器访问的冲突,如图 4-10 所示。图 4-10 13解决这个问题的方法是当流水线碰到存储器数据存取时,流水线暂停一个时钟周期,即插入一个停顿(stall) 。图 4-11 显示了图 4-10 存储器访问竞争时插入停顿的情况。通常我们称停顿为流水线气泡(pipeline bubble)或简称气泡(bubble) ,因为它漂浮在流水线中,而不传送任何数据进入下一流水级。在数据竞

40、争中我们将看到另一种类型的流水线停顿。图 4-11 用图 4-10 和 4-11 可以非常清楚地表达出流水线的工作过程和流水线竞争,但是这种图的形态繁杂,不利于一般叙述分析,因此我们仅在有特殊要求时才用这种图来描述,通常还是用图 4-3 形式的指令流水图表。这样,图 4-11 的存储器竞争可用图 4-12重新描述。指令序列 流 水 时 钟 数1 2 3 4 5 6 7 8 9 10取数指令 IF ID EX MEM WB指令 i+1 IF ID EX MEM WB指令 i+2 IF ID EX MEM WB指令 i+3 stall IF ID EX MEM WB指令 i+4 IF ID EX

41、MEM WB指令 i+5 IF ID EX MEM指令 i+6 IF ID EX图 4-12 从该图中我们看出在 MEM 级发生竞争,Stall 简单地将指令 3 右移一拍,延迟这一级存取数据工作的起始时间。在 MEM 流水部件处留下来的空位,由 Stall 填入,代替图 4-11 中的气泡。图 4-11 和图 4-12 表示了同样的性能描述结果:在第 4 个脉冲期间指令 3 不能进入流水线,指令 3 要在第 9 个时钟脉冲才能完成,而在第 8 个时钟脉冲期间没有指令结束。14例 3.计算存储器结构竞争的代价。假定程序中存储器数据访问有 40%。计算机流水处忽略结构冲突的理想 CPI 等于 1

42、。又假设有结构竞争的计算机时钟频率是没有结构竞争时的 1.05 倍。不考虑其它性能损失。流水线有结构竞争和无结构竞争那一个执行速度快?快多少?解:有许多方法可以解这个问题,最简单的方法是计算平均指令的运行时间。平均指令执行时间 TimeaICPTI两机器和时钟关系:fuideal=1.05fideal uidl105.无结构竞争,即没有插入 Stall,由于理想 CPI=1,故平均指令执行时间Tuideal=Tideal。有结构竞争平均指令执行时间是: TuidealCPITTidealideal(.)104153很明显,无结构竞争的计算机运行速度要快,且要快 1.3 倍。防止和减少上述结构竞

43、争的措施有许多,关键一点是将指令和数据存储器的访问分开。可采用单存储器而分离的指令和数据 CACHE 或建立指令缓冲区,这些我们在第三章中已经讨论过了。如果不考虑其它因素,无结构竞争的计算机,其 CPI 始终保持较低的值。但是结构竞争在实际机器中还是存在的。为什么计算机设计者允许结构竞争存在呢?大致有以下几个原因:1.减少成本。2.降低单元电路的延时时间。3.减少电路的复杂程序。流水执行部件太多或复本部件太多使计算机成本太高。例如,设计计算机每个时钟同时支持一个指令 CACHE 和一个数据 CACHE 访问来防止上述的结构冲突,需要倍的存储器带宽,用同样的引脚要承担较高的带宽。同样,在浮点乘法

44、器中采用完全流水操作要耗费许多门电路。如果结构竞争不是经常发生,根据 Amdahl 定律是不值得化太多的精力去避免它。这就是设计者经常尽可能设计一个非流水执行单元或者不是全流水的执行单元,从而比全流水有更短的延迟时间,即流水寄存器的锁存的延时更短。例如 CDC7600 和 MIPS R2010 浮点执行部件相对于全流水的设计有更短的延迟时间(每个操作有更少的时钟数) 。这样的处理,既减少了延迟时间即提高了性能,又克服了结构竞争的缺点。例.现代许多 RISC 计算机,对浮点操作都没有采用完全流水执行。假设在 5 级RISC 流水处理器中,如果浮点乘法操作在程序中均匀分布,则处理器可以最大限度使乘

45、法操作和其它指令重叠执行,否则一个操作要延时 5 个时钟的结构竞争损失。假定浮点乘法操作使用的概率为 14%,请分析结构竞争对性能影响的大小。解:根据题意,如果浮点乘法均匀分布,则最大限度的重叠操作约为 5 条指令中有一条浮点乘法操作可以重叠流水执行,相当于 20%的概率,也就是说,乘法指令的使用概率在 20%以内,流水线工作可以避免结构竞争。现在乘法的使用率是 14%,没有超出 20%,但结构竞争的影响还与浮点乘法操作在程序中的分布情况有关。分二种情况分析:151.乘法操作均匀分布,这是最佳情景,此时每 7 条整数指令有一个浮点乘法操作,大于 5,故所有浮点乘法都可以和其它指令重叠执行,这种

46、情况始终没有性能障碍。2.浮点乘法操作成串出现,且中间没有其它指令间隔,这是最差的情景,这时局部相当于每条指令都是浮点乘法操作(即 100%) ,流水线无法处理,在这种情况 14%的浮点乘法都要延时 5 个时钟才能进入乘法执行部件。假定理想 CPI=1,此时的 CPI 为:CPI15.14%1.7实际情况,用 mdljdp2 基准程序测试 5 级流水深度 FP 乘法操作增加平均执行时间不大于 3%。4.2.3 数据竞争及防止措施流水线计算机指令重叠执行改变了指令间的相对时间,各指令对操作数的需求时间也发生了变化。这种变化改变了读写操作访问操作数的先后次序,此时指令获取操作数要比非流水顺序执行时

47、困难得多。分析下列指令段在流水线计算机上执行的情况,第一条加法指令(ADD)后面的所有指令都用到加法指令的结果(目的操作数R1) 。ADD R1,R2,R3SUB R4,R5,R1AND R6,R1,R7OR R8,R1,R9XOR R10,R1,R11此时会出现什么样的情况呢?图 4-13 描述了上述这段指令工作时各流水级部件对操作数需求的时间关系。加法指令 ADD 的结果要在指令流入 WB 级时才将运算结果值写入 R1 寄存器,但第二条减法指令 SUB 在进入 ID 流水线时就需要读取 R1 的值,图 4-13 流水改变操作数需求时间造成后继三条指令的数据竞争而此时寄存器 R1 的值并不是

48、减法指令所需的值,这种现象就称为数据竞争。如不采取措施,减法指令将用这个错误的操作数进行运算。事实上,紧跟在加法指令后面的减16法指令 SUB 所需的正确值此时并没有运算好,在 EX 级的加法指令(ADD) ,正在进行紧张的计算。但有一种情况例外,这就是在加法指令(ADD)和减法指令(SUB )之间发生中断,这样,减法指令在 ID 级得到的 R1 操作数是可用的,但这种情况是随机的,不可预测的。在后面的分析和处理时,我们忽略这种情况,不会影响防止数据竞争的措施。从图 4-13 我们可以看出, R1 的值要到第 5 个流水时钟 CLOCK5 结束才会得到一个正确的值。因此第 3 条指令 AND、第 4 条指令 OR 也受到这种数据竞争的影响。而第 5 条指令 XOR 的操作没有受到影响,因为它取操作数是在第 6 个流水时钟CLOCK6,此时第一条加法指令已完成了寄存器 R1 的写操作。解决上述数据竞争,可以用指令延时执行方式,即插入停顿(stall)来解决,但这会影响性能

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报