Behandeln von Data‐Hazards mittels Forwarding
Bildquelle: David A. Patterson und John L. Hennessy, „Computer Organization and Design“, Fourth Edition, 2012
Allgemeine Lösung mittels Forwarding‐Unit
0
1 WB WB
2
0 0 1 2
EX/MEM.Rd
MEM/WB.Rd
Bildquelle: David A. Patterson und John L. Hennessy, „Computer Organization and Design“, Fourth Edition, 2012
Implementation der Forwarding‐Unit
Bemerkungen
Ü
Die Bestimmung von ForwardB erfolgt analog. (Übung)
Das Ganze muss noch als Wahrheitstabelle aufgeschrieben und Das Ganze muss noch als Wahrheitstabelle aufgeschrieben und dann als kombinatorische Schaltung realisiert werden.
Wie sieht die Wahrheitstabelle von ForwardA nach voriger
hergeleiteter Vorschrift aus? (Übung) [Tipp: um Platz zu sparen sollte man möglichst viele don‘t cares“ verwenden ]
sollte man möglichst viele „don t cares verwenden.]
Auch mit der Erweiterung auf ForwardB ist die Implementation der Forwarding‐Unit noch unvollständig. Was passiert z.B. für:
lw $2, 0($1) s $2 4($1) sw $2, 4($1)
Erweiterung: Forwarding muss z.B. auch in die MEM‐Stufe g g eingebaut werden. (Übung)
Nicht auflösbare Data‐Hazards
Nicht jeder Data‐Hazard lässt sich durch Forwarding
auflösen. Beispiel: Zugriff auf vorher gelesenes Register.
Bildquelle: David A. Patterson und John L. Hennessy, „Computer Organization and Design“, Fourth Edition, 2012
Pipeline‐Stall als Lösung
Bildquelle: David A. Patterson und John L. Hennessy, „Computer Organization and Design“, Fourth Edition, 2012
Allgemeine Lösung mittels Hazard‐Detection‐Unit
Bildquelle: David A. Patterson und John L. Hennessy, „Computer Organization and Design“, Fourth Edition, 2012
Implementation der Hazard‐Detection‐Unit
Quiz: Vermeiden von Pipeline‐Stalls
lw $t1, 0($t0) lw $t2 4($t0) lw $t2, 4($t0)
add $t3, $t1, $t2
W fi d
, ,
Bitte Befehlesw $t3, 12($t0)
Wo findet ein Pipe‐
line‐Stall statt? Bitte
Bitte Befehle umorganisie‐
ren, sodass alle Stalls
lw $t4, 8($t0)
add $t5 $t1 $t4
statt? Bitte
ankreuzen. vermieden
werden.
add $t5, $t1, $t4 sw $t5, 16($t0)
Anzahl Taktzyklen mit Stalls?
A hl T k kl h S ll ? Anzahl Taktzyklen ohne Stalls?
Control‐Hazards
Control‐Hazards
Bildquelle: David A. Patterson und John L. Hennessy, „Computer Organization and Design“, Fourth Edition, 2012
Branch‐Not‐Taken‐Strategie und Pipeline‐Flush
Flush = Verwerfe Flush = Verwerfe Instruktionen in der Pipeline. Hier: Setze IF/ID‐, ID/EX‐ und IF/ID , ID/EX und
EX/MEM‐Register auf 0.
Bildquelle: David A. Patterson und John L. Hennessy, „Computer Organization and Design“, Fourth Edition, 2012
Reduktion des Branch‐Delays
d b h k h i d
• Adressberechnung kann schon in der ID‐Stufe stattfinden
• beq und bne erfordert lediglich einbeq und bne erfordert lediglich ein 32‐Bit‐XOR und ein 32‐Bit‐OR
– Dazu braucht man keine ALU
Al h i d ID St f li i b – Also auch in der ID‐Stufe realisierbar
Beispiel: für $1 und $3:
• Damit ist der Sprung schon in der ID‐
Stufe entschieden Stufe entschieden
Bildquelle: David A. Patterson und John L. Hennessy, „Computer Organization and Design“, Fourth Edition, 2012
Reduktion des Branch‐Delays
• Konsequenz
– Branch‐Delay ist damit ein Instruktions‐Zyklus
Wir brauchen lediglich ein Flush IF/ID Register
– Wir brauchen lediglich ein Flush‐IF/ID‐Register
Reduktion des Branch‐Delays
• Achtung!
–
Forwarding aus späteren Stufen g p macht die Sache kompliziert.
–
Kann Pipeline‐Stall aufgrund von Data‐Hazards erforderlich
machen.
B i Z kl ALU E bi
• z.B. ein Zyklus, wenn ALU‐Ergebins in den Vergleich einfließt
• z.B. zwei Zyklen, wenn y ,
Vergleichsoperator einen Schritt vorher aus dem Speicher geladen wurde
wurde
–
Betrachten wir aber hier nicht genauer.
g
Bildquelle: David A. Patterson und John L. Hennessy, „Computer Organization and Design“, Fourth Edition, 2012
Dynamic‐Branch‐Prediction‐Strategie
Unterer Teil der Adresse
Branch hat stattgefunden 0x400000 : lw $1 0($4) der Adresse stattgefunden
0x00 1
0 04 0
0x400000 : lw $1, 0($4) 0x400004 : beq $1, $0, 40 0x400008 : add $1, $1, $1
0x04 0
0x08 1
0x40000c : ...
...
...
0xf8 0
0xfc 0
Branch‐Prediction‐Buffer ...
0x40c004 : bne $3, $4, 120 ...
Vorhersagegenauigkeit
Annahme unendlich langer Loop, der immer 9 mal und dann einmal nicht
loop: ...
...
b $1 $2 l durchlaufen wird. Was ist die
Vorhersagegenauigkeit der vorher beschriebenen Branch Prediction?
bne $1,$2,loop ...
j loop beschriebenen Branch‐Prediction? j loop
Lässt sich das Verbessern?
N‐Bit‐Vorhersage am Beispiel 2‐Bit
Bildquelle: David A. Patterson und John L. Hennessy, „Computer Organization and Design“, Fourth Edition, 2012
Vorhersagegenauigkeit
Annahme unendlich langer Loop, der immer 9 mal und dann einmal nicht
loop: ...
...
b $1 $2 l durchlaufen wird. Was ist die
Vorhersagegenauigkeit der vorher beschriebenen 2 Bit Branch
bne $1,$2,loop ...
j loop beschriebenen 2‐Bit‐Branch‐
Prediction?
j loop
Bildquelle: David A. Patterson und John L. Hennessy, „Computer Organization and Design“, Fourth Edition, 2012
Branch‐Delay‐Slot‐Idee
loop: ...
... • Wird immer ausgeführt.
• Instruktion muss aber unabhängig von
...
bne $1,$2,loop
<instruktion>
• Instruktion muss aber unabhängig von der Branch‐Entscheidung sein.
• Das muss der Compiler entscheiden.
f f
<instruktion> • Im Zweifelsfall: nop passt immer.
Bildquelle: David A. Patterson und John L. Hennessy, „Computer Organization and Design“, Fourth Edition, 2012
Beispiele von Branch‐Delay‐Slot‐Schedules
Bildquelle: David A. Patterson und John L. Hennessy, „Computer Organization and Design“, Fourth Edition, 2012
Weniger Branches mit Conditional‐Instruktionen
Beispiel MIPS‐Instruktionen movn und movz:
movn $8, $11, $4 # $8 = $11, wenn $4 != 0 movz $8, $11, $4 # $8 = $11, wenn $4 == 0 Erinnerung ARM ISA:
Erinnerung ARM‐ISA:
ADDEQ r0,r1,r2 ; If zero flag set then…
; ... r0 = r1 + r2
Quiz
Betrachte die folgenden Branch‐Strategien:
1. Vorhersage Branch findet statt
2. Vorhersage Branch findet nicht statt
3. Dynamische Branch‐Vorhersage (mit 90% Genauigkeit) Was ist die beste Strategie, wenn:
• Branch findet mit 5% Häufigkeit statt?
• Branch findet mit 95% Häufigkeit statt?
• Branch findet mit 70% Häufigkeit statt?
• Branch findet mit 70% Häufigkeit statt?