2013-09-29 1 views
0

Для следующего сегмента кода мне необходимо вставить минимальное количество nops для устранения всех потенциальных опасностей трубопровода.Число nops для предотвращения оргст-ва трубопроводов

lw $t3, 4($t5) 
beq $t2, $t3, -2 
addi $t2, $t2, 1 

И решение, которое я предложил это

lw $t3, 4($t5)   
beq $t2, $t3, -2 
addi $t2, $t2, 1 
NOP  
NOP 

Однако, я не совсем уверен, что выше выше ответ, так что кто-нибудь может помочь мне с этим?

ответ

0

Похоже, что единственная проблема заключается в том, что $t2 получает правильное значение ($ t2 + 1) до того, как beq попадает в следующий цикл. Ответ действительно зависит от того, сколько циклов требуется, чтобы записать значение $t2 в память или в кеш - вы опустили эту деталь, но предположив, что у вас есть только 3-этапный конвейер, и каждая операция занимает 1 цикл, я считаю, что даже один NOP может работать:

  1. в цикле 0, lw поступает в трубопровод в качестве значения от addi становится доступным
  2. в цикле 1, beq сравнивает значение $t3 и $t2, который стал доступен от последний цикл

Невозможно сказать, поддерживает ли ваша реализация этот тип пересылки. Безопасная ставка будет двумя NOP, но вы оставили совсем немного деталей, и у меня пока нет достаточного количества отзывов, чтобы оставить комментарий для разъяснения :(Надеюсь, это поможет.