## 📘 **Zusammenfassung: V5 Pipelining – Computerarchitektur**

### 🚀 Was ist Pipelining?

- **Prinzip:** Überlappende Ausführung mehrerer Instruktionen
    
- **Analogie:** Waschstraße – mehrere Autos gleichzeitig in unterschiedlichen Phasen
    
- **Ziel:** Erhöhung des Durchsatzes (mehr Befehle pro Zeiteinheit)
    
- **Wichtig:** Latenz einzelner Instruktionen bleibt gleich
    

---

### 🔁 MIPS-Pipeline (5 Stufen)

|**Stufe**|**Name**|**Funktion**|
|---|---|---|
|1|IF (Instruction Fetch)|Befehl aus Speicher laden|
|2|ID (Instruction Decode)|Dekodieren, Register lesen|
|3|EX (Execute)|ALU-Berechnung, Adresse kalkulieren|
|4|MEM (Memory Access)|Speicher lesen/schreiben|
|5|WB (Write Back)|Ergebnis ins Register zurückschreiben|

---

### 📈 Performance-Vorteile

- **Single-Cycle Datapath:** 800 ps pro Befehl
    
- **Pipelined Datapath:** 200 ps pro Befehl
    
- **Theoretisches Speedup:** Anzahl Stufen = 5x schneller
    
- **Realität:** Speedup < 5 wegen Hazard-Stalls und unbalancierter Stufen
    

---

### ⚠️ Hazards (Gefahren)

#### 🏗 Struktur-Hazards

- Konflikt um Ressource (z. B. Instruktions- und Datenspeicher gleichzeitig benötigt)
    
- **Lösung:** Getrennte Instruktions-/Datenspeicher oder Caches
    

#### 📦 Daten-Hazards

- Instruktion benötigt Ergebnis der vorherigen Instruktion
    
- Beispiel:
    
    ```asm
    add $s0, $t0, $t1
    sub $t2, $s0, $t3
    ```
    
- **Lösungen:**
    
    - **Forwarding (Bypassing):** Ergebnis direkt weiterleiten
        
    - **Stalls:** Pipeline anhalten
        
    - **Code Scheduling:** Befehle umsortieren, um Abhängigkeiten zu vermeiden
        

#### 🔁 Kontroll-Hazards

- Sprünge (`beq`, `bne`) → Ziel erst spät bekannt
    
- **Lösungen:**
    
    - Warten bis Branch-Entscheidung (Stalls)
        
    - **Branch Prediction:**
        
        - **Static:** Vorwärts nicht nehmen, Rückwärts nehmen
            
        - **Dynamic:** Verlauf der Branches aufzeichnen und vorhersagen
            

---

### 📦 Optimierungen

- **Forwarding:** Verhindert unnötige Stalls
    
- **Branch Prediction:** Reduziert Control Hazards
    
- **Separate Speicher:** Löst Struktur-Hazards
    
- **Code Scheduling:** Compiler verschiebt Befehle zur Vermeidung von Stalls
    

---

### 📝 Für die Klausur merken

✅ Pipeline-Stufen & ihre Aufgaben  
✅ Arten von Hazards + Lösungsstrategien (Forwarding, Prediction)  
✅ Unterschied Durchsatz ↔ Latenz  
✅ Warum MIPS-ISA besonders pipelining-freundlich ist  
✅ Unterschied Static ↔ Dynamic Branch Prediction

---
