Wie viele Verzögerungszyklen resultierten aus einer falsch vorhergesagten Verzweigung in der Anweisungspipeline

Ich habe folgendes Übungsproblem aus dem Buch Computer Organization von Patterson und Hennessy gelöst:

Die Wichtigkeit eines guten Verzweigungsprädiktors hängt davon ab, wie oft bedingte Verzweigungen ausgeführt werden. Zusammen mit der Genauigkeit der Verzweigungsvorhersage bestimmt dies, wie viel Zeit aufgrund falsch vorhergesagter Verzweigungen ins Stocken gerät. Nehmen Sie in dieser Übung an, dass die Aufteilung dynamischer Befehle in verschiedene Befehlskategorien wie folgt ist: Nehmen Sie außerdem die folgenden Verzweigungsvorhersagegenauigkeiten an: Blockierungszyklen aufgrund falsch vorhergesagter Verzweigungen erhöhen den CPI. Wie hoch ist der zusätzliche CPI aufgrund falsch vorhergesagter Verzweigungen mit dem Immer-genommen-Prädiktor? Angenommen, dass Verzweigungsergebnisse in der EX-Stufe bestimmt werden, dass es keine Datenrisiken gibt und dass keine Verzögerungsschlitze verwendet werden.Geben Sie hier die Bildbeschreibung ein

Geben Sie hier die Bildbeschreibung ein

Die angegebene Lösung war:

Jede Verzweigung, die vom Always-taken-Prädiktor nicht korrekt vorhergesagt wird, verursacht 3 Stall-Zyklen, also haben wir:
Geben Sie hier die Bildbeschreibung ein

Zweifeln

Ich habe darüber nachgedacht, wie eine falsch vorhergesagte Verzweigung 3 Stall-Zyklen verursachen kann? Ich konnte nur 2 Stallzyklen erraten. Beachten Sie die Anweisungsfolge:

BEQ R1, R2, Label
INSNX
INSNY
:
:
Label: TINS1
TINS2

Wo,

  • BEQist Verzweigung, wenn gleiche Anweisung.
  • TINSbedeutet Zielanweisung.
  • INSNbedeutet Anweisungen neben BEQ.

Bedenken Sie, dass ein "statischer Verzweigungsprädiktor" verwendet wird, der immer eine Verzweigungszielanweisung vorab abruft, wobei eine denkende Verzweigung immer genommen wird. Es sei jedoch angenommen, dass die Vorhersage fehlschlägt und die vorab abgerufenen zwei Befehle verworfen werden müssen. Sollte diese Ausführung nicht zwei Blockierungszyklen verursachen, wie unten erläutert:

BEQ       F   D   E  
TINS1         F   D   X        (Branch Taken prediction, target instruction prefetched,      
                                but prediction failed, thus instruction cancelled)
TINS2             F   X        (prediction failed, thus instruction cancelled)
INSNX                 F   D... (Instruction after BEQ executed)

             |<--->|           (Two instructions cancelled. 
                                Isnt this equals two stall cycles?)

Ist dies nicht ein falsch vorhergesagtes Verzweigungsergebnis in 2 Stall-Zyklen? Was fehlt mir?

