Kommunikation und Parallele Prozesse - Cheatsheet
Definition und Bedeutung von Parallelität
Definition:
Gleichzeitige Ausführung mehrerer Berechnungen, um die Effizienz zu steigern.
Details:
- Erhöht die Rechenleistung und reduziert die Ausführungszeit.
- Wird durch Multithreading und Mehrprozessorsysteme erreicht.
- Synchronisationsmechanismen notwendig, um Race Conditions zu vermeiden.
- Wichtige Modelle: PRAM, CSP (Communicating Sequential Processes).
- Fordert spezielle Programmiertechniken und Algorithmen.
- Wichtig in der Kommunikation zwischen parallelen Prozessen: Nachrichtenpassing und gemeinsame Speicher.
Konzepte der Nebenläufigkeit und Synchronisation
Definition:
Konzepte der Nebenläufigkeit und Synchronisation zielen darauf ab, parallele Prozesse sicher und effizient zu koordinieren.
Details:
- Nebenläufigkeit: Gleichzeitige Ausführung mehrerer Prozesse.
- Synchronisation: Steuerung der Ausführungsreihenfolge und des Datenzugriffs.
- Wichtige Mechanismen: Semaphore, Monitore, Mutex, Ereignisvariablen.
- Race Conditions: Problematik bei unsynchronisiertem Zugriff auf gemeinsame Ressourcen.
- Deadlocks: Zustand, bei dem Prozesse ewig aufeinander warten.
- Wichtige Algorithmen: Petersons Algorithmus, Dekkers Algorithmus.
Nachrichtenübermittlung vs. Shared Memory
Definition:
Nachrichtenübermittlung und Shared Memory sind Methoden zur Kommunikation und Synchronisation in parallelen Prozessen.
Details:
- Nachrichtenübermittlung: Daten werden explizit zwischen Prozessen gesendet und empfangen.
- Shared Memory: Prozesse greifen auf gemeinsame Speicherbereiche zu.
- Nachrichtenübermittlung: Gut für verteilte Systeme.
- Shared Memory: Effizient für eng gekoppeltes Multiprocessing.
- Nachrichtenübermittlung: \texttt{send()}, \texttt{recv()}
- Shared Memory: \texttt{shmget()}, \texttt{shmat()}, \texttt{shmdt()}
- Nachrichtenübermittlung: Synchronisation durch Kanal-/Queue-Operationen.
- Shared Memory: Synchronisation durch Sperren (Locks).
MPI (Message Passing Interface)
Definition:
MPI (Message Passing Interface) ist ein Standard für die parallele Programmierung, der Prozesskommunikation durch Nachrichtenübermittlung in verteilten und parallelen Systemen ermöglicht.
Details:
- Kommunikation: Punkt-zu-Punkt und kollektive Kommunikation
- Richtlinien: MPI_Standard definiert Funktionen, Datentypen und Kommunikationsprotokolle
- Implementierungen: MPICH, OpenMPI
- Syntax: z.B.
MPI_Send
, MPI_Recv
- Performance: Beeinflusst durch Nachrichtengröße und Netzwerkarchitektur
CUDA und OpenCL als Programmiermodelle
Definition:
CUDA und OpenCL sind Programmiermodelle für parallele Berechnungen, besonders für GPGPU (General Purpose Computing on Graphics Processing Units).
Details:
- CUDA: Entwickelt von NVIDIA, ermöglicht direkten Zugriff auf die GPU und ihre Speicherarchitektur.
- OpenCL: Offener Standard von Khronos Group, unterstützt heterogene Plattformen (CPUs, GPUs, FPGAs).
- Speichermodell: Beide verwenden hierarchische Speichermodell für verschiedene Speicherarten (z.B. global, lokal).
- API Funktionen: CUDA nutzt spezifische API-Funktionen (z.B.
cudaMalloc
, cudaMemcpy
), OpenCL verwendet plattformunabhängige APIs (z.B. clCreateBuffer
, clEnqueueNDRangeKernel
). - Einbindung: CUDA erfordert CUDA-kompatible NVIDIA GPUs, OpenCL kann auf einer Vielzahl von Hardware laufen.
- Entwicklerwerkzeuge: CUDA besitzt proprietäre Tools wie nvcc, OpenCL setzt auf verschiedene Treiber und Entwicklungsumgebungen.
Werkzeuge zur Leistungsanalyse (z.B. Perf, HPCToolkit)
Definition:
Werkzeuge zur Leistungsanalyse helfen, die Effizienz und Leistung von Software zu messen und zu optimieren.
Details:
- Perf: Linux-Profiling-Tool, zeichnet Performance-Daten wie CPU-Auslastung und Speicherzugriffe auf
- HPCToolkit: Profiler für parallele Programme, analysiert Performance und Bottlenecks in umfangreichen Codes
- Verwendung: Identifikation von Hotspots, Leistungsmessung, Optimierungspotentiale erkennen
- Datenformer: verschiedene Metriken wie Laufzeit, Speichernutzung, CPU-Zyklen
- Ausgabe: Berichte, Grafiken zur Visualisierung von Lastverteilungen und Engpässen
Redundanzmethoden (z.B. Checkpoints, Replication)
Definition:
Redundanzmethoden erhöhen die Zuverlässigkeit und Verfügbarkeit von Systemen, indem sie zusätzliche Ressourcen oder Mechanismen einführen, um Ausfälle zu vermeiden oder deren Auswirkungen zu minimieren.
Details:
- Checkpoints: Speichern den Zustand eines Systems zu bestimmten Zeitpunkten, um bei einem Fehler zu einem früheren, konsistenten Zustand zurückzukehren.
- \textit{Checkpoint-Intervalle:} Regelmäßige Intervalle, nach denen der Zustand gespeichert wird.
- \textit{Overhead:} Zusätzliche Rechen- und Speicherressourcen sind erforderlich, um Zustandsinformationen zu speichern.
- Replikation: Erstellen von Kopien von Daten oder Prozessen, um bei einem Ausfall nahtlos auf eine andere Kopie umzuschalten.
- \textit{Aktiv-Aktiv vs. Aktiv-Passiv:} Bei Aktiv-Aktiv-Replication sind alle Repliken gleichzeitig aktiv, bei Aktiv-Passiv ist nur eine aktiv, die anderen stehen als Backup bereit.
- Kombination: Oft werden Checkpoints und Replikation kombiniert, um eine höhere Ausfallsicherheit zu erreichen.
Techniken für zuverlässige Kommunikation
Definition:
Methoden und Protokolle zur Gewährleistung einer korrekten und sicheren Datenübertragung zwischen parallelen Prozessen.
Details:
- Fehlerkorrektur: Prüfsummen, Hamming-Code
- Wiederholungsprotokolle: ARQ (Automatic Repeat reQuest)
- Korrelationsverfahren: Multiversionsverfahren, Majority Voting
- Persistenzprotokolle: Logging, Journaling
- Sicherheitsmaßnahmen: Authentifizierung, Verschlüsselung
- Kommunikationsmodelle: Client-Server, Peer-to-Peer
- Telegrammformate und Protokollstandards: TCP/IP, UDP