写后再读(RAW)危险



我在寻找RAW依赖关系时感到困惑,我们是否必须仅在相邻指令或非相邻指令中找到。

考虑下面的汇编代码

I1: ADD R1 , R2, R2;
I2: ADD R3, R2, R1;
I3: SUB R4, R1 , R5;
I4: ADD R3, R3, R4;
在上面的代码中找出写后读(原始)依赖的数目。假设ADD x,y,z = x <- y + z

我得到2依赖性I2-I1和I4-I3

让我们说,在一条指令进入流水线后,它将进入x阶段,之后该指令写入的任何寄存器将对任何后续指令可见。

那么你必须照顾每一组x连续指令之间的RAW依赖关系。在最坏的情况下,你可以取x为最大值。

现在,问题中的情况看起来像一个硬件问题,因为管道结构没有定义,所以你必须查看所有指令的RAW依赖关系,在这种情况下是:

  1. I2和I1/R1
  2. I3和I1/R1
  3. I4和I2/R3
  4. I4和I3 over R4

最新更新