Definition

Message Passing Interface (MPI)

Eine Message-Passing-Schnittstelle (MPI) ist eine Standardmethode zum Austausch von Nachrichten zwischen mehreren Computern, bei der ein paralleles Programm auf verteiltem Arbeitsspeicher läuft.

Im Kontext der parallelen Verarbeitung nennt man die Computer – oder sogar mehrere Prozessorkerne innerhalb desselben Computers –Knoten. Jeder Knoten arbeitet an einem Teil des gesamten Rechenproblems. Die Herausforderung besteht darin, die Aktionen der einzelnen parallelen Knoten zu synchronisieren, Daten zwischen den Knoten auszutauschen und die Steuerung des gesamten parallelen Clusters zu gewährleisten. Die Message-Passing-Schnittstelle übernimmt eine Reihe von Funktionen für diese Aufgaben. Der Begriff Nachrichtenübermittlung (Message Passing) selbst bezieht sich in der Regel auf das Senden einer Nachricht an ein Objekt, einen parallelen Prozess, ein Unterprogramm, eine Funktion oder einen Thread, die dann einen anderen Prozess anstoßen.

Das Institute of Electrical and Electronics Engineers (IEEE) und der International Organization for Standardization (ISO) erkennen MPI nicht als offizieller Standard an, es gilt aber allgemein als Industriestandard und bildet die Grundlage für die meisten Kommunikationsschnittstellen, die Programmierer für parallele Datenverarbeitung verwenden. Es gibt verschiedene Implementierungen von MPI.

MPI definiert eine nützliche Syntax für Routinen und Bibliotheken in Programmiersprachen wie Fortran, C, C++ und Java.

Vorteile von MPI

Das Message Passing Interface bietet folgende Vorteile:

  • Standardisierung. MPI hat andere Message-Passing-Bibliotheken ersetzt und ist zu einem allgemein akzeptierten Industriestandard geworden.
  • Entwickelt von einem breiten Gremium. Auch wenn MPI kein offizieller Standard ist, so ist es doch ein allgemeiner Standard, der von einem Komitee aus Anbietern, Implementierern und Benutzern entwickelt wurde.
  • Portabilität. MPI wurde für viele Architekturen mit verteiltem Speicher implementiert, was bedeutet, dass die Benutzer den Quellcode nicht ändern müssen, wenn sie ihre Anwendungen auf verschiedene Plattformen portieren, die vom MPI-Standard unterstützt werden.
  • Geschwindigkeit. Die Implementierung ist normalerweise für die Hardware optimiert, auf der MPI läuft. Die Implementierungen der Hersteller können auch für native Hardwarefunktionen optimiert sein.
  • Funktionsfähigkeit. MPI ist für hohe Leistung auf großen parallelen Maschinen und Clustern ausgelegt. Die Basisimplementierung von MPI-1 hat mehr als 100 definierte Routinen.

Einige Unternehmen sind auch in der Lage, MPI-Aufgaben auf DPUs auszulagern, um ihre Programmiermodelle und Bibliotheken schneller zu machen.

MPI-Terminologie: Schlüsselkonzepte und Befehle

