第五章 标量处理机

5.2 流水方式

5.2.3 标量流水机的相关和控制机构

由于流水是同时解释更多条指令,因此,相关情况比重叠机器更复杂,更严重,如果处理不当,就会显著降低流水效率。

转移指令和其后的指令之间存在管理,使之不能同时解释,其造成的对流水机器的吞吐率和效率下降的影响要比指令相关,主存操作数相关和通用寄存器组数相关及基址或变址值相关严重得多,所以称为全局性相关。

只影响相关的两条或几条指令,最多影响流水线某些段工作的推后,不会改动指缓中预取到的指令,影响是局部的,所以被称为局部性相关。

1.局部性相关的处理

指令相关,访存操作数相关和通用寄存器相关等局部性相关都是由于在机器同时解释的多条指令之间出现了对同一主存单元或寄存器要求“先写后读”。

由于流水是重叠的隐身,重叠处理这种局部相关有两种方法:

1.推后后续指令对相关单元的读,直至在先的指令写入完成。

2.设置相关直接通路,将运算结果经相关直接通路直接送入所需部件,不必先把运算结果写入相关单元,再从此相关单元取出来用,从而省去写入和读出两个访问周期,减少流水线停等。

由于流水线有多个子过程,多条指令同时处在不同过程上解释,需要解决一下几个问题:

  • 判定流入流水线多条指令之间是否相关
  • 如何控制推后对相关单元的读
  • 如何设置相关直接通路并控制相关直接通路的连通和断开

若以上问题解决不好,控制机构会变得极其复杂。

任务在流水线中的流动顺序的安排和控制可以有两种方式

1、任务(指令)流出流水线的顺序保持与流入流水线的顺序一致,称为顺序刘东方式或同步流动方式。

2、让流出流水线的顺序与流入流水线的顺序不同,称为异步流动方式。

顺序流动方式的好处是控制比较简单

异步流动会出现顺序流动不会发生的其他相关:

  • 对同一单元要求在先的指令先写入,在后的指令才写入的关联为写——写相关
  • 对同一单元要求在先的指令先读出,在后的指令才写入的关联为先读后写相关
  • 对同一单元要求在先的指令先写入,在后的指令才读出的关联为先写后读相关

写写相关和先读后写相关猪油在异步流动时才有可能发生。

在流水线中同样可以通过设置相关直接通路来减少吞吐率和效率的损失,但流水机器同时解释多条指令,并经常采用多个可并行工作的功能部件,如果在各功能部件之间为各种局部性行馆都设置单独的相关通络,将会使硬件耗费大,控制复杂,因此一般宜采用分布式控制和管理,并设置公共数据总线,以简化各种相关的判别和实现相关直接通路的连接。

IBM360/91通过给每个浮点寄存器FLR设置一个忙位,来判断相关,若指令需要用FLRi时,先检查忙位是否为1,若为1就表示发生了相关,通过保存站及站号字段和在相关后更改站号来推后处理级控制相关直接通路的连接。

公共数据总线(Common Data Bus,CDB),就是一种总线方式的相关直接通路,可以为多种和多个不同的相关所共用,通过给出不同站号来控制其不同的连接。

标量流水机对局部性行馆的处理一般采用总线式分布方式控制管理,包括:

1.相关的判断主要是靠分布于个寄存器的“忙位”标志来管理

2.分散于各流水线的入、出端处设置若干保存站来缓存信息

3.用站号控制公共数据总线的连接作相关专用通路,使之可为多个子过程的相关所共用。

4.一旦发生相关,用更换站号来推后和控制相关专用通路的连接。

5.采用多条流水线,每条流水线入端有多度保存站,以便发生相关后,可采用异步流动方式。

采用分不是控制方式大大简化了同时出现多种相关及多重相关的处理,他要比集中式更灵活,且处理能力强,因此大多数流水机器采用类似于IBM360/91的分布式处理方式。

 

2.全局性相关的处理

全局性相关指的是已经进入流水线的转移指令(尤其是条件转移指令)和其后续指令之间相关,常用处理方法如下:

(1)使用猜测法

猜测转移分支以为了在执行条件转移指令不断流,需要事先对大量程序的转移类型和转移概率进行统计,且统计出的概率也不一定能保证较高的猜测精度,若采用动态策略,由编译程序根据执行过程中历史记录动态预测未来的转移选择,可使预测准确率提高到90%

采用猜测法时应能保证猜错时可以恢复分支原先的现场,一般有三种办法:

1.在计算机没猜测分支解释时,应当与正常情况下的指令解释不同。

2.运算完但不送回运算结果。

3.设置后援寄存器,保护被破坏的原始现场,还原由存储器预存取转移成功分支的头几条指令,放在转移目标指令缓冲器中,以便在猜错时不必从访存取p开始,减少流水线等待时间。

IBM 3033机指令流水线除了设置正常的指令缓冲器外,还设了两套转移目标指令缓冲器,这样可为相邻近的两条条件转移指令所分别使用。

(2)加快和提前形成条件码

尽快、尽早获得条件码。以便提前知道流线哪个分支,会有利于流水机器简化对条件转移的处理,可以从两个方面采取措施

