Programmiertechniken für Supercomputer - Cheatsheet
MPI (Message Passing Interface) und seine Anwendungsfälle
Definition:
MPI ist ein Standard für die parallele Programmierung auf verteilten Speichersystemen.
Details:
- Funktioniert durch Austausch von Nachrichten zwischen Prozessen.
- Wichtige Operationen: Punkt-zu-Punkt Kommunikation, Kollektive Operationen (Broadcast, Scatter, Gather), Synchronisation.
- Zwei Hauptmethoden: \texttt{MPI\textunderscore Send} und \texttt{MPI\textunderscore Recv}
- Wird oft in Supercomputing und High Performance Computing (HPC) verwendet.
- Anwendungsfälle: Numerische Simulationen, Wettervorhersagen, Berechnungsintensive wissenschaftliche Anwendungen.
Einführung in GPU-Architekturen und CUDA-Programmierung
Definition:
Einführung in GPU-Architekturen und CUDA-Programmierung, Grundlagen paralleler Programmierung auf GPUs mithilfe von CUDA.
Details:
- GPU-Architekturen: Viele Kerne, die einfache Aufgaben parallel verarbeiten; Unterschied zu CPUs, die auf serielle Verarbeitung optimiert sind.
- CUDA (Compute Unified Device Architecture): Programmierschnittstelle und Software-Umgebung von NVIDIA für die Nutzung der Rechenleistung von GPUs.
- Wichtige Konzepte: Threads, Blöcke, Grids, gemeinsame und globale Speicherbereiche.
- Wesentliche Funktionen zur Speicherverwaltung und Synchronisation:
cudaMalloc
, cudaFree
, __syncthreads
. - Leistungsoptimierung: Speicherhierarchie (Registers, Shared Memory, Global Memory), Thread Divergence vermeiden, Coalesced Memory Access.
- CUDA-Kernel: Funktionsaufrufe für parallelen Code, definiert mit
__global__
.
Thread-basierte Parallelisierung mit OpenMP
Definition:
Parallele Ausführung von Code durch Nutzung von Threads mit OpenMP.
Details:
- Compiler-Direktiven: #pragma omp parallel, #pragma omp for, #pragma omp sections
- Variablen: private, shared, reduction
- Synchronisation: critical, barrier, atomic
- Environment-Variablen: OMP_NUM_THREADS
- Performanceanalyse: Skalierbarkeit, Overhead durch Thread-Management
- Beispiel:
#pragma omp parallel num_threads(4) { // Code }
Profiling-Tools wie Gprof und VTune zur Leistungsanalyse
Definition:
Profiling-Tools wie Gprof und VTune zur Leistungsanalyse werden verwendet, um die Leistung von Programmen zu messen und Engpässe zu identifizieren.
Details:
- Gprof: GNU-Profiler, erstellt Berichte über Funktionsaufrufe und die Zeitaufwände, verwendet Sampling und Instrumentierung.
- VTune: Intel-Tool, bietet detaillierte Performance-Analysen auf Hardware-Ebene, einschließlich Thread- und Speicheranalyse.
- Hauptziele: Identifikation von Performance-Bottlenecks, Optimierung von Laufzeiten, Verbesserung der Ressourcennutzung.
- Nutzen: Verbessert Effizienz von Software auf Supercomputern.
Optimierung von Speicherzugriffsmustern in parallelen Systemen
Definition:
Optimierung von Speicherzugriffsmustern in parallelen Systemen: Strategien zur Reduktion von Latenzen und Erhöhung der Effizienz von Speicherzugriffen bei der parallelen Programmierung.
Details:
- Zugriffslokalität verbessern: Cache-Hierarchien nutzen.
- Speicherzugriffe ausrichten: Datenstrukturen so gestalten, dass sie im Speicher zusammenhängend abgelegt werden.
- False Sharing vermeiden: Vermeidung der gemeinsamen Nutzung von Cache-Linien durch unterschiedliche Threads.
- Speicherbandbreite optimal nutzen: Parallele Zugriffe koordinieren und Last im Speicher verteilen.
- Prefetching: Daten vorzeitig in den Cache laden, um Wartezeiten zu minimieren.
- Nicht-temporale Speicherzugriffe: Direkt in den Hauptspeicher schreiben, um Cache-Überflutung zu vermeiden.
Parallele Dateisysteme und Speicherverwaltung im HPC
Definition:
Datenmanagement und Optimierung der Speicherressourcen in Hochleistungsrechnern, um effiziente parallele Ein-/Ausgabeoperationen zu ermöglichen.
Details:
- Parallel Dateisysteme: Lustre, GPFS
- Größerer Durchsatz durch Verteilung auf mehrere Knoten
- RAID-Level für Fehlertoleranz und Leistungssteigerung
- Parallele I/O-Bibliotheken: MPI-IO, HDF5
- Speicherhierarchien: Cache, RAM, SSD, HDD
- Datenaufteilung: Chunking, Striping
- I/O-Optimierungstechniken: Prefetching, Caching
- Speicherverwaltung: Task-Zuordnung, Datenlokalität
Skalierungsstrategien für große Rechencluster
Definition:
Techniken zur effizienten Nutzung und Verwaltung von Ressourcen in großen Rechenclustern.
Details:
- Skalierungstechniken: horizontale und vertikale Skalierung
- Lastverteilung: Verteilung von Arbeitslasten auf mehrere Knoten
- Speicherhierarchie: Nutzung von Cache, RAM, und Festplatten
- Netzwerkoptimierung: Minimierung von Latenzen und Maximierung der Bandbreite
- Fehlertoleranz: Redundanz und Checkpointing
- Programmierung: pipelining, parallele Verarbeitung, und verteilte Algorithmen
- Besondere Herausforderungen: Kommunikationsoverhead und Synchronisierungskosten
Einsatz und Vergleich verschiedener Parallelisierungsstrategien
Definition:
Vergleich und Anwendung verschiedener Strategien zur Parallelisierung in Programmiertechniken für Supercomputer.
Details:
- Parallelisierungsstrategien: Datenparallelismus, Aufgabenparallelismus.
- OpenMP für geteilten Speicher.
- MPI für verteilten Speicher.
- Hybride Modelle (z.B. OpenMP & MPI kombiniert).
- Effizienzmetriken: Speedup, Skalierbarkeit, Lastverteilung.
- Problemgröße und Amdahl's Gesetz: \[ S = \frac{1}{(1 - P) + \frac{P}{N}} \]
- Automatische Parallelisierung vs. manuelle Optimierung.