查找所有写后读(RAW)数据依赖项



考虑MIPS中的以下代码:

lw $1, 40($2) # I1
add $2, $3, $3 # I2 
add $1, $1, $2 # I3
sw $1, 20($2) # I4

我自己的答案是RAW从I1到I3和I4为1美元,从I2到I3和I4为2美元,从I3到I4为1美元。

然而,解决方案不包括从I1到I4的1美元。为什么会这样呢?

解决方案不包括从I1到I4的$1。

I4的存储数据($1)来自I3,存储地址($2)来自I2。它的两个输入都不是直接来自I1的

I1负载的$1输出不需要I3之后的任何东西。

(在具有寄存器重命名的乱序CPU中,一旦I3 add退出(因为保存它的体系结构$1寄存器已被覆盖),就不再有对它的引用,因此可以释放保存它的物理寄存器)

有一个依赖链,从加载开始,到存储结束,查看它是有用的,但它与危害分析是分开的。

查找代码中的独立依赖链与乱序执行高度相关,特别是查找深度链是否为循环携带,或者每个迭代是否有单独的依赖链(允许OoOE重叠多个迭代的执行)。独立的依赖链基本上与CPU可以发现和利用的指令级并行是一样的。

最新更新