Heterogene Rechnerarchitekturen Online - Cheatsheet
Unterschiede zwischen homogenen und heterogenen Architekturen
Definition:
Unterschiede zwischen homogenen und heterogenen Architekturen.
Details:
- Homogene Architektur: gleiche Arten von Prozessoren
- Heterogene Architektur: verschiedene Arten von Prozessoren, z.B. CPU + GPU
- Homogene Systeme: einfachere Programmierung und Lastverteilung
- Heterogene Systeme: optimierte Leistungssteigerung durch Spezialprozessoren
- Leistung: \text{Heterogene Systeme sind oft leistungsfähiger für bestimmte Aufgaben}
- Komplexität: \text{Heterogene Systeme erfordern komplexere Softwareentwicklung}
Grundlagen der parallelen Verarbeitung und Amdahl's Law
Definition:
Grundlagen der parallelen Verarbeitung: Prinzipien und Techniken zum gleichzeitigen Ausführen mehrerer Berechnungen. Ziel der Beschleunigung durch die Nutzung mehrerer Prozessoren/Kerne.Amdahl's Law: beschreibt das theoretische Maximum der Beschleunigung eines Programms durch Parallelisierung.
Details:
- Speedup S: \(S = \frac{1}{(1 - P) + \frac{P}{N}}\), wobei P der parallelisierbare Anteil und N die Anzahl der Prozessoren ist.
- Gesamtbeschleunigung begrenzt durch nicht parallelisierbaren Anteil (1 - P)
- Praktische Bedeutung: Trotz Erhöhung der Prozessoranzahl endet Speedup S irgendwann in einem Sättigungspunkt.
Thread-Synchronisierung und Kommunikation
Definition:
Thread-Synchronisierung und Kommunikation: Verhindern von Race Conditions und Koordinieren von Threads, um konsistente Daten zu gewährleisten.
Details:
- Mutexe/Sperren: Verhindern gleichzeitigen Zugriff auf kritische Abschnitte.
- Semaphoren: Zählerbasierte Synchronisierung, erlaubt mehrere Threads gleichzeitig.
- Monitore: Kombination aus Mutex und Bedingungsvariablen.
- Bedingungsvariablen: Ermöglichen das Warten auf bestimmte Zustände.
- Atomare Operationen: Ununterbrochene, sichere Operationen.
- Spinlocks: Wartet aktiv, bis die Sperre freigegeben wird.
Warp- und Thread-Verwaltung in GPUs
Definition:
Verwaltung der Ausführung von Threads in vordefinierten Gruppen (Warps) innerhalb von GPU-Kernen.
Details:
- Ein Warp besteht aus 32 Threads.
- Threads in einem Warp führen die gleiche Instruktion gleichzeitig aus (SIMT-Modell).
- Thread-Divergenz tritt auf, wenn Threads unterschiedliche Pfade nehmen, was Performanceeinbußen verursachen kann.
- Warp-Scheduler verwaltet die Zuteilung von Instruktionen zu Warps.
- Effektive Nutzung von Warps erhöht die GPU-Auslastung und Leistung.
Entwicklung und Optimierung von Kernels in OpenCL und CUDA
Definition:
Entwicklung und Optimierung von Berechnungskernen (Kernels) für paralleles Rechnen auf GPUs in den Programmiersprachen OpenCL und CUDA.
Details:
- OpenCL: Plattformunabhängige Programmiersprache für heterogene Systeme.
- CUDA: NVIDIAs proprietäre API und Sprachenerweiterung für paralleles Rechnen auf GPUs.
- Kernel: Funktion, die auf der GPU ausgeführt wird.
- Wichtige Schritte der Optimierung: Speicherverwaltung, Parallelität erhöhen, Thread-Synchronisation minimieren.
- Speichertypen: Global, Shared, Constant und Register-Speicher.
- Performance-Tools: NVIDIA Visual Profiler für CUDA, AMD CodeXL für OpenCL.
Speicherhierarchien und -zugriffe in GPUs
Definition:
Speicherhierarchien in GPUs optimieren den Datenzugriff und die Leistung. Der Speicher auf GPUs ist hierarchisch aufgebaut, um schnelle Datenzugriffe zu ermöglichen.
Details:
- Register: Schnellster Speicher, aber begrenzt.
- Shared Memory: Schnell, wird zwischen Threads eines Blocks geteilt.
- L1/L2 Cache: Pufferspeicher, der die Zugriffszeiten reduziert.
- Global Memory: Große Speicherkapazität, aber langsamer Zugriff.
- Textur- und Konstantenspeicher: Spezialspeicher zur Nutzung bestimmter Datenmuster.
- Zugriffszeiten: Register < Shared Memory < L1 Cache < L2 Cache < Global Memory.
- Datenzugriff optimieren durch Koaleszierung bei globalem Speicherzugriff.
Race Conditions: Vermeidung und Umgang
Definition:
Gleichzeitiger Zugriff auf gemeinsame Ressourcen führt zu inkonsistentem Zustand.
Details:
- Verwendung von Locks und Mutexen zur Synchronisation: \texttt{pthread\textunderscore mutex\textunderscore lock}, \texttt{pthread\textunderscore mutex\textunderscore unlock}
- Atomare Operationen vermeiden Race Conditions: \texttt{std::atomic}
- Verwendung von Semaphoren: \texttt{sem\textunderscore wait}, \texttt{sem\textunderscore post}
- Speicherbarrieren (Memory Barriers) erzwingen Ordnung: \texttt{std::memory\textunderscore order}
- Entwicklung und Test mit Tools wie \texttt{Helgrind}, \texttt{ThreadSanitizer}
Leistungsbewertung und -optimierung in parallelen Systemen
Definition:
Leistungsbewertung und -optimierung in parallelen Systemen umfasst die Analyse und Verbesserung der Effizienz, Skalierbarkeit und Ressourcennutzung paralleler Rechenarchitekturen.
Details:
- Leistungskennzahlen: Durchsatz, Latenz, Skalierbarkeit, Effizienz
- Analyse-Tools: Profiler, Benchmarking
- Optimierungstechniken: Lastverteilung, Parallelisierungstechniken, Speicherhierarchie-Optimierung
- Amdahlsches Gesetz: \[ S = \frac{1}{(1 - P) + \frac{P}{N}} \]
- Gustafsons Gesetz: \[ S = N - (N - 1) * (1 - P) \]
- Wichtig: Overhead durch Kommunikation und Synchronisation minimieren