Einführung
-
Grundlegende Hardware-Architekturen heutiger Parallelrechner (gemeinsamer Speicher ↔ verteilter Speicher) entsprechen Programmier-Modelle (Message Passing ↔ Threads)
wachsen allmählich zusammen:
-
Hardware: System simuliert gemeinsamen Speicher (CC-NUMA)
-
Software: Threads mit MPI kombinierbar, MPI-2 enthält Shared-Memory-Erweiterungen
-
Thread = eine Ausführungseinheit von Programmcode innerhalb eines Prozesses mit gemeinsamem Adressraum und Prozeßressourcen (File-Handles, Sockets, Signale ...)
-
Vergleich mit MPI-Task:
-
ähnlich: Möglichkeit der parallelen Ausführung, Scheduling
-
verschieden: gemeinsamer Speicher und Prozeß-Umgebung
-
Thread-Abstraktion entstanden aus:
-
Realtime- und Transaktions-Programmierung
-
Betriebssystem-Entwicklung (Mach u.a.)
-
verschiedene Vorläufer im UNIX-Umfeld, vor allem unter Solaris
-
Zielsetzung:
-
Client-Server-Programmierung
-
User-Interfaces
-
Multiprozessor-Systeme
-
UNIX-Version 1995 standardisiert als POSIX P1003.1c, Vorläufer-Version (Draft 4) existiert noch als OSF-DCE-Threads
-
Ähnliche Konzepte in diversen Betriebssystemen bzw. Sprachen, z.B. Windows NT-API, Java, SPP-UX-Threads
-
Threads beim Parallelisieren:
-
in der Regel 1 Thread pro CPU (evtl. + Master)
-
meist starke Synchronisierung
-
System-Umgebung (Signale, Prioritäten) oft sekundär
-
Vergleich mit Message Passing:
-
evolutives Programmieren möglich (ausgehend von skalarem Code)
-
explizite Nachrichten unnötig
-
Synchronisation kritisch (race conditions)
-
nicht so universell (z.B. im Cluster)
-
Netzweiser
Peter Junglas 24.2.1998