Steuerungs-Hazard – Dynamische Sprungvorhersage
Transcription
Steuerungs-Hazard – Dynamische Sprungvorhersage
Steuerungs-Hazard – Problem Sprungbefehl 40: (R1 == R2) → 72 44: (R1 and R12) → R5 48: (R1 or R12) → R5 52: (R14 add R2) → R2 1 2 3 4 5 6 7 BH DE OP BA RS BH DE OP BA RS BH DE OP BA RS BH DE OP BA ..... 72: (R14 add R2) → R2 ◆ Entscheidung ob Sprung oder nicht Sprung • erfolgt erst nach Auswertung der Bedingung im Beispiel 3 Takte nach dem Sprungbefehl geholt wurde 1 8 RS Steuerungs-Hazard mehrfache Befehlsausführung beide Zweige werden gleichzeitig ausgeführt • ein Ergebnis wird behalten, das andere wird verworfen Probleme Hzusätzliche Pipeline(s) erforderlich • Hweitere Verzweigungen können auftauchen verzögerter Verzweigung (delayed Branching) ◆ ◆ 2 • notwendig die Pipeline 3 Zyklen anzuhalten (stall-Zyklen) • jedoch: schlechteste aller Lösungen intelligenter: eine Sprungvorhersage zu treffen Steuerungs-Hazard Gegenmaßnahmen zumeist spekulative Befehlsausführung bzw. Sprungvorhersage Sprungvorhersage oder Verzweigungs-Vorhersage • • Statisch – Branch taken, not taken, by opcode Dynamisch – Vorhersage durch Sprung-Vorhersagepuffer (Branch prediction buffer) – Vorhersage durch Sprung-Zielpuffer (Branch history table / Branch target buffer) 3 Steuerungs-Hazard – Statische Sprungvorhersage Strategie: Branch not Taken – Sprung wird nie ausgeführt am Einfachsten zu implementieren Strategie: Branch Taken – Sprung wird immer ausgeführt Studien: mehr als 50% der Fälle wird Sprung durchgeführt Warum?: Schleifenende – vorzuziehen, falls Aufwand für das Beschaffen des nächsten Befehls bzw. des Befehls an der Verzweigung identisch Strategie: Branch by Opcode – Sprung anhand der Bedingungs-Operation 4 je nach Operation springe bzw. springe nicht Studie: richtige Vorhersage > 75% Steuerungs-Hazard – Dynamische Sprungvorhersage allgemein: Verbesserung gegenüber statischen Maßnahmen durch Aufzeichnung der Vorgeschichte – ein oder mehr Bits fungieren als taken / not taken switch • einfachste Variante: Sprung-Vorhersagepuffer (Branch Prediction Buffer) Tabelle: zu jedem Verzweigungsbefehl zugehörige Aufzeichnungsbits abspeichern • • Tabelle implementiert im Pipelineabschnitt der Befehlsholphase Teil der Adresse des Verzweigungsbefehls wird zur Adressierung der Tabelle benutzt Adresse Verzweigungsbef. 10100001 5 0000 0 0001 1 ... ... 1111 1 Aufzeichnungsbits (z.B. 1 –BitHistorie) Steuerungs-Hazard – Dynamische Sprungvorhersage • 1 Bit gibt Aufschluss über zuletzt vorgenommene Verzweigung – im Fehlerfalle Bit einfach invertieren – bei Schleifen macht man „nur“ zweimal einen Fehler 36: R1 := 1 40: R2 xor R3 → R4 44: R4 and R5 → R2 48: ... 52: R1 inc 56: (R1 < 4) goto 40 60: R6 or R7 → R6 6 2 3 1 Jump Jump not Steuerungs-Hazard – Dynamische Sprungvorhersage • 1 Bit gibt Aufschluss über zuletzt vorgenommene Verzweigung – im Fehlerfalle Bit einfach invertieren – bei Schleifen macht man „nur“ zweimal einen Fehler 36: R1 := 1 40: R2 xor R3 → R4 44: R4 and R5 → R2 48: ... 52: R1 inc 56: (R1 < 4) goto 40 60: R6 or R7 → R6 7 2 3 1 Jump Jump not Steuerungs-Hazard – Dynamische Sprungvorhersage • 1 Bit gibt Aufschluss über zuletzt vorgenommene Verzweigung – im Fehlerfalle Bit einfach invertieren – bei Schleifen macht man „nur“ zweimal einen Fehler 36: R1 := 1 40: R2 xor R3 → R4 44: R4 and R5 → R2 48: ... 52: R1 inc 56: (R1 < 4) goto 40 60: R6 or R7 → R6 8 2 3 1 Jump Jump not Steuerungs-Hazard – Dynamische Sprungvorhersage • 1 Bit gibt Aufschluss über zuletzt vorgenommene Verzweigung – im Fehlerfalle Bit einfach invertieren – bei Schleifen macht man „nur“ zweimal einen Fehler 36: R1 := 1 40: R2 xor R3 → R4 44: R4 and R5 → R2 48: ... 52: R1 inc 56: (R1 < 4) goto 40 60: R6 or R7 → R6 9 2 4 3 1 Jump Jump not Steuerungs-Hazard – Dynamische Sprungvorhersage • mehr Effizienz mit 2 Bit Aufzeichnungsbreite erzielbar (2 bit history switch) nicht verzweigt verzweigt Verzweigung wählen Verzweigung wählen verzweigt 00 01 verzweigt nicht verzweigt nicht verzweigt Verzweigung nicht wählen 10 • 10 verzweigt Verzweigung nicht wählen nicht verzweigt 11 Bei wiederholter Schleifenausführung kein Fehler am Anfang Steuerungs-Hazard – Dynamische Sprungvorhersage Sprungzielvorhersage • Speichert für Sprünge direkt Adresse des Folgebefehls • 11 Mit dyn. Sprungvorhersage Trefferquoten von 98% und mehr erzielbar