请考虑MIPS中的以下代码:
lw $1, 40($2) # I1
add $2, $3, $3 # I2
add $1, $1, $2 # I3
sw $1, 20($2) # I4
我自己的回答是从I1到I3和I4的1美元,从I2到I3和I4的2美元,从I3到I4的1美元。
然而,解决方案并不包括从I1到I4的$ 1。为什么会这样?
答案 0 :(得分:1)
该解决方案不包括从I1到I4的$ 1。
I4的存储数据($ 1)来自I3,而来自I2的存储地址($ 2)来自I2。它的输入都不是来自I1 直接。
I3之后的任何内容都不需要I1加载的$ 1输出。
(在具有寄存器重命名的无序CPU中,一旦I3添加退出(因为保存它的架构$ 1寄存器被覆盖),就没有更多的引用了,因此可以释放保存它的物理寄存器。)
有一个依赖关系链从加载开始,以商店结束,看看它是有用的,但它与危险分析是分开的。
在代码中查找单独的依赖关系链与无序执行高度相关,尤其是查找dep链是否是循环传输,或者每个迭代是否具有单独的依赖关系链(允许OoOE重叠执行多次迭代) )。单独的依赖链与CPU可以找到和利用的指令级并行性基本相同。