160 lines
3.6 KiB
Markdown
160 lines
3.6 KiB
Markdown
## 📘 **Zusammenfassung: V8b Speicheranbindung – Computerarchitektur**
|
||
|
||
---
|
||
|
||
### 🚨 Bottleneck: Speicher
|
||
|
||
- CPU-Leistung steigt schneller als Speicherleistung → **Memory Wall**
|
||
|
||
- Lösung: **Speicherhierarchie**
|
||
|
||
- Nutzt das **Prinzip der Lokalität**
|
||
|
||
- **Zeitliche Lokalität:** kürzlich verwendete Daten werden bald wieder benötigt
|
||
|
||
- **Räumliche Lokalität:** benachbarte Daten werden bald benötigt
|
||
|
||
|
||
---
|
||
|
||
### 🏛 Speicherhierarchie
|
||
|
||
|Ebene|Beispiel|Größe|Geschwindigkeit|
|
||
|---|---|---|---|
|
||
|Register|CPU-Register|Bytes|ns|
|
||
|L1-Cache|SRAM|KB|~1 ns|
|
||
|L2/L3-Cache|SRAM|MB|~10 ns|
|
||
|Hauptspeicher|DRAM|GB|~100 ns|
|
||
|Sekundärspeicher|SSD/HDD|TB|ms|
|
||
|
||
- **Hit:** Zugriff erfolgreich in oberer Ebene
|
||
|
||
- **Miss:** Daten müssen aus unterer Ebene geholt werden (Miss Penalty)
|
||
|
||
- **Miss Ratio = 1 – Hit Ratio**
|
||
|
||
|
||
---
|
||
|
||
### 💾 Speichertechnologien
|
||
|
||
- **SRAM:** schnell, teuer, klein → Caches
|
||
|
||
- **DRAM:** langsamer, günstiger, groß → Hauptspeicher
|
||
|
||
- **DDR, QDR:** Transfers auf steigender & fallender Flanke
|
||
|
||
- **Flash (EEPROM):** nicht-flüchtig, schneller als HDD, aber begrenzte Lebensdauer
|
||
|
||
- **NOR-Flash:** Random Access, Embedded Systems
|
||
|
||
- **NAND-Flash:** Blockweise Zugriff, USB, SSDs
|
||
|
||
- **Magnetische Platten (HDD):** große Kapazität, langsamer Zugriff
|
||
|
||
|
||
---
|
||
|
||
### 📦 Cache-Grundlagen
|
||
|
||
#### 📌 Organisation
|
||
|
||
- **Direct-Mapped Cache:** 1 Block pro Adresse
|
||
|
||
- **Set-Associative Cache:** mehrere mögliche Plätze pro Block
|
||
|
||
- **Fully-Associative Cache:** jeder Block kann überall hin
|
||
|
||
|
||
#### 📌 Komponenten
|
||
|
||
- **Tag:** identifiziert Block
|
||
|
||
- **Valid-Bit:** zeigt an, ob Block gültig ist
|
||
|
||
- **Replacement Policies:**
|
||
|
||
- LRU (Least Recently Used)
|
||
|
||
- Random
|
||
|
||
|
||
#### 📌 Schreibstrategien
|
||
|
||
- **Write-Through:** gleichzeitiges Schreiben in Cache & Speicher
|
||
|
||
- - Einfach
|
||
|
||
- – Langsam, Lösung: Write Buffer
|
||
|
||
- **Write-Back:** Schreiben nur bei Block-Verdrängung
|
||
|
||
- - Schnell
|
||
|
||
- – Komplexer (dirty-bit notwendig)
|
||
|
||
|
||
---
|
||
|
||
### 🏎 Cache-Performance
|
||
|
||
- **Miss Types:**
|
||
|
||
- **Compulsory:** erste Referenz
|
||
|
||
- **Capacity:** Cache zu klein
|
||
|
||
- **Conflict:** Set-Associative Caches
|
||
|
||
- **Formeln:**
|
||
|
||
- **AMAT (Average Memory Access Time):**
|
||
|
||
AMAT=HitTime+MissRate×MissPenaltyAMAT = HitTime + MissRate × MissPenalty
|
||
- **Effective CPI:**
|
||
|
||
CPIeff=CPIbase+MemoryStallsCPI_{eff} = CPI_{base} + MemoryStalls
|
||
|
||
---
|
||
|
||
### 🔥 Optimierungen
|
||
|
||
#### 🪜 Multilevel-Caches
|
||
|
||
- **L1:** klein & schnell, Fokus auf kurze Zugriffszeit
|
||
|
||
- **L2/L3:** größer, Fokus auf niedrige Missrate
|
||
|
||
|
||
#### 📐 Cache Blocking (Beispiel DGEMM)
|
||
|
||
- Matrix-Multiplikation optimiert durch Blockierung → bessere Cache-Nutzung
|
||
|
||
- Vermeidet Cache-Pollution & reduziert Misses
|
||
|
||
|
||
```c
|
||
#define BLOCKSIZE 32
|
||
for (sj = 0; sj < n; sj += BLOCKSIZE)
|
||
for (si = 0; si < n; si += BLOCKSIZE)
|
||
for (sk = 0; sk < n; sk += BLOCKSIZE)
|
||
do_block(n, si, sj, sk, A, B, C);
|
||
```
|
||
|
||
#### 🚀 Software-Optimierung
|
||
|
||
- Compiler & Algorithmus-Anpassung nutzen Lokalität besser aus
|
||
|
||
|
||
---
|
||
|
||
### 📝 Für die Klausur merken
|
||
|
||
✅ Prinzip der Lokalität (zeitlich & räumlich)
|
||
✅ Speicherhierarchie & typische Zugriffszeiten
|
||
✅ Direct-Mapped vs. Set-Associative vs. Fully-Associative
|
||
✅ Write-Through vs. Write-Back + Vor- & Nachteile
|
||
✅ AMAT-Formel und Cache-Performance-Berechnungen
|
||
✅ Cache Blocking bei DGEMM (Grundidee)
|
||
|
||
--- |