g 740665 Parallele Systeme - Cheatsheet
Definition und Bedeutung paralleler Systeme
Definition:
Parallele Systeme nutzen mehrere Recheneinheiten gleichzeitig zur Lösung von Problemen. Optimieren die Leistungsfähigkeit und Effizienz bei der Verarbeitung großer Datenmengen und komplexer Berechnungen.
Details:
- Skalierbar: Erhöhung der Anzahl an Prozessoren verbessert Leistungsfähigkeit
- Typen: Multi-Prozessor, Multi-Core, verteilte Systeme
- Kommunikationsmodelle: Shared Memory, Message Passing
- Anwendungen: Wissenschaftliche Berechnungen, Big Data, KI
- Bedeutung: Zeitersparnis, Kostenreduktion, Erhöhung der Rechenleistung
- Herausforderungen: Synchronisation, Lastverteilung, Kommunikationslatenz
Shared Memory vs. Distributed Memory Architekturen
Definition:
Vergleich von Speicherarchitekturen in parallelen Systemen; bezieht sich auf die Art und Weise, wie Speicher von Prozessoren genutzt wird.
Details:
- Shared Memory
- Alle Prozessoren greifen auf denselben Speicher zu
- Erfordert Mechanismen zur Synchronisation (z.B. Mutex, Semaphore)
- Schneller Kommunikation, aber Skalierbarkeit limitiert
- Gefahr von Race Conditions
- Distributed Memory
- Jeder Prozessor hat eigenen lokalen Speicher
- Kommunikation über Nachrichtenaustausch (Message Passing; z.B. MPI)
- Keine Notwendigkeit für globale Synchronisation
- Bessere Skalierbarkeit, aber höhere Kommunikationskosten
- Erfordert explizites Datenmanagement
Thread-Programmierung mit OpenMP
Definition:
Thread-Programmierung mit OpenMP ermöglicht es, Parallelisierung in C, C++ und Fortran durch Compiler-Direktiven zu realisieren.
Details:
- Nutze
#pragma omp parallel
, um Threads zu erzeugen. - Schleifen lassen sich mit
#pragma omp for
parallelisieren. - Synchronisation mittels
#pragma omp critical
oder #pragma omp barrier
. - Einfache Reduktionen mit
#pragma omp reduction
. - Speichermodel: shared vs private Variablen.
- Setze
num_threads(n)
, um die Anzahl der Threads zu bestimmen.
CUDA-Programmierung für GPUs
Definition:
CUDA ermöglicht dir die Programmierung von NVIDIA-GPUs für parallele Berechnungen.
Details:
- Verwendet C/C++ mit CUDA-Erweiterungen.
- Kernel-Funktionen werden auf der GPU ausgeführt.
- Threads sind in Blöcken und Grids organisiert.
- Speicherhierarchie: Register, Shared Memory, Global Memory.
- Synchronisation: \_\_syncthreads() zur Thread-Synchronisation innerhalb eines Blocks.
- Performance-Optimierung: Koaleszierter Speicherzugriff, Verwendung von Shared Memory.
Performance-Metriken und Messmethoden
Definition:
Quantitative Bewertung der Leistung paralleler Systeme.
Details:
- Speedup (S): \[ S = \frac{T_1}{T_N} \]
- Effizienz (E): \[ E = \frac{S}{N} = \frac{T_1}{N \times T_N} \]
- Skalierbarkeit: Wie gut eine Erhöhung der Anzahl von Prozessoren die Leistung verbessert.
- Auslastung: Prozentsatz der Zeit, in der die Prozessoren aktiv arbeiten.
- Latenz: Verzögerung vor Ausführung einer Operation.
- Durchsatz: Anzahl der verarbeiteten Operationen pro Zeiteinheit.
- Lastverteilung: Gleichmäßigkeit der Arbeitsverteilung über alle Prozessoren.
Speicherhierarchie und Cache-Optimierung
Definition:
Optimierung läuft durch Minimierung der Zugriffszeiten auf verschiedene Speicherebenen.
Details:
- Speicherhierarchie: Register, Cache (L1, L2, L3), Hauptspeicher, Sekundärspeicher
- Cache-Hierarchie: Schnelligkeit und Größe variieren (L1 am schnellsten, kleinste Kapazität)
- Cache-Kohärenz: Konsistenz mehrerer Caches sicherstellen
- Cache-Lokalisierung: Data Locality verbessern - räumliche (Spatial Locality) und zeitliche (Temporal Locality)
- Cache-Strategien: Direkt abbildender Cache, assoziativer Cache, set-assoziativer Cache
- Cache-Optimierung: Loop Blocking, Prefetching, Data Layout Transformationen
Kommunikationsprotokolle und -techniken in verteilten Systemen
Definition:
Kommunikationsprotokolle und -techniken definieren, wie Daten zwischen Knoten in einem verteilten System ausgetauscht werden.
Details:
- Protokolle: TCP/IP, UDP, HTTP, gRPC
- Datenformate: JSON, XML, Protobuf
- Synchrone Kommunikation: RPC (Remote Procedure Call)
- Asynchrone Kommunikation: Message Queues (z.B. RabbitMQ, Kafka)
- Fehlerbehandlung: Timeouts, Retries, Acknowledgements
Fehlertoleranz in verteilten Systemen
Definition:
Fehlertoleranz in verteilten Systemen bezieht sich auf die Fähigkeit eines Systems, seinen Betrieb korrekt fortzusetzen, auch wenn einzelne Komponenten ausfallen.
Details:
- Redundanz: Mehrfache Ressourcen für dieselbe Aufgabe
- Replikation: Kopien von Daten oder Prozessen auf unterschiedlichen Knoten
- Erkennung und Wiederherstellung: Mechanismen zum Identifizieren und Beheben von Fehlern
- Bereitstellung von Konsistenz: Sicherstellung, dass alle Knoten denselben Zustand teilen, z.B. durch Konsensalgorithmen wie Paxos oder Raft
- Ausfallsicherheit: Fähigkeit des Systems, nach einem Fehlerzustand in einen sicheren Zustand überzugehen.
- \textit{Mean Time Between Failures (MTBF)}: Durchschnittliche Zeit zwischen zwei aufeinanderfolgenden Fehlern
- \textit{Mean Time To Recovery (MTTR)}: Durchschnittliche Zeit zur Wiederherstellung nach einem Fehler