本章主要内容
流水线的基本概念
■概念、表示方法、特点和分类
流水线的性能指标
■吞吐率、加速比和效率
流水线的实现原理
■DLX流水线实例
流水线的“相关”问题
■结构相关、数据相关和控制相关
指令级并行技术简介
流水线的相关问题
什么是流水线中的“相关”?
■在流水线中经常有一些被称为“相关”的情况发生,它使得指令序列中下一条指令无法按照设计的时钟周期执行,这些“相关”可能会降低流水线可以获得的理想性能。
流水线中的相关可以分为以下三种类型
■第一种是结构相关,是指令在重叠执行的过程中,硬件资源满足不了指令重叠执行的要求,发生硬件资源冲突而产生的相关。
■第二种是数据相关,是指在同时重叠执行的几条指令中,一条指令依赖于前面指令执行结果数据,但是又得不到时发生的相关。
■第三种是控制相关,它是指流水线中的分支指令或者其他需要改写PC的指令造成的相关。
解决流水线中“相关”问题的重要性
■流水线相关问题是流水线执行过程中的主要障碍,会给流水线中指令序列的顺利执行带来许多不利的影响。如果不能较好的处理流水线相关问题,就可能影响流水线的性能,甚至使程序运行产生错误的结果。
结构相关和相应解决方法
如果因资源冲突而无法使用某种指令组合,那么就称该流水线产生了结构相关。例如:指令和数据都共享一个存储器,在某个时钟周期内,流水线既要完成某条指令对数据的存储器访问操作,又要完成后续的另一条指令的取指令操作,这样就会发生存储器访问冲突问题,产生结构相关。

消除结构相关的最简单方法就是引入暂停周期,如下图所示,这必然要降低流水线的性能。

解决结构相关的基本方法
■结构相关的起因是资源争用,那么可以考虑采用资源充分重复设置的方法来避免结构相关。
解决存储器争用冲突的办法
■(1)如果指令和数据放在同一个存储器,可使用双端口存储器,其中一个端口存取数据,另一个端口取指令。
■(2)设置两个存储器,其中一个作为数据存储器,另一个作为指令存储器。
■上述两种方案中,取指令和访问数据可以并行进行,不会发生结构相关。
流水线技术可以通过指令的重叠执行来改变指令的相对执行时间,这就可能导致流水线中的指令序列读写操作数的顺序发生改变,而不同于非流水线时的指令序列读写操作数的顺序。示例如下:

定向(旁路)技术解决数据相关,主要思想是:在某条指令产生一个计算结果之前,其他指令并不真正需要使用这个计算结果,如果能够从这个计算结果产生的地方直接将它送到后续指令需要使用它的地方,那么就可以避免暂停

按照指令读写寄存器顺序对数据相关分类
■对于两条指令i和j,假设指令i在j之前进入流水线,下面讨论几种不同的数据相关。
写后读相关(RAW:Read After Write)
■指令j的执行需要使用指令i的计算结果,但是当它们在流水线中重叠执行时,指令j可能在指令i将其计算结果写入之前就先行对保存该计算结果的寄存器进行了读操作,这样指令j读出的寄存器值就是错误的。
■这是最常见的一种数据相关,采用定向技术消除的数据相关就属于这种类型。
写后写相关(WAW:Write After Write)
■指令j和指令i的目的操作数相同,但是当它们在流水线中重叠执行时,指令j可能在指令i将其计算结果写入之前就先行对保存该计算结果的寄存器进行了写操作,这样就导致了寄存器写入顺序的错误,此时,目的寄存器的内容是指令i写入的值,而不是指令j写入的值。
DLX中不会发生WAW相关
■如果在流水线中不只一个流水段可以进行写操作,或者当流水线暂停某条指令的执行时,允许该指令之后的其他指令继续执行,就可能发生这种数据相关。但是DLX流水线中的指令是不会发生这种数据相关的,因为DLX流水中只有WB段才会写寄存器。
■如果对DLX流水线进行改变,将ALU运算结果的写回操作移到MEM段进行,因为这时计算结果已经有效,同时再假定访问数据存储器需要两个流水段,那么DLX流水线中执行的指令就可能发生WAW相关。
LW R1,0(R2) |
IF |
ID |
EX |
MEM1 |
MEM2 |
WB |
ADD R1,R2,R3 |
|
IF |
ID |
EX |
WB |
|
读后写相关(WAR:Write After Read)
■指令j可能在指令i读取某个源寄存器的内容之前就对该寄存器进行了写操作,结果就是导致了指令i后来读取的值是错误的。
DLX中不会发生WAR相关
■因为DLX流水线在ID段完成所有的读操作,而在WB段完成所有的写操作。
■但是在上面修改后的DLX流水线中,是有可能发生这种数据相关的,观察下面的两条指令的执行情况,如果SW指令在MEM2的后半部分读取寄存器R2的值,ADD指令在WB段的前半部分将计算结果写回到寄存器R2,那么SW读取的寄存器值就是错误的,这个值是ADD指令的计算结果,并不是预期的结果。
SW 0(R5),R2 |
IF |
ID |
EX |
MEM1 |
MEM2 |
WB |
ADD R2,R3,R4 |
|
IF |
ID |
EX |
WB |
|
必须进行暂停的数据相关

为了保证流水线能够正确执行上述的指令序列,需要加入一种称为“流水线互锁” 的新功能部件。通常,流水线互锁检测到上述的数据相关后就暂停流水线,直到能够通过定向技术解决数据相关为止。

数据相关的动态调度
■这种方法是由硬件动态调整指令执行顺序以减少暂停的影响,能够简化编译器设计。
■动态调度并不能真正消除数据相关,但它能在出现数据相关时尽量避免出现处理器暂停。而静态调度方法则是尽量通过分离有相关问题的指令使它们不会导致冲突,从而减少暂停的影响。
■动态调度的主要思想:
◆指令顺序发射——乱序执行——指令乱序流出
■动态调度的问题:异常处理的不精确性。在采用动态调度方法的处理机中,在某条指令产生异常情况时,有可能出现其后面的指令已经执行完成的情况,这样异常处理是不精确的。
|