Der Message Passing Interface Standard spezifiziert eine Bibliothek von
Funktionen für die Kommunikation in parallelen Systemen auf der Grundlage
von Message Passing. Ziel der Entwickler, des MPI-Forums (MPIF), war es,
einen Standard für portierbare Programme auf der Basis des MIMD-Modells
(multiple instruction multiple data) zu schaffen.
Im Ansatz wird davon ausgegangen, daß eine feste Anzahl von Prozessen
vorhanden
ist, und im allgemeinen jeder Prozeß auf einem eigenen Prozessor läuft.
MIMD bedeutet, jeder Prozeß arbeitet mit eigenen Daten und einem eigenen
Programm. Die Prozesse kommunizieren miteinander via Message Passing, dh.
der benötigte Datenaustausch geschieht, indem Nachrichten von einem Prozeß
zum nächsten geschickt werden. Im Quellcode der Programme (normaler Code in
einer sequentiellen Programmiersprache - hier C) werden dafür Routinen aus
der MPI-Bibliothek gerufen, die den gewüschten Kommunikationsvorgang
realisieren.
MPI ist eine recht umfangreiche Bibliothek, die außer synchroner und
asynchroner Punkt-zu-Punkt-Kommunikation noch weitere Konzepte
zur Verfügung stellt.
Eine Vielzahl von Sendeoperationen (blockierend, nichtblockierend, verschiedene Modi), Empfangsoperationen sowie Funktionen zur Handhabung eigener komplexer Datentypen, welche es ermöglichen, nicht nur einfache Datentypen sondern ganze, vielleicht nicht einmal zusammenhängende Speicherbereiche als Message zu versenden.
Funktionen für den Datenaustausch, an dem alle Prozesse einer Gruppe beteiligt sind. Das erspart es dem Programmierer, häufig benötigte Funktionen wie Barrier, Reduktion, Einsammeln und Verteilen von Daten selbst zu schreiben. Auf Rechnern, deren Hardware kollektive Operationen unterstützt, sind sie obendrein sehr schnell.
Funktionen mit welchen man die vorhandenen Prozesse zu Gruppen zusammenfassen kann, um eine dem Problem angemessene Arbeitsteilung zu erreichen. Kommunikatoren legen den Kontext für eine Nachricht fest, und bieten damit die Möglichkeit, Kommunikationsabläufe, die einander nicht beeinflussen sollen, auf unkomplizierte Art getrennt zu halten und mehr.
Viele Probleme und Algorithmen erfordern eine bestimmte Anordnung der Prozesse, z.B. als Hypercube oder als Graph für ein shuffle-exchange-Netz. Die MPI-Routinen zum Erzeugen virtueller Topologien versuchen, die gewünschte Struktur möglichst günstig auf die Hardware abzubilden und stellen einen Namensmechanismus bereit (Koordinaten eines Prozesses oder Nachbarschaftsbeziehungen im Graph), der dem konkreten Problem gerecht wird.
Basisfunktionen zum Starten und Beenden der MPI-Umgebung, welche in jedem Programm, das MPI-Rufe nutzt, benötigt werden; sowie Funktionen zum Aufbau eines eigenen Errorhandlings, wenn das von Haus aus vorhandene Errorhandling ersetzt werden soll.
Diese Hilfe konzentriert sich auf die C-Bindings der Funktionen und verwendet nur Beispiele in dieser Programmiersprache. Für die FORTRAN-Versionen sei hier lediglich auf das Manual verwiesen. Sie unterscheiden sich im allgemeinen in ihrer Funktionalität kaum von den hier beschriebenen C-Routinen.
MPI stetzt voraus, daß die Anzahl der Prozesse von Anfang an feststeht.
Algorithmen, die dynamisch Tasks erzeugen, müssen entweder umgeschrieben
werden, so daß sie diese Voraussetztung erfüllen, oder man muß doch auf eine
Alternative zu MPI ausweichen.