第五章 标量处理机

  下面通过一个具体的例子来说明非线性流水线的调度方法。
  例5.2:一条有4个流水段的非线性流水线,每个流水段的延迟时间都相等,它的预约表如下:

  (1)写出流水线的禁止向量和初始冲突向量。
  (2)画出调度流水线的状态图。
  (3)求流水线的最小启动循环和最小平均启动距离。
  (4)求平均启动距离最小的恒定循环。
  解:(1)对于图5.17所示的预约表,第1行的第1列与第7列的两个"×"之间的距离为6;第2行的第2列与第6列的两个"×"之间的距离也为4;第3行的第3列与第5列的两个"×"之间的距离为2。因此,禁止向量为(6,4,2)。
根据禁止向量很容易得到冲突向量。冲突向量用二进制数表示,其长度是禁止向量中的最大距离。对于图5.17的预约表,冲突向量C=,由于禁止向量是(6,4,2),得到,其余位为0,因此,冲突向量为C=(101010)。
   (2)由冲突向量构造一张状态图。把上面得到的冲突向量C作为初始冲突向量送入一个6位逻辑右移移位器,当从移位器移出的位为0时,用移位器中的值与初始冲突向量作"按位或"运算,得到一个新的冲突向量;若移位器移出的位为1,不作任何处理;移位器继续右移,如此重复。对于中间形成的每一个新的冲突向量,也要按照这一方法进行处理。在初始冲突向量和所有的新形成的冲突向量之间用带箭头的线连接,表示各种状态之间的转换关系。当新形成的冲突向量出现重复时可以合并到一起。
   对于图5.17,初始冲突向量为101010,把它逻辑右移2、4、6位时,由于移出去的位是1,表示用这些启动距离向流水线输入新任务,在流水线中会发生流水段的冲突,因此,在状态图中不作任何处理。当逻辑右移的位数为1、3、5和大于等于7时,移出去的位是0,表示用这些启动距离向流水线输入新任务时,在流水线的各个流水段中都不会发生冲突。但是,这里所说的不发生流水段冲突,只能保证输入一个新任务时,在流水线的各个流水段都不发生冲突。在输入这个新任务之后,流水线又将产生新的冲突向量,这时,要根据新产生的冲突向量来判断流水线发生冲突的情况。