我在寻找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依赖关系,在这种情况下是:
- I2和I1/R1
- I3和I1/R1
- I4和I2/R3
- I4和I3 over R4