Die folgende Liste enthält einige grundlegende MPI-Schlüsselkonzepte und -Befehle:

  • Comm. Daruner versteht man Kommunikatorobjekte, die Gruppen von Prozessen in MPI verbinden. Communicator-Befehle geben einem enthaltenen Prozess einen unabhängigen Bezeichner und ordnen ihn in einer geordneten Topologie an. Ein Befehl für einen Basis-Kommunikator ist zum Beispiel MPI_COMM_WORLD.
  • Color. Mit diesem Befehl weisen Sie einem Prozess eine Farbe zu, und alle Prozesse mit der gleichen Farbe befinden sich im gleichen Kommunikator. Ein Befehl, der sich auf die Farbe bezieht, ist MPE_Make_color_array, der die verfügbaren Farben ändert.
  • Key. Der Rang oder die Reihenfolge eines Prozesses im Kommunikator basiert auf einem Schlüssel. Wenn zwei Prozesse denselben Schlüssel erhalten, richtet sich die Reihenfolge nach dem Rang des Prozesses im Komminkator.
  • Newcomm. Mit diesem Befehl wird ein neuer Kommunikator angelegt. MPI_COMM_DUP ist ein Beispielbefehl, um ein Duplikat eines Comms mit denselben festen Attributen zu erstellen.
  • Derived Data Types. MPI-Funktionen benötigen eine Spezifikation, welche Art von Daten zwischen Prozessen gesendet wird. MPI_INT, MPI_CHAR und MPI_DOUBLE helfen bei der Vordefinition der Konstanten.
  • Point to Point. Hierbei wird eine Nachricht zwischen zwei bestimmten Prozessen gesendet. MPI_Send und MPI_Recv sind zwei gängige Methoden für das Blockieren von Punkt-zu-Punkt-Nachrichten. Blockieren bedeutet, dass der sendende und der empfangende Prozess warten müssen, bis sie eine vollständige Nachricht korrekt gesendet und empfangen haben.
  • Collective Basics. Dies sind kollektive Funktionen, die eine Kommunikation zwischen allen Prozessen in einer Prozessgruppe erfordern. MPI_Bcast ist ein Beispiel für eine solche Funktion, die Daten von einem Knoten an alle Prozesse in einer Prozessgruppe sendet.
  • One-Sided. Dieser Begriff wird typischerweise in Bezug auf eine Form von Kommunikationsoperationen verwendet, einschließlich MPI_Put, MPI_Get und MPI_Accumulate. Sie beziehen sich speziell auf das Schreiben in den Speicher, das Lesen aus dem Speicher und das Reduzieren von Operationen auf denselben Speicher über Tasks hinweg.

Message Passing Interface (MPI) MPI_COMM_WORLD Prozess-ID (Rang) Cluster Knoten 1-4 CPU 0/1
Abbildung 1: Ein MPI-Comm-Prozess mit mehreren Knoten auf vier Clustern weist jeder CPU einen Rang zu.

Geschichte und Versionen von MPI

Eine kleine Gruppe von Forschern in Österreich begann 1991 mit der Diskussion über das Konzept einer Message-Passing-Schnittstelle. Ein Jahr später fand in Williamsburg, Virginia, ein Workshop über Standards für Message Passing in einer verteilten Speicherumgebung statt, der vom Center for Research on Parallel Computing gesponsert wurde. Eine Arbeitsgruppe sollte den Standardisierungsprozess entwickeln.

Im November 1992 erstellte sie einen Entwurf für MPI-1 und präsentierte ihn 1993 auf der Supercomputing 1993. Mit zusätzlichen Rückmeldungen und Änderungen veröffentlichte die Gruppe 1994 die MPI-Version 1.0. Seitdem steht MPI allen Mitgliedern der High-Performance-Computing-Community offen.

Der ältere Standard MPI 1.3, genannt MPI-1, bietet über 115 Funktionen. Der spätere Standard MPI 2.2 oder MPI-2 bietet mehr als 500 Funktionen und ist weitgehend abwärtskompatibel zu MPI-1. Allerdings bieten nicht alle MPI-Bibliotheken eine vollständige Implementierung von MPI-2. MPI-2 enthielt neue parallele E/A, dynamische Prozessverwaltung sowie die Möglichkeiten, Speicheroperationen remote auszuführen. Der im November 2014 veröffentlichte MPI-3-Standard verbessert die Skalierbarkeit, erhöht die Leistung, beinhaltet Multicore- und Cluster-Unterstützung und ist mit mehr Anwendungen kompatibel. Im Jahr 2021 veröffentlichte das MPI-Forum MPI 4.0. Es führte partitionierte Kommunikation, eine neue Werkzeugschnittstelle, persistente Kollektive und andere neue Ergänzungen ein. MPI 5.0 und MPI 4.1 befinden sich derzeit in der Entwicklung.

Diese Definition wurde zuletzt im September 2022 aktualisiert

Erfahren Sie mehr über Data-Center-Betrieb