Data Hazards Grundlagen der Rechnerarchitektur Prozessor 74
Motivation Ist die Pipelined Ausführung immer ohne Probleme möglich? Beispiel: sub $2, $1, $3 and $12, $2, $5 or $13, $6, $2 add $14, $2, $2 sw $15, 100($2) Also, alle vier nachfolgenden Instruktionen hängen von der sub Instruktion ab. Annahme: $2 speichert 10 vor der sub Instruktion. $2 speichert 20 nach der sub Instruktion. Betrachten wir die Pipeline: Grundlagen der Rechnerarchitektur Prozessor 75
Problem Rückwärtsabhängigkeiten Instr. Zeile and or add sw Sollte aus $2 lesen Liest aus $2 Data Hazard Grundlagen der Rechnerarchitektur Prozessor 76
Behandeln von Data Hazards mittels Forwarding Grundlagen der Rechnerarchitektur Prozessor 77
Allgemeine Lösung mittels Forwarding Unit 0 1 2 WB WB 0 1 2 EX/MEM.Rd MEM/WB.Rd Grundlagen der Rechnerarchitektur Prozessor 78
Implementation der Forwarding Unit Grundlagen der Rechnerarchitektur Prozessor 79
Bemerkungen Die Bestimmung von ForwardB erfolgt analog. (Übung) 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.] 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) sw $2, 4($1) Erweiterung: Forwarding muss z.b. auch in die MEM Stufe eingebaut werden. (Übung) Grundlagen der Rechnerarchitektur Prozessor 80
Nicht auflösbare Data Hazards Nicht jeder Data Hazard lässt sich durch Forwarding auflösen. Beispiel: Zugriff auf vorher gelesenes Register. Grundlagen der Rechnerarchitektur Prozessor 81
Pipeline Stall als Lösung Grundlagen der Rechnerarchitektur Prozessor 82
Allgemeine Lösung mittels Hazard Detection Unit Grundlagen der Rechnerarchitektur Prozessor 83
Implementation der Hazard Detection Unit Grundlagen der Rechnerarchitektur Prozessor 84
Quiz: Vermeiden von Pipeline Stalls Wo findet ein Pipeline Stall statt? Bitte ankreuzen. lw lw $t1, 0($t0) $t2, 4($t0) add $t3, $t1, $t2 sw lw $t3, 12($t0) $t4, 8($t0) add $t5, $t1, $t4 sw $t5, 16($t0) Anzahl Taktzyklen mit Stalls? Anzahl Taktzyklen ohne Stalls? Bitte Befehle umorganisieren, sodass alle Stalls vermieden werden. Grundlagen der Rechnerarchitektur Prozessor 85
Control Hazards Grundlagen der Rechnerarchitektur Prozessor 86
Control Hazards Grundlagen der Rechnerarchitektur Prozessor 87
Branch Not Taken Strategie und Pipeline Flush Flush = Verwerfe Instruktionen in der Pipeline. Hier: Setze IF/ID, ID/EX und EX/MEM Register auf 0. Grundlagen der Rechnerarchitektur Prozessor 88
Reduktion des Branch Delays Adressberechnung kann schon in der ID Stufe stattfinden beq und bne erfordert lediglich ein 32 Bit XOR und ein 32 Bit OR Dazu braucht man keine ALU Also auch in der ID Stufe realisierbar Beispiel: für $1 und $3: Damit ist der Sprung schon in der ID Stufe entschieden Grundlagen der Rechnerarchitektur Prozessor 89
Reduktion des Branch Delays Konsequenz Branch Delay ist damit ein Instruktions Zyklus Wir brauchen lediglich ein Flush IF/ID Register Grundlagen der Rechnerarchitektur Prozessor 90
Reduktion des Branch Delays Achtung! Forwarding aus späteren Stufen macht die Sache kompliziert. Kann Pipeline Stall aufgrund von Data Hazards erforderlich machen. z.b. ein Zyklus, wenn ALU Ergebnis in den Vergleich einfließt z.b. zwei Zyklen, wenn Vergleichsoperator einen Schritt vorher aus dem Speicher geladen wurde Betrachten wir aber hier nicht genauer. Grundlagen der Rechnerarchitektur Prozessor 91
Dynamic Branch Prediction Strategie 0x400000 : lw $1, 0($4) 0x400004 : beq $1, $0, 40 0x400008 : add $1, $1, $1 0x40000c :......... 0x40c004 : bne $3, $4, 120... Unterer Teil der Adresse 0x00 1 0x04 0 0x08 1... 0xf8 0 0xfc 0 Branch hat stattgefunden Branch Prediction Buffer Grundlagen der Rechnerarchitektur Prozessor 92
Vorhersagegenauigkeit Annahme unendlich langer Loop, der immer 9 mal und dann einmal nicht durchlaufen wird. Was ist die Vorhersagegenauigkeit der vorher beschriebenen Branch Prediction? loop:...... bne $1,$2,loop... j loop Lässt sich das verbessern? Grundlagen der Rechnerarchitektur Prozessor 93
N Bit Vorhersage am Beispiel 2 Bit Grundlagen der Rechnerarchitektur Prozessor 94
Vorhersagegenauigkeit Annahme unendlich langer Loop, der immer 9 mal und dann einmal nicht durchlaufen wird. Was ist die Vorhersagegenauigkeit der vorher beschriebenen 2 Bit Branch Prediction? loop:...... bne $1,$2,loop... j loop Grundlagen der Rechnerarchitektur Prozessor 95
Branch Delay Slot Idee loop:...... bne $1,$2,loop <instruktion> <instruktion> Wird immer ausgeführt. Instruktion muss aber unabhängig von der Branch Entscheidung sein. Das muss der Compiler entscheiden. Im Zweifelsfall: nop passt immer. Grundlagen der Rechnerarchitektur Prozessor 96