第六章 向量处理机

3.向量递归技术
  在向量操作中,结果通常是不送回到作为源操作数使用的同一个向量寄存器中的。有一类特殊的向量循环,其流水线功能部件的输出可能要回送到它的一个源向量寄存器。换句话说,一个向量寄存器用来同时存放源操作数和结果操作数。在功能流水线上的这种递归操作要求特别小心以避免产生数据阻塞问题。
  Cray机器利用每个向量寄存器的分量计数器实现这一功能。在每个流水线周期,从分量这一角度看,向量寄存器的作用好象移位寄存器。当一个操作数分量移出向量寄存器进入流水线功能部件时,一个结果分量可以在同一周期进入腾空的分量寄存器。分量计数器必须跟踪移位操作,直到结果向量的所有64个分量都装入向量寄存器。
  下面考虑用浮点加法流水线完成递归向量求和,其中向量寄存器V1保存要进行递归相加的浮点数,向量寄存器V0同时用作操作数寄存器和结果寄存器。令分别是与向量寄存器V1和V2相关的分量计数器。初始时,计数器都置成0,V0的第一个分量寄存器 。中的初始值也置成0。通过浮点加法流水线需要6个时钟周期,寄存器和浮点加法流水线需要6个时钟周期,寄存器和浮点加法流水线之间的往返传送各还需要1个时钟周期,因此,一次加法计算总共需要1+6+1=8个时钟周期,如图6.18所示。假定向量长度寄存器的值为64,只作一个向量循环。

  在之前,计数器Co一直保持为o。在此期间,(为o)不断发送到流水线。但是,计数器在每个时钟周期后都加1,所以,在以后,在随后的64个时钟周期内相继发送到流水线。以后,每个时钟周期期后都要加1。这意味着,在每8个时钟周期内,相继输出的和将与来自V1的一个分量进行递归相加。当计算完成时,V0的分量寄存器将被装入。64个分量被分成8组,每组为8个分量的和。从 为最后一个求和的组,其中每个寄存器保存了V1的8个分量的和,这个组共保存了8个这样的求和值。运算结束后,V0各个分量的内容如下: