Heterogene Rechnerarchitekturen Online - Cheatsheet
Definition und Klassifizierung von heterogenen Systemen
Definition:
Heterogene Systeme bestehen aus verschiedenen Typen von Recheneinheiten (z.B. CPU, GPU, FPGA) zur Leistungssteigerung.
Details:
- Erhöhte Flexibilität und Effizienz durch spezialisierte Hardware.
- Klassifizierung nach Arten der Integration:
- Multi-Node Systeme
- Single-Node Systeme
- Beispiele: CPU + GPU in High-Performance Computing, FPGA zur Beschleunigung von Algorithmen.
- Verwendete Programmiersprachen und Modelle: OpenCL, CUDA, HLS.
- Wichtige Aspekte: Datenverteilung, Synchronisation, Energieeffizienz.
Grundlegende Konzepte der Parallelität
Definition:
Konzepte für die gleichzeitige Ausführung mehrerer Berechnungen zur Effizienzsteigerung.
Details:
- Threads: Leichtgewichtige Prozesse, die gemeinsam im gleichen Adressraum ausgeführt werden
- Prozesse: Unabhängige Ausführungseinheiten, isoliert im eigenen Adressraum
- Parallelismus: Gleichzeitige Ausführung von Aufgaben zur Reduzierung der Laufzeit
- Synchrone und Asynchrone Ausführungen: Bestimmt durch Abhängigkeiten zwischen den Aufgaben
- Mutual Exclusion: Synchronisationstechniken wie Locks und Semaphoren zur Vermeidung von Zustandskonflikten
- Datenparallelismus: Gleiche Operation, ausgeführt auf verschiedene Datenelemente
- Task-Parallelismus: Verschiedene Operationen, ausgeführt auf gleiche oder verschiedene Datenelementen
Architektur verteilter Systeme
Definition:
Architektur verteilter Systeme beschreibt die Struktur und Organisation von Software- und Hardwarekomponenten, die an verschiedenen geographischen Standorten ausgeführt werden, und deren koordinierte Interaktion, um eine gemeinschaftliche Aufgabe zu erfüllen.
Details:
- Verteilte Systeme bestehen aus mehreren autonomen Prozessen oder Computern.
- Kommunikation erfolgt meist über Netzwerke.
- Wichtige Herausforderungen: Konsistenz, Fehlertoleranz, Replizierung und Synchronisation.
- Sicherheitsaspekte: Authentifizierung, Autorisierung und Verschlüsselung.
- Beispiele: Client-Server-Architekturen, Peer-to-Peer-Netzwerke, Cloud-Computing.
- Verwendung von Protokollen wie HTTP, TCP/IP, und SOAP zur Kommunikation.
- Algorithmen wie Paxos oder Raft zur Konsensfindung.
- Middleware als Vermittler zwischen Komponenten, z.B. CORBA, J2EE.
Einführung in Hochleistungsrechnen
Definition:
Grundlagen des Hochleistungsrechnens, Konzepte, Architekturen und Anwendungsbereiche. Ziel: effiziente Nutzung von Rechenressourcen für komplexe Berechnungen.
Details:
- Parallele Programmierung
- Verteilte Systeme
- Skalierbarkeit und Performance
- Architekturen (CPU, GPU, FPGA)
- Beispiele: Wettervorhersage, Genomsequenzierung
- Tools: MPI, OpenMP, CUDA
- Algorithmen: Dekomposition, Lastverteilung
- Benchmarking und Optimierung
Architektur und Funktionsweise von GPUs
Definition:
GPU-Architektur ermöglicht parallele Verarbeitung mittels Tausender Kerne, speziell für grafikintensive und datenparallele Aufgaben.
Details:
- Viele kleine Kerne in einer SIMD-Architektur
- Hoher Durchsatz und Effizienz bei parallelen Aufgaben
- Schneller Zugriff auf globalen und lokalen Speicher
- Geeignet für GPGPU (General-Purpose Computing on Graphics Processing Units)
- Verwendung von CUDA (NVIDIA) oder OpenCL für Programmierung
- Wichtige Metriken: FLOPS und Bandbreite
- Herausforderungen: Speicherlatenz und Koordinierung zwischen den Kernen
Threading und Multithreading-Techniken
Definition:
Gleichzeitige Ausführung von Tasks in einem einzelnen Prozess. Multithreading optimiert Ressourcennutzung und Performance.
Details:
- Thread: Kleinste Ausführungseinheit innerhalb eines Prozesses
- Multithreading: Verwendet mehrere Threads innerhalb eines Prozesses zur parallelen Bearbeitung
- Threads teilen sich den gleichen Speicherraum
- Synchronisierung notwendig, um Datenkonflikte zu vermeiden
- Verwendet zur Performancesteigerung auf Multicore-Systemen
- Beispiel: Erzeugen eines Threads in C++:
std::thread myThread(functionName);
- Thread-Pools reduzieren Overhead durch Wiederverwendung von Threads
- Unterschied zu Multitasking: Multithreading innerhalb eines Prozesses, Multitasking über mehrere Prozesse
- Wichtige Funktionen:
thread.join()
, thread.detach()
, Mutex
OpenMP und MPI für paralleles Programmieren
Definition:
OpenMP und MPI sind Bibliotheken für paralleles Programmieren auf heterogenen Rechnerarchitekturen. OpenMP für Shared-Memory, MPI für Distributed-Memory.
Details:
- OpenMP: Compiler-Direktiven für parallele Programmierung auf Shared-Memory-Systemen.
- MPI: Bibliothek für parallele Programmierung auf Distributed-Memory-Systemen. Nutzt Message-Passing für Kommunikation.
- Anwendungen: HPC, wissenschaftliche Berechnungen.
- Typische Konstrukte OpenMP:
#pragma omp parallel
, #pragma omp for
. - Typische Funktionen MPI:
MPI_Init
, MPI_Comm_rank
, MPI_Send
, MPI_Recv
.
Optimierung und Performance-Analyse von GPU-Programmen
Definition:
Optimierung und Analyse von Performancedaten spezifisch auf GPU-Programme angewandt, um Effizienz und Laufzeit zu verbessern.
Details:
- Nutzung von Profiling-Tools (z.B. NVIDIA Nsight, CUDA Profiler).
- Identifikation und Minimierung von Speicherlatenzen.
- Optimierung von Speichernutzung (z.B. Shared Memory, Register).
- Lastverteilung und Parallelitätsanalyse.
- Vermeidung von Synchronisationsproblemen.
- Branch Divergence minimieren.
- Nutzung von effizienten Algorithmen und Datenstrukturen.
- Fermi, Kepler, Maxwell, Pascal Architekturen: Unterschiede und Auswirkungen auf Optimierung.