(1) 对于写读数据相关,如图8.31(a)所示。先A→B,然后B→C;等效于A→B和A→C。新增加了一条从A到C的专用路径,撤消原来从B到C的路径。经过这样的改变之后,就可以避免写读数据相关,或者缩短发生写读数据相关的时间。
图8.31 数据重定向原理

  (2) 对于写写数据相关,如图8.31(b)所示,先A→B,然后C→B。经过数据重定向,改为C→B'。在以后再引用变量B时,改为引用变量B'。这种重定位方法,可以用硬件实现,也可以用软件实现。在编译器中,把这种方法称为变量重命名。
  (3) 对于读写数据相关,如图8.31(c)所示,先B→A,然后C→B。经过数据重定向,改为B'→A和C→B。与写写数据相关类似,读写数据相关可以用硬件实现,也可以用软件实现。
  所有三种数据相关,在重定向之前,j只能在i之后执行,而重定向之后,对于写读相关,j与i可以同时执行,就是专用数据通路法。对于写写相关和读写相关,j与i无先后时间顺序要求。
  下面,通过一个具体的例子来说明在程序执行过程中,是如何通过数据重定向来避免数据相关的。一个简单的程序如下:
例题
  k: LOAD F1, A
  k+1: FADD F1, F2
  k+2: FMUL F1, F3
  k+3: STORE F1, B
程序中的F1、F2和F3是浮点通用寄存器,A和B是主存储器的单元。程序执行过程中的数据流程如图8.32(a)所示,图中的长方形表示数据存储单元,圆形表示运算部件,带有箭头的线表示数据传送路径。
  根据上面介绍的数据重定向原理,为了处理写读数据相关,专门设置了A→FADD、FADD→FMUL、FMUL→B三条专用路径,同时,撤消了F1→FADD和F1→FMUL的路径。另外,为了处理写写数据相关,撤消了A→F1、FADD→F1的数据传送路径,如图8.32(b)所示。
图8.32 数据重定向原理



  在流水线处理机中,经常有多条流水线,每条流水线有多个流水段,能够同时执行多条指令。如果为每一种困难出现的数据相关都建立专门的数据路径,那么,不仅相关路径的数量很多,而且控制逻辑也相当复杂。为了处理流水线中可能出现的多种数据相关,人们提出了多种解决数据相关的算法。