Programmiertechniken für Supercomputer - Cheatsheet
Grundlagen und Geschichte des Supercomputings
Definition:
Basiswissen und historische Entwicklung des Einsatzes und Designs von Supercomputern.
Details:
- Erste Generation (1960er): Einsatz von Transistoren, Beispiel: CDC 6600.
- Zweite Generation (1970er-1980er): Nutzung von Vektorprozessoren, Beispiel: Cray-1.
- Dritte Generation (1990er): MPP-Architekturen (Massively Parallel Processing), Beispiel: IBM SP2.
- Aktuelle Entwicklungen: Heterogene Systeme, GPU-Beschleuniger, Beispiel: Summit, Fugaku.
- Mooresches Gesetz: Verdopplung der Transistorenanzahl etwa alle 2 Jahre.
- Hauptanwendungen: Wettervorhersage, Klimaforschung, Molekulardynamik, Quantenmechanik, KI/ML.
OpenMP und MPI: Standards für paralleles Programmieren
Definition:
OpenMP: API für multi-threaded, geteilte Speicher Programmierung. MPI: API für verteilte Speicher Programmierung über multiple Rechner.
Details:
- OpenMP: Direktiven-basierte Parallelisierung in C/C++ und Fortran
- #pragma omp parallel: Definiert parallele Region
- Teilt Arbeit auf Threads, geteilte (shared) und private Variablen
- MPI: Bibliotheks-basierte Kommunikation zwischen Prozessen
- MPI_Init, MPI_Finalize: Initialisierung und Abschluss
- MPI_Send, MPI_Recv: Punkt-zu-Punkt Kommunikation
- MPI_Barrier, MPI_Bcast: Kollektive Operationen
- Skalierung über tausende von Knoten
Analyse und Profiling von Performance-Bottlenecks
Definition:
Identifikation und Untersuchung von Engpässen, die die Leistung von Programmen, insbesondere auf Supercomputern, beeinträchtigen.
Details:
- Verwendung von Profilern zur Laufzeitanalyse: z.B. gprof, perf
- Metriken: CPU-Auslastung, Speicherbandbreite, I/O-Operationen
- Typische Bottlenecks: Rechenintensive Schleifen, Synchronisationsprobleme, Cache-Misses, Speicherzugriffe
- Analysewerkzeuge: VTune, TAU, Scalasca
- Strategien zur Optimierung: Parallelisierung, Algorithmenanpassung, Datenlokalität verbessern
- Verwendung von Performance-Countern: PAPI, perf_event
- Cyclische Analyse: Identifikation, Messung, Optimierung, Validierung
Speicherorganisation und Caches
Definition:
Optimierung der Speicherzugriffe für höhere Ausführungsgeschwindigkeit auf Supercomputern durch Hierarchisierung der Speicher und Verwendung von Caches.
Details:
- Hierarchie: Register, Cache (L1, L2, L3), Hauptspeicher, Festplatte
- Cache: schneller aber kleiner als Hauptspeicher
- Lokale Nähe: höhere Zugriffswahrscheinlichkeit durch temporale und räumliche Lokalität
- Cache-Kohärenz und Konsistenz
- Speicheradressierung: physische vs. virtuelle Adressen
- Optimierungstechniken: Prefetching, Blocking, und Cache-Awareness
- Cache-Miss-Typen: compulsory, capacity, conflict
- Wichtig für Leistungsanalyse und -optimierung
Lastverteilung und Parallelismusstrategien
Definition:
Verteilung der Arbeitslast und Strategien zur Nutzung paralleler Verarbeitungseinheiten in Supercomputern.
Details:
- Lastverteilung (Load Balancing): Optimierung der Arbeitsaufteilung auf verfügbare Prozessoren zur Minimierung von Rechenzeiten und Maximierung der Ressourcennutzung.
- Statische Lastverteilung: Vorab-Festlegung der Aufgabenverteilung basierend auf bekannten Arbeitslasten.
- Dynamische Lastverteilung: Laufzeit-Umverteilung basierend auf aktuellen Lasten und Systemzuständen.
- Datenparalleler Ansatz: Aufteilung großer Datenmengen in kleinere Teile, die parallel verarbeitet werden.
- Aufgabenparalleler Ansatz: Aufteilung der großen Aufgaben (Tasks) in kleinere, unabhängige Aufgaben, die parallel laufen.
- Synchronisation: Koordination der parallel laufenden Prozesse zur Vermeidung von Konflikten und Sicherstellung der Datenkonsistenz, häufig durch Mechanismen wie \textit{Locks} und \textit{Barrieren}.
- Kommunikationsmodelle: Strategien zur Minimierung der Kommunikation zwischen Prozessen, z.B. durch Verwendung von MPI (Message Passing Interface) oder OpenMP.
Verwaltung und Scheduling von Rechenaufträgen
Definition:
Organisation und Planung von Aufgaben, die auf Supercomputern ausgeführt werden sollen zur effizienten Ressourcennutzung.
Details:
- Batch-Processing: Stapelverarbeitung und Warteschlangenmodelle
- Job-Scheduler: Zuteilung von Rechenressourcen
- SLURM, PBS und andere Scheduling-Systeme
- Prioritäten-Management: FIFO, Round-Robin, etc.
- Load Balancing: Gleichmäßige Verteilung der Aufgaben
- Überwachung und Optimierung der Ressourcenauslastung
- Formeln: Warteschlangenlänge (\text{Q-Length}), Ausführungszeit (\text{Execution Time}), Ressourcenbedarf \text{(resource requirements)}
Zugriff auf und Navigation in Supercomputer-Ressourcen
Definition:
Zugriff auf Supercomputer-Ressourcen erfolgt üblicherweise durch Remote-Zugriff und Verwendung spezialisierter Softwaretools.
Details:
- Zugriff via SSH: \texttt{ssh username@supercomputer-address}
- Navigieren mit Unix-Commands: \texttt{cd}, \texttt{ls}, \texttt{pwd}
- Dateien übertragen: \texttt{scp}, \texttt{rsync}
- Job-Management-Systeme verwenden: PBS, SLURM
- Module für Softwareumgebungen: \texttt{module load software-name}
Interdisziplinäre Kooperation und Anwendung
Definition:
Interdisziplinäre Zusammenarbeit für die effiziente Nutzung von Supercomputing-Ressourcen.
Details:
- Notwendig für komplexe wissenschaftliche und technologische Probleme.
- Kombiniert Wissen aus Informatik, Physik, Mathematik, Ingenieurwissenschaften etc.
- Fördert innovative Lösungsansätze und Methodenentwicklung.
- Wichtig für Optimierung und Skalierung von Algorithmen.