Ich brauche Hilfe beim Verständnis der Lösung aus dem Lösungshandbuch. Die Frage stammt aus der Übung 4.22.1 in Kapitel 4 des Buches Computer Organization and Design von Patterson und Hannessey (4. Auflage). Die Frage betrifft die Verzweigung in der Befehlspipeline.
Die Frage
Wir nehmen an, dass der folgende MIPS-Code auf einem Pipeline-Prozessor mit einer 5-Stufen-Pipeline, vollständiger Weiterleitung und einem Predict-Take-Branch-Prädiktor ausgeführt wird. Betrachten Sie die Anweisungssequenz:
Label1: LW R2,0(R2)
BEQ R2,R0,Label ; Taken once, then not taken
OR R2,R2,R3
SW R2,0(R5)
Zeichnen Sie das Pipeline-Ausführungsdiagramm für diesen Code unter der Annahme, dass es keine Verzögerungsschlitze gibt und dass Verzweigungen in der EX-Stufe ausgeführt werden.
Die angegebene Lösung lautet wie folgt:
Die Zweifel
verstehe ich nicht, warum im 4. Zyklus (blau LW
unterstrichen ***
). Können wir nicht im 4. Zyklus ID
ausführen ? LW
Ist es eine unausgesprochene Regel, dass, wenn die Verzweigungsentscheidungsphase (das rot unterstrichen EX
von BEQ
) verzögert wird (hier aufgrund der Datenabhängigkeit von first LW
for R2
), alle entsprechenden nächsten Phasen in den folgenden Anweisungen verzögert werden?
Daher werden "Blasen" oder Unterbrechungen aufgrund von Abhängigkeiten nach der Befehlsdecodierung des Befehls mit der Abhängigkeit (dem BEQ) eingefügt. Es scheint, dass Sie sich damit wohlfühlen. Als Ergebnis wird jedoch auch der Rest der Pipeline (die das zweite LW enthält) blockiert.
Stellen Sie sich das so vor: Es ist nicht möglich, eine Anweisung zu verzögern und die darauf folgenden Anweisungen nicht zu verzögern. Das würde erfordern, dass sich zwei Befehle gleichzeitig in derselben Pipeline-Stufe befinden: Wenn LW nicht ebenfalls blockiert wäre, würden das EX des BEQ und das EX des LW im selben Taktzyklus auftreten: nicht möglich!
Mahesha999
LW
wird unmittelbar nach der 2. Anweisung abgerufenBEQ
. Aber das ist bei nicht der FallOR
. Es wird lange nachgeholt, wenn das VorhergehendeBEQ
in der Phase istMEM
. Wird dasLW
immer noch abgerufen, nachdem das 2.BEQ, before
OR, but because prediction went wrong it was abandoned and
OR abgerufen wurde? Etwa so: Bilduint128_t