HPC Software Projekt - Cheatsheet
Grundlagen der Parallelisierung
Definition:
Grundlagen der Parallelisierung
Details:
- Mehrere Berechnungen gleichzeitig ausführen.
- Verwenden von Multi-Core CPUs oder GPUs.
- Kommunikation zwischen Prozessen (MPI, OpenMP, CUDA).
- Vermeidung von Race Conditions und Deadlocks.
- Verwendung von Parallelisierungsmodellen (z.B. Datenparallelismus, Taskparallelismus).
- Lastverteilung, Effizienz und Skalierbarkeit beachten.
Verwendung von OpenMP und MPI
Definition:
Einsatz von OpenMP und MPI für paralleles Rechnen in HPC-Anwendungen.
Details:
- OpenMP: erleichtert die Multithreading-Programmierung auf gemeinsamer Speicherarchitektur
#pragma omp parallel
: Erzeugt parallele Regionen- Amdahl's Law: \[S = \frac{1}{(1 - P) + \frac{P}{N}}\]
- MPI: unterstützt parallele Programmierung auf verteilten Speicherarchitekturen
MPI_Init
, MPI_Comm_size
: Initialisierung und Bestimmung der Anzahl der Prozesse- Message Passing: \[T_{comm} = \alpha + \beta n\]
- Beide Techniken oft kombiniert: Hybrid-Programmierung
Architekturen von Parallelrechnern
Definition:
Architekturen von Parallelrechnern umfassen Hardware- und Softwarestrukturen, die parallele Ausführung von Aufgaben ermöglichen.
Details:
- Speicherarchitekturen:
- Shared Memory
- Distributed Memory
- Verbindungstopologien:
- Bus
- Stern
- Ring
- Masche
- Hypercube
- Amdahls Gesetz: \[ S = \frac{1}{(1 - P) + \frac{P}{N}} \]
- Gustafsons Gesetz: \[ S = N - P(N - 1) \]
- Flynn-Taxonomie:
Strategien zur Datenaufteilung und -synchronisierung
Definition:
Methoden zur effektiven Verteilung und Synchronisierung von Daten auf verteilten Systemen zur Maximierung der Leistung und Minimierung von Kommunikationsaufwänden.
Details:
- Data Partitioning: Block-, zyklische und block-zyklische Aufteilungen
- Load Balancing: Gleichmäßige Verteilung der Rechenlast
- Kommunikationsmethoden: Punkt-zu-Punkt, kollektive Kommunikation
- Synchronisation: Barrieresynchronisation, Polling, Ereignis-Benachrichtigungen
- Konsistenzmodelle: Stark, schwach, eventual consistency
- Performance-Optimierung: Minimierung von Kommunikationslatenzen und -kosten
Analyse von numerischen Algorithmen
Definition:
Bewertung und Untersuchung der Leistung und Genauigkeit numerischer Methoden.
Details:
- Konvergenz: Überprüfung, ob und wie schnell eine Methode zu einer Lösung führt.
- Stabilität: Analyse der Sensitivität des Algorithmus gegenüber kleinen Störungen.
- Komplexität: Bestimmung der Laufzeit und des Speicherbedarfs, meist in Big-O-Notation.
- Fehleranalyse: Untersuchung der Fehlerquellen und ihre Minimierung.
Profiling-Tools und Techniken
Definition:
Verwendung von Werkzeugen, um Leistungsprobleme in Software zu identifizieren und zu analysieren.
Details:
- Profiling-Arten: CPU-Profiling, Speicherprofiling, I/O-Profiling
- Bekannte Werkzeuge: gprof, Valgrind, Intel VTune, GNU gprof
- Messungen: Laufzeit, Speicherverbrauch, Cache-Hits/Misses, Branches
- Techniken: Instrumentierung, Sampling
- Instrumentierung: Modifikation des Codes, um Daten zu erfassen
- Sampling: Periodische Aufzeichnung des Zustands des Systems
- Ziel: Engpässe identifizieren, Optimierungspotenziale finden
Bottleneck-Analyse und -Identifikation
Definition:
Prozess der Identifikation von Engpässen in HPC-Software, um die Performance zu optimieren.
Details:
- Engpassanalyse: Identifikation von Code-Abschnitten, die die meisten Ressourcen verbrauchen oder die Ausführung verlangsamen.
- Werkzeuge: Profiling-Tools wie gprof, perf, oder Valgrind.
- MetriKen: CPU-Auslastung, Speicherverbrauch, E/A-Operationen, Kommunikationslatenz.
- Methoden: Top-Down-Analyse, Bottom-Up-Analyse.
- Ziel: Verbesserung der Gesamtleistung durch Beseitigung oder Optimierung der identifizierten Bottlenecks.
Architektur und Funktionsweise von Supercomputern
Definition:
Architektur und Funktionsweise von Supercomputern - Design und Betrieb von extrem leistungsstarken Computersystemen für rechenintensive Aufgaben.
Details:
- Verteiltes Rechnen mit vielen Prozessoren; typischerweise tausende bis Millionen Kerne.
- Speichermodell: Speicherhierarchien (Cache, Hauptspeicher, nichtflüchtiger Speicher) zur Optimierung der Datenzugriffszeit.
- High-Performance Interconnects, z.B. InfiniBand, um schnelle Datenübertragung zwischen Knoten zu ermöglichen.
- Parallelverarbeitung: MIMD-Architektur (Multiple Instruction, Multiple Data).
- GPGPU-Nutzung: Grafikkarten für allgemeine Berechnungen.
- Software: Optimierte Betriebssysteme, parallele Entwicklungsumgebungen (MPI, OpenMP).
- Kühltechnologien: Flüssigkeitskühlung, Luftkühlung zur Vermeidung von Überhitzung.
- Skalierbarkeit und Effizienz als zentrale Designziele.