Что касается языка ассемблера MIPS, который рассматривается в книге Паттерссона, у меня возникает вопрос о введении NOP между инструкциями, чтобы избежать простоя трубопроводов.Язык MIPS, чтобы избежать конвейерных киосков
Рассмотрим следующий код
lw $s5, -16($s5)
sw $s5, -16($s5)
add $s5, $s5, $s5
Мы видим, существует опасность для RAW $ s5 между lw
и sw
. Существует также опасность WAW для $ s5 между sw
и add
. Поэтому нам нужно вставить два NOP, чтобы избежать киосков. Другими словами, схема трубопровода
lw IF ID EX MEM WB
sw IF ID --- EX MEM WB
add IF ID EX MEM -- WB
Когда sw
будет выполняться, то есть будет ждать lw
, чтобы поместить данные в регистр. Поэтому есть один пузырь. Кроме того, когда add
хочет записать окончательный результат, он должен дождаться завершения предыдущей инструкции (sw
). Это еще один пузырь.
Таким образом, модифицированный код
lw
NOP
sw
NOP
add
Но решение предложить следующий код
lw
NOP
NOP
sw
add
Какой из них правильный? Я думаю, что мой!
Вид плохого стиля, чтобы полностью заменить такой вопрос .. теперь мой ответ кажется полностью случайным/несвязанным – harold
@harold: У меня возникает соблазн отбросить последнее изменение по этой причине.Искушение слишком сильное, я вернулся к предыдущей версии. Если махмуд хочет получить ответ на свой новый вопрос, он может просто задать новый вопрос о SO. –
Сначала я попросил часть упражнения и получил ответ, который был повторным, но мой был другим. Позже я увидел, что ответ не применим ко второй части упражнения. Итак, я заменил это ... Если я сделал не так, я должен сказать, извините ... – mahmood