Frage

Ich habe den folgenden MIPS -Code und möchte den Code neu schreiben/neu bestellen, damit ich die Anzahl der Anzahl reduzieren kann NOP Anweisungen, die für die ordnungsgemäße Pipela -Ausführung erforderlich sind, während die Korrektheit beibehalten wird. Es wird angenommen, dass der Datenapath weder Stände noch weiterleitet. Das Problem gibt zwei Hinweise: Es erinnert uns daran, dass Verzweigungen und Sprünge verzögert werden und ihre Verzögerungsschlitze ausgefüllt werden müssen, und es deutet darauf hin, dass der Offset -Wert in Speicherzugriffsanweisungen (LW, SW) bei Bedarf aufgerissen wird.

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

Mir ist ziemlich offensichtlich, dass dieser Code den Inhalt eines Arrays erhöht und in einem anderen Array speichert. Ich sehe also nicht genau, wie ich diesen Code möglicherweise neu ordnen kann, da die Indizes vor Abschluss der Schleife berechnet werden müssen.

Meine Vermutung wäre, das zu bewegen lw Anweisung nach dem Zweiganweis, da (soweit ich verstehe) der Anweisungen im Verzögerungsschlitz wird immer ausgeführt. Andererseits verstehe ich dieses Thema nicht ganz und würde mich über eine Explination freuen. Ich verstehe Pipelining im Allgemeinen, aber nicht so sehr verzögerte Verzweigung. Vielen Dank

War es hilfreich?

Lösung

Eine Möglichkeit, den Zweigverzögerungsschlitz zu füllen, wäre:

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

Andere Tipps

In Bezug auf den zweiten Hinweis:

Machen Sie die 4. Anweisung am 2.. Es kann in (nach ID der 1. Anweisung, wenn Sie die P/H -Terminologie verwenden) pipeliert werden, während die erste noch ausgeführt wird. Dann machen Sie den Offset in der (alten) 3. Anweisung 496 statt 500. Ich nehme an, Sie sehen jetzt warum?

Was den ersten Hinweis betrifft, ich bin nicht allzu vertraut damit, wie genau verzögerte Filialen ausführen (nicht auf SPIM implementiert, also war es mir egal). Die alte letzte Anweisung kann wahrscheinlich nach Belieben gelten, wie der Name "verzögert" angibt, aber ich konnte Ihnen nicht sagen, wie und warum.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top