83 lines
2.4 KiB
Markdown
83 lines
2.4 KiB
Markdown
## 📘 **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
|
||
|
||
---
|