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

---
