3.5 KiB
📘 Zusammenfassung: V6 Pipelining Datapath and Control – Computerarchitektur
🔁 Wiederholung: Pipelined Datapath
-
Pipeline-Register zwischen Stufen speichern Zwischenergebnisse:
- IF/ID, ID/EX, EX/MEM, MEM/WB
-
Ziel: jede Stufe arbeitet gleichzeitig an unterschiedlichen Instruktionen
📦 Pipeline-Steuerung
-
Steuersignale werden wie im Single-Cycle-Design aus dem Opcode abgeleitet.
-
Vereinfachte & detaillierte Steuerung für jede Pipeline-Stufe:
- IF → ID → EX → MEM → WB
-
Fehlerbehandlung und Hazard-Erkennung notwendig.
⚠️ Data Hazards & Forwarding
📦 Beispiel-Hazard
sub $2, $1, $3 # Ergebnis wird in $2 geschrieben
and $12, $2, $5 # liest $2 → Hazard
or $13, $6, $2 # liest $2 → Hazard
🛠 Lösungen
-
Forwarding (Bypassing):
- Ergebnis wird direkt aus EX/MEM oder MEM/WB weitergeleitet.
-
Forwarding-Bedingungen:
-
EX-Hazard (vorherige Instruktion schreibt):
if EX/MEM.RegWrite && EX/MEM.RegisterRd ≠ 0 && EX/MEM.RegisterRd == ID/EX.RegisterRs → ForwardA = 10 -
MEM-Hazard (vor-vorherige Instruktion schreibt):
if MEM/WB.RegWrite && MEM/WB.RegisterRd ≠ 0 && MEM/WB.RegisterRd == ID/EX.RegisterRs → ForwardA = 01
-
-
Revised Forwarding: MEM-Forwarding nur, wenn kein EX-Hazard.
🔁 Load-Use Hazard
-
Auftritt, wenn Instruktion direkt nach einem Load das geladene Register benötigt.
-
Lösung: 1-Stall-Cycle (Bubble) einfügen.
-
Erkennung:
if ID/EX.MemRead && (ID/EX.RegisterRt == IF/ID.RegisterRs || ID/EX.RegisterRt == IF/ID.RegisterRt) → Stall
⏱ Stalls & Bubbles
-
Bubble: NOP wird in die Pipeline eingefügt
-
PC und IF/ID-Register werden nicht aktualisiert (Pipeline pausiert)
-
Compiler kann Code oft umsortieren, um Stalls zu vermeiden.
🔥 Branch Hazards & Lösungen
⏳ Problem:
- Branch-Entscheidung erst in MEM-Stufe bekannt → falsche Befehle im IF
🛠 Lösungen:
-
Early Branch Resolution:
- Zieladresse & Vergleich schon in ID berechnen
-
Flush Pipeline:
- Falls Branch genommen → falsche Instruktionen entfernen
-
Branch Prediction:
-
Static Prediction:
-
Rückwärts: taken (Schleifen)
-
Vorwärts: not taken
-
-
Dynamic Prediction:
-
1-Bit Predictor: einfache Historie
-
2-Bit Predictor: robuster gegen wiederholte Fehleinschätzungen
-
-
Branch Target Buffer (BTB):
- Cache für Zieladressen
-
📐 Visualisierung
-
Multi-Cycle-Diagramme: Ressourcen-Nutzung über Zeit
-
Single-Cycle-Diagramme: Pipeline-Zustand zu einem Takt
📊 Performance-Effekte
-
Forwarding & Prediction minimieren Stalls
-
Dennoch: Stalls notwendig für Korrektheit
-
Compiler kann helfen: Instruction Scheduling
📝 Für die Klausur merken
✅ Pipeline-Register & ihre Funktion
✅ Forwarding vs. Stalling: Bedingungen & Hardwarelogik
✅ Load-Use Hazard: Erkennung & Behebung
✅ Branch Hazards: Static & Dynamic Prediction, BTB
✅ Unterschied Multi- und Single-Cycle-Diagramme