Вопрос

У меня есть следующий код MIPS, и я хочу переписать/переупорядочить код, чтобы я мог уменьшить количество ноп Инструкции, необходимые для правильного выполнения трубопровода при сохранении правильности. Предполагается, что DataPath не останавливается и не является вперед. Проблема дает два подсказки: она напоминает нам о том, что ветви и прыжки задерживаются и нуждаются в заполненных слотах задержки, и при необходимости намекает на то, чтобы снять значение смещения в инструкциях по доступу к памяти (LW, SW).

LOOP:  lw           $1, 100 ($2)
       addi         $1, $1, 1
       sw           $1, 500 ($2)
       addiu        $2, $2, 4
       bne          $2, $10, LOOP

Для меня совершенно очевидно, что этот код увеличивает содержимое одного массива и хранит его в другом массиве. Так что я не совсем вижу, как я мог бы изменить этот код, так как индексы должны быть рассчитаны до завершения цикла.

Я предполагаю, чтобы переместить LW Инструкция после инструкции филиала, поскольку (насколько я понимаю) инструкция в слоте задержки всегда выполняется. Опять же, я не совсем понимаю эту тему, и я был бы признателен за объяснение. Я понимаю трубопроводы в целом, но не столько задержка разветвления. Спасибо

Это было полезно?

Решение

Одним из способов заполнения слота задержки ветвления было бы:

addiu  $2, $2, 4  # We'll now iterate over [$2+4, $10] instead of [$2, $10[
LOOP:  lw           $1, 96 ($2)
       addi         $1, $1, 1
       sw           $1, 496 ($2)
       bne          $2, $10, LOOP
       addiu        $2, $2, 4  # Use the delay slot to increase $2

Другие советы

С точки зрения второго подсказка:

Сделайте 4 -ю инструкцию второй. Он может быть заполнен (после идентификатора 1 -й инструкции, если вы используете терминологию P/H), в то время как первый все еще выполняется. Затем внесите смещение в (старой) 3 -й инструкции 496 вместо 500. Я предполагаю, что вы теперь видите, почему?

Что касается первого подсказка, я не слишком знаком с тем, как точно выполняются задержки ветви (не реализованные на SPIM, поэтому мне было все равно). Старая последняя инструкция, вероятно, может быть сделана вторым по заведению, как указывает имя «Задержка», но я не мог бы сказать вам, как и почему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top