非线性流水性调度问题的研究
问题的提出
在解释问题之前,先介绍如下几个概念。
流水线技术:将一个重复的时序过程分解成为若干个子过程,而每一个子过程都可有效地在其专有功能段上与其他子过程同时执行的技术。流水线可按不同的观点进行分类,比如根据流水线中是否有反馈回路可分为线性流水性和非线性流水性。
线性流水线:流水线的各段串行连接,没有反馈回路。图1-1就是一种简单的线性流水线。
图1-1 线性流水线
非线性流水线:非线性流水线不同于线性流水线,线性流水线是一段接一段地往后走,它的连接关系是唯一的。非线性流水线中某一段或某些段可能有反馈信号,这就是线性流水线和非线性流水线的区别。一个典型的非线性流水线连接图如图1-2所示。
图1-2 非线性流水线的连接图
因为有反馈信号,所以非线性流水线的连接图就不能唯一地反映流水线的工作情况。1971年,E.S.Davidson提出使用一个二维的预约表来描述一个任务在非线性流水线对各功能段的使用情况。值得说明的是:一张非线性流水线的预约表可能与多个非线性流水线的连接图相对应;一个非线性流水线的连接图也可能与多个非线性流水线的预约表相对应。
采用非线性流水线会发生流水线冲突(也叫功能部件冲突),这主要是由于在非线性流水线中存在反馈回路。当一个任务在流水线流过时,在同一功能段可能要经过几次,这样,如果仍像线性流水线那样,每个时钟周期输入一个任务就会发生几个任务争用同一个功能段的情况。如何避免这一问题就是非线性流水线的调度问题。
问题分析与解决
流水线输入两个任务间隔的时钟周期数叫做启动周期。非线性流水线调度的任务就是找出一个最小的启动循环周期,按照这个周期向流水线输入任务,流水线的各个功能段都不会发生冲突,也就是同一时间只有一个任务进入到这个流水线,在不发生冲突的情况下尽量提高流水线的效率和吞吐率。
下面以一条非线性流水线为例,说明非线性流水线的调度方法。
1、 写出流水线的禁止向量和初始冲突向量。
2、 画出调度流水线的状态图。
3、 求流水线的最小启动循环和最小平均启动距离。
4、 求平均启动距离最小的恒定循环。
把一条非线性流水线的所有禁止启动距离组合在一起就形成了一个数列,通常把这个数列称为非线性流水线的禁止向量。
由预约表得到禁止向量的方法很简单,只要把预约表的每一行中任意两个“√”之间的距离计算出来,去掉重复的,由这种数组成的一个数列就是这条非线性流水线的禁止向量。例如,对于图1-3所示的预约表,第2行的第2列与第8列的两个“√”之间的距离为6;第3行的第3列与第7列之间的距离为4;第4行的第4列与第6列之间的两个“√”之间的距离为2,因此,图1-3所示的非线性流水线的禁止向量为(2,4,6)。
时间 流水段 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
S1 |
√ |
√ |
|||||
S2 |
√ |