Befehlsverzweigung verstehen

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 Lösung
Geben Sie hier die Bildbeschreibung ein

Die Zweifel
verstehe ich nicht, warum im 4. Zyklus (blau LWunterstrichen ***). Können wir nicht im 4. Zyklus IDausführen ? LWIst es eine unausgesprochene Regel, dass, wenn die Verzweigungsentscheidungsphase (das rot unterstrichen EXvon BEQ) verzögert wird (hier aufgrund der Datenabhängigkeit von first LWfor R2), alle entsprechenden nächsten Phasen in den folgenden Anweisungen verzögert werden?

Antworten (1)

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!

ok Ich denke, es gibt noch etwas, das zu meiner Verwirrung beigetragen hat: Die 3. Anweisung LWwird unmittelbar nach der 2. Anweisung abgerufen BEQ. Aber das ist bei nicht der Fall OR. Es wird lange nachgeholt, wenn das Vorhergehende BEQin der Phase ist MEM. Wird das LWimmer noch abgerufen, nachdem das 2. BEQ, before OR , but because prediction went wrong it was abandoned and OR abgerufen wurde? Etwa so: Bild
@ Mahesha999 Ja, ich glaube, das ist richtig.