vault backup: 2025-07-07 19:57:44
This commit is contained in:
161
Semester 6/COMARCH/Zusammenfassung/Vorlesung 6.md
Normal file
161
Semester 6/COMARCH/Zusammenfassung/Vorlesung 6.md
Normal file
@@ -0,0 +1,161 @@
|
||||
## 📘 **Zusammenfassung: V6 Pipelining Datapath and Control – Computerarchitektur**
|
||||
|
||||
### 🔁 Wiederholung: Pipelined Datapath
|
||||
|
||||
- **Pipeline-Register** zwischen Stufen speichern Zwischenergebnisse:
|
||||
|
||||
- IF/ID, ID/EX, EX/MEM, MEM/WB
|
||||
|
||||
- **Ziel:** jede Stufe arbeitet gleichzeitig an unterschiedlichen Instruktionen
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 📦 Pipeline-Steuerung
|
||||
|
||||
- **Steuersignale** werden wie im Single-Cycle-Design aus dem Opcode abgeleitet.
|
||||
|
||||
- Vereinfachte & detaillierte Steuerung für jede Pipeline-Stufe:
|
||||
|
||||
- IF → ID → EX → MEM → WB
|
||||
|
||||
- Fehlerbehandlung und Hazard-Erkennung notwendig.
|
||||
|
||||
|
||||
---
|
||||
|
||||
### ⚠️ Data Hazards & Forwarding
|
||||
|
||||
#### 📦 Beispiel-Hazard
|
||||
|
||||
```asm
|
||||
sub $2, $1, $3 # Ergebnis wird in $2 geschrieben
|
||||
and $12, $2, $5 # liest $2 → Hazard
|
||||
or $13, $6, $2 # liest $2 → Hazard
|
||||
```
|
||||
|
||||
#### 🛠 Lösungen
|
||||
|
||||
- **Forwarding (Bypassing):**
|
||||
|
||||
- Ergebnis wird direkt aus EX/MEM oder MEM/WB weitergeleitet.
|
||||
|
||||
- **Forwarding-Bedingungen:**
|
||||
|
||||
- EX-Hazard (vorherige Instruktion schreibt):
|
||||
|
||||
```
|
||||
if EX/MEM.RegWrite && EX/MEM.RegisterRd ≠ 0
|
||||
&& EX/MEM.RegisterRd == ID/EX.RegisterRs
|
||||
→ ForwardA = 10
|
||||
```
|
||||
|
||||
- MEM-Hazard (vor-vorherige Instruktion schreibt):
|
||||
|
||||
```
|
||||
if MEM/WB.RegWrite && MEM/WB.RegisterRd ≠ 0
|
||||
&& MEM/WB.RegisterRd == ID/EX.RegisterRs
|
||||
→ ForwardA = 01
|
||||
```
|
||||
|
||||
- **Revised Forwarding:** MEM-Forwarding nur, wenn kein EX-Hazard.
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 🔁 Load-Use Hazard
|
||||
|
||||
- Auftritt, wenn Instruktion direkt nach einem Load das geladene Register benötigt.
|
||||
|
||||
- **Lösung:** 1-Stall-Cycle (Bubble) einfügen.
|
||||
|
||||
- Erkennung:
|
||||
|
||||
```
|
||||
if ID/EX.MemRead &&
|
||||
(ID/EX.RegisterRt == IF/ID.RegisterRs ||
|
||||
ID/EX.RegisterRt == IF/ID.RegisterRt)
|
||||
→ Stall
|
||||
```
|
||||
|
||||
|
||||
---
|
||||
|
||||
### ⏱ Stalls & Bubbles
|
||||
|
||||
- **Bubble:** NOP wird in die Pipeline eingefügt
|
||||
|
||||
- PC und IF/ID-Register werden nicht aktualisiert (Pipeline pausiert)
|
||||
|
||||
- Compiler kann Code oft umsortieren, um Stalls zu vermeiden.
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 🔥 Branch Hazards & Lösungen
|
||||
|
||||
#### ⏳ Problem:
|
||||
|
||||
- Branch-Entscheidung erst in MEM-Stufe bekannt → falsche Befehle im IF
|
||||
|
||||
|
||||
#### 🛠 Lösungen:
|
||||
|
||||
1. **Early Branch Resolution:**
|
||||
|
||||
- Zieladresse & Vergleich schon in ID berechnen
|
||||
|
||||
2. **Flush Pipeline:**
|
||||
|
||||
- Falls Branch genommen → falsche Instruktionen entfernen
|
||||
|
||||
3. **Branch Prediction:**
|
||||
|
||||
- **Static Prediction:**
|
||||
|
||||
- Rückwärts: taken (Schleifen)
|
||||
|
||||
- Vorwärts: not taken
|
||||
|
||||
- **Dynamic Prediction:**
|
||||
|
||||
- **1-Bit Predictor:** einfache Historie
|
||||
|
||||
- **2-Bit Predictor:** robuster gegen wiederholte Fehleinschätzungen
|
||||
|
||||
- **Branch Target Buffer (BTB):**
|
||||
|
||||
- Cache für Zieladressen
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 📐 Visualisierung
|
||||
|
||||
- **Multi-Cycle-Diagramme:** Ressourcen-Nutzung über Zeit
|
||||
|
||||
- **Single-Cycle-Diagramme:** Pipeline-Zustand zu einem Takt
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 📊 Performance-Effekte
|
||||
|
||||
- Forwarding & Prediction minimieren Stalls
|
||||
|
||||
- Dennoch: Stalls notwendig für Korrektheit
|
||||
|
||||
- Compiler kann helfen: **Instruction Scheduling**
|
||||
|
||||
|
||||
---
|
||||
|
||||
### 📝 Für die Klausur merken
|
||||
|
||||
✅ Pipeline-Register & ihre Funktion
|
||||
✅ Forwarding vs. Stalling: Bedingungen & Hardwarelogik
|
||||
✅ Load-Use Hazard: Erkennung & Behebung
|
||||
✅ Branch Hazards: Static & Dynamic Prediction, BTB
|
||||
✅ Unterschied Multi- und Single-Cycle-Diagramme
|
||||
|
||||
---
|
||||
Reference in New Issue
Block a user