## 📘 **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 ---