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