Lösung des Problems der Prozessorbefehlspipeline verstehen

Ich brauche Hilfe beim Verständnis der Lösung aus dem Lösungshandbuch.
Die Frage stammt aus der Übung 4.13.5 von Kapitel 4 im Buch Computer Organization and Design von Patterson und Hannessey (4. Auflage).
Die Frage bezieht sich auf das Pipelining von Anweisungen.

Die Frage

Betrachten Sie zwei Anweisungssequenzen: Fügen Sie diesem Code NOP-Anweisungen hinzu, um Gefahren zu eliminieren, wenn nur eine ALU-ALU-Weiterleitung vorhanden ist (keine Weiterleitung von der MEM- zur EX-Stufe).
Geben Sie hier die Bildbeschreibung ein

Die Lösung aus dem Lösungshandbuch

Bei einer ALU-ALU-Only-Weiterleitung kann ein ALU-Befehl an den nächsten Befehl weiterleiten, aber nicht an den zweitnächsten Befehl (weil dies eine Weiterleitung von MEM zu EX wäre). Eine Last kann überhaupt nicht weiterleiten, da sie den Datenwert in der MEM-Stufe bestimmt, wenn es für eine ALU-ALU-Weiterleitung zu spät ist. Wir haben:Geben Sie hier die Bildbeschreibung ein

Zweifel

  1. Die Frage fragt nach dem Hinzufügen von NOPs. Aber ich sehe kein einzelnes NOP in der angegebenen Lösung.

  2. In der Lösung heißt es: "Eine Last kann überhaupt nicht weiterleiten, da sie den Datenwert in der MEM-Stufe bestimmt, wenn es für die ALU-ALU-Weiterleitung zu spät ist.". Wie kann es dann in der Befehlsfolge 1 zu einer "ALU-ALU-Weiterleitung von R4 von I2" kommen?

  3. Ich verstehe den Sinn der Frage selbst nicht. Bedeutet es, die ALU-ALU-Weiterleitung durch NOPs zu ersetzen und die MA-EX-Weiterleitung unverändert zu lassen?

  4. Dieser Link gibt die Lösung für die zweite Anweisungssequenz wie folgt: während dieser Chegg-Link seine Lösung wie folgt angibt: Was ist wahr?
    Geben Sie hier die Bildbeschreibung ein

    Geben Sie hier die Bildbeschreibung ein

(Es gibt andere Ressourcen, die andere Anleitungssequenzen geben, wie ppts und pdf aus verschiedenen Universitätskursen, aber keine davon bietet eine zufriedenstellende logische Lösung. Ich habe sie hier nicht angegeben, um weitere Verwirrung zu vermeiden.)

Antworten (1)

Wenn ich die Frage richtig lese, bedeutet dies nicht, dass die ALU-ALU-Weiterleitung in einem LW-Befehl verboten ist, sondern dass das neue Ergebnis des Ladevorgangs nicht von der MEM-Stufe weitergeleitet wird, sodass Sie jetzt ein Datenrisiko zwischen I2 haben und I3 in a. (Bearbeiten: Die MEM-Weiterleitung ist hier eigentlich umstritten, da die EX-Phase von I3 zur gleichen Zeit wie die MEM-Phase von I2 stattfindet, sodass jede Weiterleitung zu spät ist).

Wenn dies eine klassische RISC-Pipeline ist, müssen Sie einfach NOP zwischen dem LW und dem ADD hinzufügen (bearbeiten: zwei, um sowohl MEM als auch WB zu berücksichtigen), um das Datenrisiko hier zu vermeiden.

Die von dir gefundenen Lösungen stimmen nur, die ALU-ALU-Weiterleitung findet nicht statt.

Wenn ALU-ALU-Weiterleitung EX-EX-Weiterleitung bedeutet und ich das Thema richtig verstehe, schätze ich, dass es sich überhaupt nicht um ALU-ALU (EX-EX) -Weiterleitung von LW-Anweisung zu nächster Anweisung handeln kann, da in der EX-Stufe der LW-Anweisung, ALU berechnet die effektive Adresse des aus dem Speicher in das Register zu ladenden Operanden. Dieser Operand wird nur in der MEM-Stufe verfügbar. Eine EX-EX-Weiterleitung ist also nicht möglich. Daher können wir meiner Meinung nach nicht sagen, dass die Frage "nicht bedeutet, dass die ALU-ALU-Weiterleitung in einer LW-Anweisung verboten ist".
Meinen Sie, wir müssen zwei NOPs nach LW hinzufügen? Wenn ja, ist das richtig, weil die andere Frage dazu auffordert (NOPs hinzufügen, um alle Datenabhängigkeitsgefahren zu beseitigen) und das Lösungshandbuch dasselbe sagt (zwei NOPs nach LW). Aber das ist eine andere Frage, nicht diese Frage.
Wenn Sie diese Frage erneut lesen, heißt es: "Fügen Sie diesem Code NOP-Anweisungen hinzu, um Gefahren zu beseitigen, wenn nur eine ALU-ALU-Weiterleitung vorhanden ist (keine Weiterleitung von der MEM- zur EX-Stufe)." Es heißt "wenn es nur ALU-ALU-Weiterleitung gibt", bedeutet das also, dass wir uns nicht um Probleme kümmern sollten, LWda es MEM-IDeine Weiterleitung erfordert? und wir sollten nur an die Anweisungssequenz (b) denken?
Bruder, kein Kommentar?
Entschuldigung, ich war ein paar Tage offline. Für LW besteht das Problem darin, dass eine Weiterleitung von MEM zu ID erforderlich ist, damit das ADD seine Arbeit erledigen kann. Wie Sie jedoch sagten, ist die MEM-ID-Weiterleitung nicht zulässig. Daher müssen Sie die erforderlichen NOPs für das Laden des Speichers hinzufügen und das Zurückschreiben registrieren vollständig.