Почему проблемы с именами (WaR, WaW) в архитектурах ILP проблематичны?
Предположим, что следующие две инструкции выполняются одновременно:
addi $t0, $t1, 4
addi $t1, $t2, 4
Это анти-зависимость или запись после чтения. Предполагая, что они выполняются в одно и то же время, первая инструкция все равно не прочитает правильное значение, прежде чем вторая инструкция вернется в $t1
?
Что касается выходной зависимости или Write-after-Write:
addi $t0, $t1, 4
addi $t0, $t2, 4
Я понимаю, почему это проблематично, я не могу представить, кто "выиграет", если таковые будут. Я имею в виду, что мы говорим о параллелизме на уровне инструкций, поэтому теоретически я предполагаю, что будет NOP, прежде чем вторая инструкция сможет написать в $t0
? В этом случае я вижу проблему только в том случае, если другая инструкция хочет прочитать из $t0 до того, как вторая инструкция снова записывает в нее, и, конечно, цикл "потерян".
На самом деле, мой вопрос: почему проблематично писать после чтения? Это потому, что во время декодирования инструкции разные адреса могут быть загружены в $t1?