3.7 KiB
📘 Zusammenfassung: V7 Pipelining – Exceptions, Interrupts & Instruction-Level Parallelism (ILP)
⚡ Exceptions & Interrupts
🛑 Was sind Exceptions?
-
Unerwartete Ereignisse innerhalb der CPU
- Beispiele: undefined opcode, overflow, syscall
-
MIPS: Verwaltet durch Coprozessor (CP0)
-
Speichert PC der verursachenden Instruktion in EPC (Exception Program Counter)
-
Speichert Ursache im Cause Register
-
Springt zu Exception Handler (z. B. Adresse
0x8000 0180)
-
📡 Was sind Interrupts?
-
Unerwartete Ereignisse von außen (z. B. I/O-Geräte)
-
Unterschiedliche ISAs verwenden „Exception“ & „Interrupt“ teilweise synonym.
🚦 Exception-Handling im Pipeline-Design
-
Ähnlich wie ein Branch-Misprediction:
-
Vorherige Instruktionen abschließen
-
Verursachende & folgende Instruktionen flushen
-
Kontrolle an den Handler übergeben
-
🔄 Restartable vs. Imprecise Exceptions
-
Restartable: Handler beendet und springt zurück zur Instruktion (EPC)
-
Imprecise: Pipeline stoppt, mehrere Exceptions gespeichert → Handler entscheidet, was zu tun ist
-
Schwieriger bei Out-of-Order-Pipelines
🚀 Instruction-Level Parallelism (ILP)
📊 Ziel: Mehrere Instruktionen gleichzeitig ausführen
-
Pipelining: 1 Instruktion pro Stufe, mehrere gleichzeitig aktiv
-
Deeper Pipeline: kürzere Takte, aber mehr Stalls möglich
-
Multiple Issue: mehrere Instruktionen pro Takt starten
-
Static Multiple Issue (VLIW):
-
Compiler bildet „issue packets“ (mehrere Instruktionen pro Takt)
-
Beispiel: Dual-Issue MIPS (1 ALU/Branch + 1 Load/Store)
-
Compiler-Scheduling nötig
-
-
Dynamic Multiple Issue (Superscalar):
-
CPU entscheidet zur Laufzeit, wie viele Instruktionen pro Takt gestartet werden
-
Vorteil: weniger Compiler-Arbeit
-
Herausforderung: Hazards und Ressourcen-Konflikte vermeiden
-
-
🧠 Speculation
-
Prinzip: Vermuten, welche Instruktionen ausgeführt werden können
-
Branch Speculation: Vorhersage der Sprungrichtung
-
Load Speculation: vorzeitiges Laden von Speicherwerten
-
-
Bei falscher Vermutung: Rollback & korrekt ausführen
🔄 Dynamisches Scheduling
-
CPU führt Instruktionen out of order aus, um Stalls zu vermeiden
-
Ergebnisse werden in order committed (Reorder Buffer)
-
Register Renaming:
-
Verhindert falsche Abhängigkeiten (WAW & WAR)
-
Ermöglicht parallele Nutzung derselben logischen Register
-
📈 Herausforderungen für ILP
-
Abhängigkeiten:
-
Datenabhängigkeit (true dependency)
-
Kontrollabhängigkeit (branches)
-
Ressourcenabhängigkeit (strukturelle Konflikte)
-
-
Compiler-Limitationen:
- Pointer-Aliasing erschwert statische Analyse
-
Hardware-Limitationen:
-
Fenstergröße für dynamisches Scheduling begrenzt
-
Cache-Misses & Speicherbandbreite begrenzen Parallelität
-
📝 Für die Klausur merken
✅ Unterschied Exception ↔ Interrupt
✅ EPC & Cause-Register im MIPS-Handling
✅ Restartable vs. Imprecise Exceptions
✅ VLIW vs. Superscalar (Static vs. Dynamic Multiple Issue)
✅ Speculation: was passiert bei falscher Vorhersage?
✅ Register Renaming: warum wichtig?
✅ Warum ILP in der Praxis nicht beliebig steigerbar ist