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

---