Können Sie auf die Seite(n) und die Auflage des Buches verweisen? Und haben Sie einen Zyklus zum Aktualisieren des Verzweigungsprädiktors selbst in Betracht gezogen (oder sollten Sie? Ich weiß nicht ...) (dies ist ein 2-Bit-Prädiktor, also muss der Zustand aktualisiert werden, ja?)
Nein, weder ich habe in der untersten Erklärung noch in der Buchlösung einen Zyklus zum Aktualisieren des Verzweigungsprädiktors berücksichtigt. Tatsächlich war mir die Notwendigkeit eines solchen Zyklus nicht bewusst, da ich nie auf ein solches Problem gestoßen bin. Ich denke jedoch nicht, dass wir es hier berücksichtigen müssen, da das Problem ausdrücklich sagt: "Was ist der zusätzliche CPI aufgrund falsch vorhergesagter Zweige mit dem immer genommenen Prädiktor?" (Vorletzte Zeile im ersten Anführungszeichen.) Der "Immer genommen-Prädiktor" ist ein statischer Prädiktor , der davon ausgeht, dass die Verzweigung immer genommen wird.
Was mich dazu gebracht hat, Sie zu fragen, ist, dass ich in Ihrer Frage auch die Spalte "2 Bit" in einer dortigen Tabelle sehe. Ich sehe jedoch auch, dass diese Prozentsätze in dieser Tabelle ebenfalls nicht angewendet werden. Ich denke, ich muss Ihren Standpunkt zur Verwendung des statischen Prädiktors übernehmen. Mein Fehler. Ich möchte noch wissen, welche Ausgabe und welche Seite.
Es ist die Gruppe von Fragen, die auch Fragen zu anderen Prädiktoren enthält. Ich hänge an diesem speziellen fest. (Ausgabe und Seite in früherem Kommentar)
Ich habe das Buch nicht, habe es nie gelesen. (Ich habe jedoch einige sehr bescheidene Arbeiten bei Intel im Zusammenhang mit RTL- und Chipsatztests durchgeführt.) Ist dies eine typische 5-Zyklen-Latenzanweisung mit IF , DECODE , EXEC , MEM , WRITE BACK Zyklen? (Ich verstehe bereits, dass dies in der Pipeline ist, da dies angesichts der Frage selbstverständlich ist.) Und wird die Verzweigungsgefahr bei MEM erkannt ?
Entschuldigung für die späte Antwort :(. Ja, es ist eine 5-Stufen-Pipeline mit genau fünf Stufen, wie Sie bemerkt haben. Soweit ich es gelesen habe, folgten standardmäßig alle Probleme und Erklärungen der "Zweigausführung in EXEC". Wann immer es in DECODE erledigt ist, ist das Problem ausdrücklich gesagt, dass. Buch sagte nie "im MEM-Stadium".
DECODE tritt auf , bevor/während die bedingte Verzweigung selbst sogar decodiert wird. Dies impliziert also, dass die Quellregister während des Decodierens sofort adressiert und zu diesem Zweck auf eine zusätzliche Logik angewendet werden, zuvor mit dem Status, der bei Bedarf weitergeleitet wird. Sie haben nichts davon in Ihrer Frage erwähnt, wenn ja. Und es ist wichtig, denke ich. Außerdem frage ich mich jetzt, ob der Zweig ALU (Addierer) auch in die DECODE-Stufe verschoben wurde. Scheint so zu sein. Können Sie hier weitere Details bestätigen? (Ich genieße es, über diese Dinge nachzudenken, da es mich ein paar Jahrzehnte zurückversetzt. Aber Kontext und Details sind wichtig.)
Super sorry, dass ich so spät antworte. Ich habe diese Frage einige Tage vor meiner Prüfung gestellt und es gelassen, da ich nicht genug Zeit hatte, um auf Details einzugehen, und andere Dinge angehäuft hatte. Jetzt, wo ich die Prüfung nicht bestanden habe, schaue ich noch einmal vorbei. (1) "DECODE tritt auf, bevor/während die bedingte Verzweigung selbst sogar dekodiert wird." - sollte das letzte Wort "ausgewertet" werden (2) Im gesamten Kapitel geht das Buch davon aus, dass die Quelloperanden in der zweiten Hälfte des Zyklus der Dekodierungsstufe gelesen werden. (3) Warum denkst du, dass "ALU (Addierer) in die DECODE-Phase nach oben verschoben wurde"? [Nochmals Abendessen, sorry für die super späte Antwort]
hey @jonk irgendwas über diesen mann? bitte...😢

Antworten (2)

Der Grund, warum eine falsch vorhergesagte Verzweigung 3 Stall-Zyklen verursachen kann, liegt darin, dass in diesem Problem angegeben wird: "Angenommen, dass Verzweigungsergebnisse in der EX-Stufe bestimmt werden ..." Dies bedeutet, dass wir 3 Taktzyklen benötigen bestimmen, ob eine Verzweigung genommen wird oder nicht. Um auf Ihr Szenario zurückzukommen, fragen Sie sich vielleicht, wie dies auf die TINS-Anweisungen, also die Zielanweisungen, zutrifft. Wenn wir uns das allererste TINS1 ansehen, können wir beobachten, dass diese Anweisung HÖCHSTENS 3 Taktzyklen dauert , bevor wir zu INSNX abzweigen. Wenn Sie sich fragen, warum, müssen Sie verstehen, dass unsere Verzweigung in der Ausführungsphase vorhergesagt wird, die 3 UHRZYKLEN ist. Wenn wir also zu ISNX verzweigen, haben wir eine Strafe von 3 TAKTZYKLENum möglicherweise 3 (TINS1, TINS2, TINS3) Befehle auszuspülen. Bitte beziehen Sie sich auf Seite 308, Abbildung 4.59 der Computer Organization von Patterson und Hennessy Risc-V Edition, um eine bessere Visualisierung dessen zu erhalten, was ich meine. Das Problem ist sehr ähnlich. Ich hoffe das hilft.

BEQ       F   D   E  
TINS1         F   D   X        (Branch Taken prediction, target instruction prefetched,      
                                but prediction failed, thus instruction cancelled)
TINS2             F   X        (prediction failed, thus instruction cancelled)
INSNX                 F   D... (Instruction after BEQ executed)

             |<--->|           (Two instructions cancelled. 
                                Isnt this equals two stall cycles?)

Wenn Sie die Problembeschreibung von Patterson & Hennessys Computer Organization and Design Fourth/Fifth Edition mit der von MIPS 6th Edition/RISC-V 1st/2nd Edition vergleichen, werden Sie feststellen, dass spätere Versionen die Problembeschreibung als „Branch Outcomes are defined in der ID-Stufe und angewendet in der EX-Stufe", um die vorherige Mehrdeutigkeit aufzulösen. Der Registerabgleich, die Ermittlung der Zweigergebnisse oder der Zweigtest unterscheiden sich von der Entscheidung über die Verzweigung, der Anwendung der Zweigergebnisse oder der Zweigauswahl. Je nach Implementierung können die Bestimmung und die Anwendung unterschiedlich oder gleich sein.

Dieses Problem verwendet implizit die Implementierung der klassischen Pipeline im Lehrbuch, wo die Bestimmung der Verzweigungsergebnisse in der EX-Stufe und die Anwendung der Verzweigungsergebnisse in der MEM-Stufe erfolgt, dh um zu entscheiden, ob die Verzweigung genommen wird oder nicht genommen befindet sich noch im MEM-Stadium. Angesichts dieser Annahme ist es klar, dass 3 Verzögerungen eingefügt würden und 3 Taktzyklen der Strafe auferlegt würden (Sie können sich auf Abbildung 4.61 der fünften Ausgabe oder Abbildung 4.59 von RISC-V, 1. Ausgabe oder Abbildung 4.63 von RISC-V, 2. beziehen Auflage).