1.加快单指令内部提前形成条件码,不等指令执行完就提前形成反应运算结果的条件码。

2.在一段程序内提前形成条件码,特别适合于循环型程序在判断循环是否继续时的转移情况,为此需要在硬件上增设为循环减1指令专用的条件码寄存器CCs,以便通用的条件码寄存器CC仍可以为其他指令使用。

(3)采取延迟转移

采用软件方法进行静态指令调度的技术,不必增加硬件,在编译生成目标指令程序时,将转移指令与前面不相关的一条或多条指令交换位置,让成功转移的指令总是延迟到这一条或多条指令执行之后再进行,可使转移造成的流水性能损失减少到0.

(4)加快短循环程序的处理

1.将长度小于指缓容量的短循环程序整个一次性写入指缓内,并暂停预取指令,避免执行循环时由于指令预取导致指缓中需要循环执行的指令被冲掉,减少了主存重复取指的次数。

2.由于循环分支概率高,因此,让循环出口端的条件转移指令恒猜循环分支,减少因条件分支造成的流水线断流的机会。

为上述两点设置了循环方式工作状态,便出口端的条件转移指令连向循环程序的始端,采取这些措施后,可使循环时流水加快1/3~3/4.

有的计算机还采取顺序执行时,让预取指令既放入正常使用的指令缓冲器,也方式转移目标指令缓冲器中,检测出是循环,把转移目标缓冲器的内容作为短循环程序控制用,省去了第一次循环时,重新冲主存取次短循环程序中指令的操作开销,还有的计算机允许间这两种指令缓冲寄存器连接起来用,使更大的循环程序也得到加速处理。

3.流水机器的中断处理

中断会引起流水线断流,但出现概率比条件转移的概率要低得多,且随机发生,流水机器中断主要是如何处理好断点现场的保存和恢复。

1.不精确断点法,无论指令i在流水线的哪一段发生中断,未进入流水线的后续指令不再进入,已在流水线的指令仍继续流完,然后才转入中断处理程序,这样导致断点不精确,仅当指令i在第一段响应中断时,才是精确地。

2.精确断点,无论指令i还是在流水线中哪一段响应中断,给中断处理的现场全都是对应i,之后流入流水线的指令的原有现场都能得到保存和回复。精确断点法需要设置很多后援寄存器,以保证流水线的各指令原有现场都能保存和回复,这些寄存器也是指令复执行所必须的。

4.非线性流水线的调度

单功能非线性流水线的任务调度

为了对流水线任务进行优化调虎和控制,1971年,E.S.Davidson等人提出使用一个二维预约表。

如果有一个由k段组成的单功能非线性流水线,每个任务通过流水线需要N拍,利用类似画时空图的方法,可以得到该任务使用流水线各段时间关系(既预约表)。其中拍号n为任务经过流水线的时钟节拍号,如果任务在第n拍要用到第k段,就在相应第n列k行的交点处用√表示。

根据预约表可以很容易得出一个任务使用各段所需间隔拍数(延迟)

可以用一个有N-1位的位向量来表示后续任务间隔各种不铜牌数送入流水线时,是否会发生功能段使用的冲突,称此位向量为冲突向量。

冲突向量中第i位的状态表示与方式相隔i拍给流水线送入后续任务是否会发生功能段的使用冲突,如果不会发生冲突,令该位为0,表示允许送入,否则为1,表示禁止送入,冲突向量取N-1位是因为经过N拍后,该任务已流出流水线,不会与后续任务争用流水功能段。

随着任务在流水线中的推进,会不断动态形成当时的冲突向量。

只要按流水线状态图中由初始状态触发,能构成一种调度间隔延迟拍数呈周期性重复的方案来进行流水线的调度,都不会发生功能段使用冲突,要想找出一种最佳的调度方案使流水线的吞吐效率最高,只要计算出每种调度方案的平均间隔拍数,从中找出最小的即可。

为简化控制,也可以采用相当的间隔角度,不过常会因此而使吞吐率和效率下降。

将流水线中所有各段对一个任务流过时会争用同一段的节拍间隔数汇集在一起,构成一个延迟禁止表F(Forbidden List)

可以用过找出最小的平均间隔拍数这种思路来优化流水线性能,因为预约表中大√最多的行市流水性能的瓶颈,其√的个数实际上先顶了流水线可达到的最短的平均间隔,如果在流水线中某些段增设了延迟线,在满足流水功能的前提下,将某些√向右移动到新的列位置上,修改预约表,从而使初始冲突向量和状态转移图发生变化。就可以产生具有理想最佳平均间隔拍数的周期性调度方案,虽然增加延迟线会延长每个任务通过流水线的总时间,但调度方案中平均间隔拍数减少却可以使流水线的吞吐率和效率得以改进。

 

与本文相关的文章
版权声明
转载保留版权: 大D综合研究院 | 《《计算机系统结构》读书笔记(十四)》
本文链接地址:https://www.dadclab.com/archives/3205.jiecao
转载须知:如果您需要转载本文,请将版权信息,版权授权方式,以及本文的链接地址注明,谢谢合作。
本文被贴上了: , , , , , , 标签