Programmierung von Parallel-Rechnern

Architektur von Parallel-Rechnern
Bei Multiprozessor-Systemen kann man (auch aus programmiertechnischer Sicht) im wesentlichen zwei Typen unterscheiden: Symmetrische Multiprozessor Systeme (SMP) bei denen sich mehrere CPUs (oder Kerne einer CPU) einen gemeinsamen Speicher teilen, und Cluster-Systeme bei denen mehrere "gewöhnliche" Rechner (CPU + eigener Speicher) breitbandig vernetzt sind. Super-Computer, die z.B. auf der weltweiten TOP 500 Liste geführt werden, bilden oft eine Mischform, d.h. viele SMP-Systeme sind zu einem Cluster vernetzt. Der in der Vorlesung verwendete Server ist ein SMP-System mit 8 Kernen (2 Quad-Core-CPUs).
Programmierung von SMP-Systemen

Da die Daten für alle CPUs zugänglich im gemeinsamen Speicher liegen, kann die Rechenarbeit leicht aufgeteilt werden: Jede CPU bearbeitet einen Teil der Daten. Gewisse Vorsicht ist geboten, wenn mehrere CPUs auf den gleichen Datensatz zugreifen, oder wenn die Ergebnisse vieler CPUs zusammengefaßt werden.

Als Programmier-Modell werden vom Betriebsystem sogenannte Threads ("Fäden") zur Verfügung gestellt. Dabei handelt es sich um gleichzeitig abgearbeitete Programmteile innerhalb eines Prozesses. Ein verbreiteter Standard für Threads sind POSIX-Threads. Ein gute Einführung findet sich auf den Seiten von LLNL.

Noch einfacher wird die Programmierung von SMP-Rechnern durch OpenMP. Damit wird die Erzeugung und Verwaltung von threads mittels #pragma-Direktiven im normalen C-Code (oder speziellen Kommentaren in Fortran) automatisiert. Entsprechende Programme sind auch auf sequentiellen Rechnern lauffähig, der Compiler ignoriert dann einfach die #pragma's. Als Einführung eignen sich wieder die Seiten von LLNL.

Programmierung von vernetzten Rechnern (Clustern)
Die Programmierung von Clustern gestaltet sich etwas komplizierter: Meist muß sich der Programmierer selbst um die Verteilung der Daten auf die einzelnen Teilrechner und um die Kommunikation kümmern. Letzteres geschieht über den Austausch von Meldungen, sog. "message passing". Als Standard-Programmbibliothek hat sich in den letzten Jahren das Message Passing Interface (MPI) durchgesetzt. Zur Einführung wieder die Seiten von LLNL.
Contents