第五章 重叠、流水和向量处理机
因机器语言程序中邻近指令之间出现了关联,为防止出错不让它们同时被解释的现象,称为相关。数据相关是指相邻指令的数据地址之间有关联。指令相关是因为指令在程序的执行过程中允许被修改造成的。
多功能静态流水线,在同一时间段内该流水线的各功能段之间只能按一种功能进行联接,只有等流水线全部流空后,才能切换成按另一种功能进行联接。
多功能动态流水线,在同一时间段内该流水线的各功能段之间可以按多种不同的功能进行联接。
中断和转移一样,会引起流水线断流。由于发生中断的概率远低于条件转移,且中断又是随机发生的,所以,流水机器处理中断的关键在于如何处理好断点现场的保存和恢复,而不是如何缩短流水线的断流时间。
设在执行指令i时有中断,断点本应是在指令i执行结束,指令i+1尚未开始执行的地方,但由于流水机器是同时解释多条指令,后续指令i+1,i+2,...可能已进入流水线并被解释。对于采用异步流动方式的流水线,这些后续指令中的一些可能已经流到指令i前面去了。
早期的流水机器多采用不精确断点法。不论指令i在流水线的哪一段发生中断,未进入流水线的后续指令不再进入,已在流水线的指令继续流完,再转入中断处理程序。这样断点就不一定是指令i,而可能是指令i+1,i+2,...即断点是不精确的。仅当指令i在流水线的第一段呼应中断时,断点才是精确的。采用不精确断点法,硬件开销少,控制简单,不利于编程和程序的排错。
后来的流水机器多采用精确断点法。不论指令i在流水线的哪一段发生中断,中断处理程序的现场都是对应于指令i的。如果在执行第i条指令时发生了程序性错误或故障,那么断点就是i。最坏的情况是指令i执行到流水线的最后一个功能段时才发生程序性错误或故障,为此,需设置很多后援寄存器,以保证流水线中断点之后后续指令的原有现场都能被保存和恢复。
1.如何画流水线的状态转移图?
一个由K段组成的非线性单功能流水线,每个任务需要N拍,利用类似画时空图的方法得到该任务使用流水线各段的情况与时间的关系图,即预约表(Reservation Table)。如果该任务第n拍用到流水线的第k段,就在相应的第n列和第k行的交叉点画√。
①由预约表得出延迟禁止表F(Forbidden List)。
得出一个任务多次流过的流水线各功能段上,后面的拍在第一拍开始之后延迟多少拍开始。
将得到的拍数汇集到一起,构成延迟禁止表F(Forbidden List)。如果后面的任务在前一任务开始之后延迟延迟禁止表F中的时钟节拍数开始,就会发生流水线功能段的使用冲突。
②由延迟禁止表得出初始冲突向量C(Collision Vector)。
③由初始冲突向量得出第二个任务可在第一个任务之后的多少拍流入流水线。
④设第二个任务可在第一个任务之后的第n1,...,nx拍流入流水线,将初始冲突向量分别右移n1,...,nx位,得到x个第二个任务的冲突向量。
⑤将得到的x个第二个任务的冲突向量与初始冲突向量作“按位或”运算,得出x个第三个任务的冲突向量。 ⑥分别作由初始冲突向量指向第三个任务的冲突向量的带箭头的线,并在线旁分别注上n1,...,nx。 ⑦由第三个冲突向量得出第四个任务可在第三个任务之后的多少拍流入流水线。 ⑧下面的过程基本上是重复了。