140 lines
3.7 KiB
Markdown
140 lines
3.7 KiB
Markdown
## 📘 **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
|
||
|
||
---
|