假设同时执行以下两条指令:
addi $t0, $t1, 4
addi $t1, $t2, 4
这是一种反依赖,或写后读。假设它们同时执行,在第二条指令写回$t1
之前,第一条指令是否仍会读取正确的值?
关于输出依赖性,或写后写:
addi $t0, $t1, 4
addi $t0, $t2, 4
我可以看出为什么这是有问题的,我无法想象谁会“赢”,如果有的话。我的意思是我们说的是指令级并行,所以理论上我认为在第二条指令写入$t0
之前会有一个NOP?在这种情况下,如果另一条指令想要在第二条指令再次写入之前从$ t0读取,我只会看到一个问题,当然还有“丢失”的循环。
所以,我的问题是:为什么Write-after-Read有问题?是因为在指令解码期间,可能会将不同的地址加载到$ t1?