www.wikidata.de-de.nina.az
Message Passing Interface MPI ist ein Standard der den Nachrichtenaustausch bei parallelen Berechnungen auf verteilten Computersystemen beschreibt Er legt dabei eine Sammlung von Operationen und ihre Semantik also eine Programmierschnittstelle fest aber keine Implementierung MPIBasisdatenEntwickler MPI ForumAktuelle Version Version 4 0 PDF 4 3 MB 9 Juni 2021 Betriebssystem Linux Unix Microsoft Windows NT macOSProgrammiersprache C C Fortran Python JavaKategorie APIdeutschsprachig neinwww mpi forum orgEine MPI Applikation besteht in der Regel aus mehreren miteinander kommunizierenden Prozessen die alle zu Beginn der Programmausfuhrung parallel gestartet werden Alle diese Prozesse arbeiten dann gemeinsam an einem Problem und nutzen zum Datenaustausch Nachrichten welche explizit von einem zum anderen Prozess geschickt werden Ein Vorteil dieses Prinzips ist es dass der Nachrichtenaustausch auch uber Rechnergrenzen hinweg funktioniert Parallele MPI Programme sind somit sowohl auf PC Clustern hier funktioniert der Austausch der Nachrichten z B uber TCP als auch auf dedizierten Parallelrechnern ausfuhrbar hier lauft der Nachrichtenaustausch uber ein Hochgeschwindigkeitsnetz wie InfiniBand oder Myrinet oder uber den gemeinsamen Hauptspeicher Inhaltsverzeichnis 1 Geschichte 2 Punkt zu Punkt Kommunikation 2 1 Blockierendes Senden und Empfangen 2 1 1 Programmbeispiel 2 2 Nichtblockierende Kommunikation 2 2 1 Fortschritt abfragen 2 2 2 Blockierend warten 2 3 Synchronisierendes Senden 2 4 Puffernde Varianten 3 Gruppen und Kommunikatoren 3 1 Vereinigung 3 2 Schnittmenge 3 3 Differenz 4 Globale Kommunikation 4 1 Broadcast ausstrahlen 4 2 Gather sammeln 4 2 1 Vektorbasierte Variante 4 3 Scatter streuen 4 3 1 Vektorbasierte Variante 4 4 Akkumulation 4 4 1 Logische Operationen 4 4 2 Arithmetische Operationen 4 4 3 Benutzerdefinierte Operationen 4 4 4 Prafixreduzierung 4 5 Allgather 4 6 All to all Gesamtaustausch 5 MPI 2 6 Implementierungen 6 1 C C und Fortran 6 2 C 6 3 Python 6 4 Java 6 5 Perl 6 6 R 6 7 Haskell 7 Siehe auch 8 Literatur 9 Weblinks 10 EinzelnachweiseGeschichte Bearbeiten1992 begann die Entwicklung des MPI 1 0 Standards mit Entwurfen November 1992 Februar 1993 November 1993 Ausgangspunkt waren altere Kommunikationsbibliotheken wie PVM PARMACS P4 Chameleon und Zipcode Der Standard erschien am 5 Mai 1994 mit Punkt zu Punkt Kommunikation globale Kommunikation Gruppen Kontext und Kommunikatoren Umgebung Profiling Schnittstelle Spracheinbindung fur C und Fortran 77Im Juni 1995 erfolgten Fehlerkorrekturen mit MPI 1 1 Am 18 Juli 1997 wurde die stabile Version MPI 1 2 veroffentlicht die neben weiteren Fehlerkorrekturen eine Versionidentifikation erlaubt Sie wird auch als MPI 1 bezeichnet Am 30 Mai 2008 erschien MPI 1 3 mit weiteren Fehlerkorrekturen und Klarstellungen Zeitgleich zur Version 1 2 wurde am 18 Juli 1997 auch der MPI 2 0 Standard verabschiedet Dieser wird auch als MPI 2 bezeichnet und enthalt unter anderem folgende Erweiterungen parallele Datei Ein Ausgabe dynamische Prozessverwaltung Zugriff auf Speicher anderer Prozesse zusatzliche Spracheinbindung von C und Fortran 90Am 23 Juni 2008 wurden die bisher separaten Teile MPI 1 und MPI 2 zu einem gemeinsamen Dokument vereint und als MPI 2 1 veroffentlicht MPI Standard Version 2 2 ist vom 4 September 2009 und enthalt weitere Verbesserungen und kleinere Erweiterungen Am 21 September 2012 hat das MPI Forum MPI 3 veroffentlicht 1 das neue Funktionalitat einarbeitet wie beispielsweise nicht blockierende Kollektive ein verbessertes einseitiges Kommunikationsmodell RMA Remote Memory Access ein neues Fortran Interface topographiebezogene Kommunikation und nicht blockierende parallele Ein und Ausgabe 2 Am 9 Juni 2021 wurde MPI 4 veroffentlicht Wesentliche Neuerungen sind Funktionsinterfaces die Parameter mit einem grosseren Wertebereich unterstutzen Zuvor waren durch den vorgegebenen 32 bit Datentyp wesentliche Grossen wie z B die Anzahl zu kommunizierender Datenelemente auf etwas mehr als zwei Milliarden beschrankt Persistente Kollektive eroffnen Moglichkeiten zur Optimierung wiederholt ausgefuhrter Kommunikation und sind zudem im Gegensatz zu den schon vorhandenen kollektiven Operationen in beliebiger Reihenfolge ausfuhrbar Zudem wurde die Fehlerbehandlung in vielen Punkten verbessert und ein neues Session Modell zur dynamischen Nutzung der von MPI verwalteten Ressourcen eingefuhrt 3 Zu den Hauptentwicklern gehort Bill Gropp Punkt zu Punkt Kommunikation BearbeitenDie grundlegendste Art der Kommunikation findet zwischen zwei Prozessen statt ein Sendeprozess ubermittelt dabei Informationen an einen Empfangsprozess In MPI werden diese Informationen in sogenannte Nachrichten verpackt die mit den Parametern buffer count und datatype beschrieben werden Zu jeder Sendeoperation muss eine passende Empfangsoperation existieren Da in parallelen Anwendungen die blosse Reihenfolge der Abarbeitung von Operationen nicht immer ausreichend ist bietet MPI zusatzlich den tag Parameter an nur wenn dieser Wert bei Sende und Empfangsoperation identisch ist dann passen beide zusammen Blockierendes Senden und Empfangen Bearbeiten Die einfachsten Operationen fur eine Punkt zu Punkt Kommunikation sind senden und empfangen int MPI Send void buf int count MPI Datatype datatype int dest int tag MPI Comm comm buf Zeiger auf den Sendepuffer count Zahl der Elemente im Sendepuffer datatype Datentyp der Elemente im Sendepuffer dest Rang des Zielprozesses tag Markierung der Nachricht comm Kommunikator der Prozessgruppeint MPI Recv void buf int count MPI Datatype datatype int source int tag MPI Comm comm MPI Status status buf Zeiger auf einen Empfangspuffer ausreichender Grosse count Zahl der Elemente im Empfangspuffer datatype Datentyp der Elemente im Empfangspuffer source Rang des Quellprozesses mit source MPI ANY SOURCE wird von einem beliebigen Prozess empfangen tag erwartete Markierung der Nachricht mit tag MPI ANY TAG wird jede Nachricht empfangen comm Kommunikator der Prozessgruppe status Zeiger auf eine Statusstruktur in der Informationen uber die empfangene Nachricht abgelegt werden sollenDie beiden Operationen sind blockierend und asynchron Das bedeutet MPI Recv kann ausgefuhrt werden bevor das zugehorige MPI Send gestartet wurde MPI Recv blockiert bis die Nachricht vollstandig empfangen wurdeAnalog gilt MPI Send kann ausgefuhrt werden bevor das zugehorige MPI Recv gestartet wurde MPI Send blockiert bis der Sendepuffer wiederverwendet werden kann d h die Nachricht vollstandig ubermittelt oder zwischengepuffert wurde Programmbeispiel Bearbeiten Die Verwendung von MPI Send und MPI Recv wird im folgenden ANSI C Beispiel fur 2 MPI Prozesse veranschaulicht include mpi h include lt stdio h gt include lt string h gt int main int argc char argv int myrank message size 50 tag 42 char message message size MPI Status status MPI Init amp argc amp argv MPI Comm rank MPI COMM WORLD amp myrank if myrank 0 MPI Recv message message size MPI CHAR 1 tag MPI COMM WORLD amp status printf received s n message else strcpy message Hello there MPI Send message strlen message 1 MPI CHAR 0 tag MPI COMM WORLD MPI Finalize return 0 Nichtblockierende Kommunikation Bearbeiten Die Effizienz einer parallelen Anwendung kann oftmals gesteigert werden indem man Kommunikation mit Berechnung uberlappt und oder synchronisationsbedingte Wartezeiten vermeidet Dazu definiert der MPI Standard sogenannte nichtblockierende Kommunikation bei der die Kommunikationsoperation lediglich angestossen wird Eine separate Funktion muss dann aufgerufen werden um solch eine Operation zu beenden Im Unterschied zur blockierenden Variante wird beim Starten der Operation ein Request Objekt erzeugt mit dessen Hilfe auf die Beendigung dieser Operation gepruft oder gewartet werden kann int MPI Isend void buf int count MPI Datatype datatype int dest int tag MPI Comm comm MPI Request request request Adresse der Datenstruktur die Informationen zur Operation enthaltint MPI Irecv void buf int count MPI Datatype datatype int source int tag MPI Comm comm MPI Request request Fortschritt abfragen Bearbeiten Um den Fortschritt einer dieser Operationen zu erfahren wird folgende Operation verwendet int MPI Test MPI Request request int flag MPI Status status Wobei flag 1 oder 0 gesetzt wird je nachdem ob die Operation abgeschlossen ist oder noch andauert Blockierend warten Bearbeiten Um dennoch blockierend auf eine MPI Isend oder MPI Irecv Operation zu warten wird folgende Operation benutzt int MPI Wait MPI Request request MPI Status status Synchronisierendes Senden Bearbeiten Fur die Sendeoperationen werden auch die synchronen Varianten MPI Ssend und MPI Issend definiert In diesem Modus wird das Senden erst dann beendet wenn die zugehorige Empfangsoperation begonnen wurde Puffernde Varianten Bearbeiten Gruppen und Kommunikatoren BearbeitenProzesse lassen sich in Gruppen zusammenfassen wobei jedem Prozess eine eindeutige Nummer der sogenannte Rang zugeordnet wird Fur den Zugriff auf eine Gruppe wird ein Kommunikator benotigt Soll also eine globale Kommunikationsoperation auf eine Gruppe beschrankt werden so muss der zur Gruppe gehorende Kommunikator angegeben werden Der Kommunikator fur die Menge aller Prozesse heisst MPI COMM WORLD Die zum Kommunikator comm gehorende Gruppe erhalt man mit int MPI Comm group MPI Comm comm MPI Group group Fur Prozessgruppen stehen die ublichen Mengenoperationen zur Verfugung Vereinigung Bearbeiten Zwei Gruppen group1 und group2 konnen zu einer neuen Gruppe new group vereinigt werden int b MPI Group union b MPI Group i group1 i MPI Group i group2 i MPI Group i new group i Die Prozesse aus group1 behalten ihre ursprungliche Nummerierung Die aus group2 die nicht bereits in der ersten enthalten sind werden fortlaufend weiter nummeriert Schnittmenge Bearbeiten Die Schnittmenge zweier Gruppen erhalt man mitint b MPI Group intersection b MPI Group i group1 i MPI Group i group2 i MPI Group i new group i Differenz Bearbeiten Die Differenz zweier Gruppen erhalt man mitint b MPI Group difference b MPI Group i group1 i MPI Group i group2 i MPI Group i new group i Globale Kommunikation BearbeitenIn parallelen Anwendungen trifft man haufig spezielle Kommunikationsmuster an bei denen mehrere oder gar alle MPI Prozesse gleichzeitig beteiligt sind Der MPI Standard hat deswegen fur die wichtigsten Muster eigene Operationen definiert Diese unterscheidet man grob in drei Arten Synchronisation Barrier Kommunikation z Bsp Broadcast Gather Alltoall und Kommunikation gekoppelt mit Berechnung z B Reduce oder Scan Manche dieser Operationen verwenden einen ausgewahlten MPI Prozess der eine Sonderrolle einnimmt und der typischerweise mit root bezeichnet wird Wo es sinnvoll ist existieren zusatzlich zu den regularen Kommunikationsoperationen noch vektorbasierte Varianten z B Scatterv die unterschiedliche Argumente pro Prozess ermoglichen Broadcast ausstrahlen Bearbeiten nbsp Die Broadcast Operation fur drei ProzesseMit der Broadcast Operation schickt ein ausgewahlter MPI Prozess root allen anderen Prozessen in seiner Gruppe comm die gleichen Daten Die dafur definierte Funktion ist dabei fur alle beteiligten Prozesse identisch int b MPI Bcast b void i buffer i int i count i MPI Datatype i type i int i root i MPI Comm i comm i Der MPI Prozess root stellt in buffer seine Daten zur Verfugung wahrend die anderen Prozesse hier die Adresse ihres Empfangspuffers ubergeben Die restlichen Parameter mussen bei allen Prozessen gleich bzw gleichwertig sein Nachdem die Funktion zuruckkehrt befinden sich in allen Puffern die Daten die ursprunglich nur bei root vorhanden waren Gather sammeln Bearbeiten nbsp Die Gather OperationMit der Gather Operation sammelt der MPI Prozess root die Daten aller beteiligten Prozesse ein Die Daten aller Sendepuffer werden dabei nach Rang sortiert hintereinander im Empfangspuffer abgelegt int b MPI Gather b void i sendbuf i int i sendcount i MPI Datatype i sendtype i void i recvbuf i int i recvcount i MPI Datatype i recvtype i int i root i MPI Comm i comm i Vektorbasierte Variante Bearbeiten Die vektorbasierte Variante der Gather Operation erlaubt eine prozessabhangige Anzahl von Elementen int b MPI Gatherv b void i sendbuf i int i sendcount i MPI Datatype i sendtype i void i recvbuf i int i recvcounts i int i displs i MPI Datatype i recvtype i int i root i MPI Comm i comm i recvcounts Feld das die Zahl der Elemente enthalt die von den einzelnen Prozessen empfangen werden nur fur root relevant displs Feld dessen Eintrag i die Verschiebung im Empfangspuffer festlegt bei der die Daten von Prozess i abgelegt werden sollen ebenfalls nur fur root relevant Bei den Feldern ist zu beachten dass im Empfangspuffer zwar Lucken erlaubt sind aber keine Uberlappungen Sollen also etwa von 3 Prozessen jeweils 1 2 und 3 Elemente vom Typ Integer empfangen werden so muss recvcounts 1 2 3 und displs 0 1 sizeof int 3 sizeof int gesetzt werden Scatter streuen Bearbeiten nbsp Die Scatter OperationMit einer Scatter Operation schickt der MPI Prozess root jedem beteiligten Prozess ein unterschiedliches aber gleich grosses Datenelement int b MPI Scatter b void i sendbuf i int i sendcount i MPI Datatype i sendtype i void i recvbuf i int i recvcount i MPI Datatype i recvtype i int i root i MPI Comm i comm i Vektorbasierte Variante Bearbeiten int b MPI Scatterv b void i sendbuf i int i sendcounts i int i displs i MPI Datatype i sendtype i void i recvbuf i int i recvcount i MPI Datatype i recvtype i int i root i MPI Comm i comm i Akkumulation Bearbeiten Die Akkumulation ist eine spezielle Form der Gather Operation Hierbei werden ebenfalls die Daten aller beteiligten Prozesse aufgesammelt aber zusatzlich noch mittels einer festgelegten Reduktionsoperation zu einem Datum reduziert Sei beispielsweise x i displaystyle x i nbsp der Wert bei dem Prozess mit Rang i displaystyle i nbsp dann liefert Reduce die Gesamtsumme aller Werte i 0 n 1 x i displaystyle sum i 0 n 1 x i nbsp int b MPI Reduce b void i sendbuf i void i recvbuf i int i count i MPI Datatype i type i MPI Op i op i int i root i MPI Comm i comm i Fur den Parameter op existieren dabei folgende vordefinierte Reduktionsoperationen Logische Operationen Bearbeiten MPI LAND logische UND Verknupfung MPI BAND bitweise UND Verknupfung MPI LOR logische ODER Verknupfung MPI BOR bitweise ODER Verknupfung MPI LXOR logische exklusiv ODER Verknupfung MPI BXOR bitweise exklusiv ODER VerknupfungArithmetische Operationen Bearbeiten MPI MAX Maximum MPI MIN Minimum MPI SUM Summe MPI PROD Produkt MPI MINLOC Minimum mit Prozess MPI MAXLOC Maximum mit ProzessDie Operationen MPI MINLOC und MPI MAXLOC geben zusatzlich den Rang des MPI Prozesses zuruck der das Ergebnis bestimmte Benutzerdefinierte Operationen Bearbeiten Zusatzlich zu den vordefinierten Reduktionsoperationen konnen auch eigene Reduktionsoperationen verwendet werden Dazu wird eine frei programmierbare binare Verknupfungsoperation die assoziativ sein muss und optional kommutativ sein kann dem MPI bekanntgegeben int b MPI Op create b MPI User function i function i int i commute i MPI Op i op i Die dazugehorige Nutzerfunktion berechnet aus zwei Eingabewerten einen Ausgabewert und macht dies aus Optimierungsgrunden nicht nur einmal mit Skalaren sondern elementweise auf Vektoren beliebiger Lange typedef void b MPI User function b void invec void inoutvec int len MPI Datatype datatype Prafixreduzierung Bearbeiten Zusatzlich zur oben genannten Akkumulation existiert auch eine Allreduce Variante welche das gleiche Ergebnis allen MPI Prozessen zur Verfugung stellt und nicht nur einem root Prozess Die sogenannte Prafixreduzierung erweitert nun diese Moglichkeit indem nicht allen Prozessen das gleiche Ergebnis sondern stattdessen ein prozessspezifisches Teilergebnis berechnet wird Sei beispielsweise erneut x i displaystyle x i nbsp der Wert bei dem Prozess mit Rang i displaystyle i nbsp dann liefert Scan die Partialsumme der Werte von Rang 0 displaystyle 0 nbsp bis i displaystyle i nbsp j 0 i x j displaystyle sum j 0 i x j nbsp int b MPI Scan b void i sendbuf i void i recvbuf i int i count i MPI Datatype i type i MPI Op i op i MPI Comm i comm i Soll der eigene Wert nicht mit in die Berechnung eingehen d h ausgeschlossen werden so kann dies mit der exklusiven Scan Funktion MPI Exscan bewerkstelligt werden Allgather Bearbeiten nbsp Die Allgather OperationBei der Allgather Operation schickt jeder Prozess an jeden anderen Prozess die gleichen Daten Es handelt sich also um eine Multi Broadcast Operation bei der es keinen gesonderten MPI Prozess gibt int b MPI Allgather b void i sendbuf i int i sendcount i MPI Datatype i sendtype i void i recvbuf i int i recvcount i MPI Datatype i recvtype i MPI Comm i comm i All to all Gesamtaustausch Bearbeiten nbsp Die Alltoall OperationBei der All to all Kommunikation werden ahnlich wie bei der Allgather Kommunikation Daten zwischen allen Prozessen ausgetauscht Dabei wird jedoch nur der i te Teil des Sendebuffers an den i ten Prozess gesendet Daten die vom Prozess mit dem Rang j kommen werden entsprechend an j ter Stelle im Empfangsbuffer gespeichert int b MPI Alltoall b void i sendbuf i int i sendcount i MPI Datatype i sendtype i void i recvbuf i int i recvcount i MPI Datatype i recvtype i MPI Comm i comm i Des Weiteren gibt es noch die synchronisierende MPI Barrier Operation Diese Funktion kehrt erst zuruck nachdem alle in der angegebenen Gruppe befindlichen MPI Prozesse diesen Teil des Programmes erreicht haben MPI 2 BearbeitenSeit 1997 ist eine zweite Version des MPI Standards verfugbar die einige Erweiterungen zu dem weiterhin bestehenden MPI 1 1 Standard hinzufugt Zu diesen Erweiterungen gehoren unter anderem eine dynamische Prozessverwaltung d h Prozesse konnen nun zur Laufzeit erzeugt und geloscht werden paralleler Zugriff auf das Dateisystemeinseitige Kommunikation Spezifikation zusatzlicher Sprachschnittstellen C Fortran 90 wobei die Sprachschnittstellen zu C seit MPI 2 2 als veraltet markiert sindBeispiel Lesen einer nx n 1 Matrix mit paralleler Datei Eingabe und size Prozessen mit den Nummern rank 0 size 1 Die Spalte n 1 enthalt die rechte Seite des Gleichungssystems A x b in Form der erweiterten Matrix A b Die Zeilen der Matrix werden gleichmassig auf die Prozessoren verteilt Die Verteilung erfolgt zyklisch Jeder Prozessor eine Zeile nach size Zeilen wird wieder rank 0 bedient und nicht blockweise jeder Prozessor bekommt einen zusammenhangenden Block von n size Zeilen ndims 1 dimensions aosi 0 size n 1 array of sizes aoss 0 n 1 array of subsizes aost 0 rank n 1 array of starts order MPI ORDER C row or column order MPI Type create subarray ndims aosi aoss aost order MPI DOUBLE amp ft MPI Type commit amp ft MPI File open MPI COMM WORLD fn MPI MODE RDONLY MPI INFO NULL amp fh MPI File set view fh sizeof int MPI DOUBLE ft native MPI INFO NULL for i rank i lt n i size MPI File read fh rdbuffer n 1 MPI DOUBLE amp status for j 0 j lt n 1 j A i size j rdbuffer j nur die dem Prozess zugeordneten Zeilen MPI File close amp fh Die Schnittstelle folgt mit leichten der Parallelitat geschuldeten Anderungen dem POSIX 1003 1 Standard Die Datei wird mit MPI File open zum gemeinsamen Lesen eroffnet Die Blenden views fur die einzelnen Prozesse werden mit MPI File set view festgelegt Hier wird die vorher definierte Variable ft filetype benotigt in der in einem Block von size n 1 doubles eine Zeile mit n 1 doubles herausgepickt wird die bei Position rank n 1 beginnt Somit wird vom gesamten Block jedem Prozess sukzessive genau eine Zeile zugewiesen Dieser Typ wird mit MPI Type create subarray definiert und mit MPI Type commit im MPI System bekanntgemacht Jeder Prozess liest mit MPI File read seine Zeilen mit den Nummern i rank rank size rank 2 size bis die gesamte Matrix gelesen wurden Das Argument size of int berucksichtigt die Grosse der Matrix die am Anfang der Datei als int gespeichert wird Gewinn In size Prozessoren kann eine Matrix verteilt gespeichert werden die auf einem einzelnen Prozessor in dessen Speicher keinen Platz mehr hatte Das rechtfertigt auch die Konvention als Speicher einer Parallelanlage die Summe des Speichers der Einzelcores und Einzelknoten anzugeben Dateiformat n Zeile 0 n 1 Zahlen fur Prozess rank 0 Zeile 1 n 1 Zahlen fur Prozess rank 1 Zeile r n 1 Zahlen fur Prozess rank r Zeile size 1 n 1 Zahlen fur Prozess rank size 1 Zeile size n 1 Zahlen fur Prozess rank 0 Zeile size 1 n 1 Zahlen fur Prozess rank 1 Zeile size r n 1 Zahlen fur Prozess rank r Zeile 2 size 1 n 1 Zahlen fur Prozess rank size 1 Zeile 2 size n 1 Zahlen fur Prozess rank 0 es folgen entsprechend der Zeilenzahl der Matrix ausreichend viele solcher Blocke Das eigentliche Lesen erfolgt mit MPI File read Jeder Prozess liest sequentiell nur die ihm zugeteilten Zeilen Die kollektive Operation besteht darin dass die MPI Bibliothek das Lesen optimieren und parallelisieren kann Nach Ende des Lesens muss die Datei wie ublich geschlossen werden Das geschieht mit MPI File close MPI verfugt fur die Operationen uber eigene Datentypen MPI Datatype ft und MPI File fh Die Beschreibung des filetypes erfolgt mit normalen C Variablen int ndims int aosi 1 int aoss 1 int aost 1 int order Weiteres in 4 Implementierungen BearbeitenC C und Fortran Bearbeiten Die erste Implementierung des MPI 1 x Standards war MPICH vom Argonne National Laboratory und der Mississippi State University Mittlerweile ist MPICH2 verfugbar das den MPI 2 1 Standard implementiert LAM MPI vom Ohio Supercomputing Center war eine weitere freie Version deren Weiterentwicklung inzwischen zugunsten von Open MPI eingestellt wurde Ab der Version 1 35 der Boost Libraries gibt es Boost MPI eine C freundliche Schnittstelle zu verschiedenen MPI Implementierungen Auch andere Projekte wie z B TPO bieten diese Moglichkeit und sind in der Lage STL Container zu versenden und zu empfangen C Bearbeiten MPI NET MPI1 Python Bearbeiten MPI for Python MPI 1 MPI 2 pyMPI Entwicklung eingestellt Boost MPI Python Bindings Entwicklung eingestellt Java Bearbeiten MPJ Express mpiJava MPI 1 Entwicklung eingestellt Perl Bearbeiten einige MPI ModuleR Bearbeiten RmpiHaskell Bearbeiten hMPI Haskell MPISiehe auch BearbeitenParallele Virtuelle Maschine OpenMPLiteratur BearbeitenHeiko Bauke Stephan Mertens Cluster Computing Springer 2006 ISBN 3 540 42299 4 William Gropp Ewing Lusk Anthony Skjellum MPI Eine Einfuhrung Portable parallele Programmierung mit dem Message Passing Interface Munchen 2007 ISBN 978 3 486 58068 6 M Firuziaan O Nommensen Parallel Processing via MPI amp OpenMP Linux Enterprise 10 2002 Marc Snir Steve Otto Steven Huss Lederman David Walker Jack Dongarra MPI The complete reference Vol 1 The MPI core 2 Auflage MIT Press 1998 William Gropp Steven Huss Lederman Andrew Lumsdaine Ewing Lusk Bill Nitzberg William Saphir Marc Snir MPI The Complete Reference Vol 2 The MPI 2 Extensions The MIT Press 1998 Weblinks BearbeitenMPI MPI Forum EuroMPI MPI Users Group Meeting 2010 edition Open MPI frei verfugbare MPI Implementierung MPICH frei verfugbare MPI Implementierung MPICH2 frei verfugbare MPI Implementierung MVAPICH MPI Implementierung mit VAPI Boost TPO Einzelnachweise Bearbeiten MPI Documents Memento des Originals vom 6 November 2006 im Internet Archive nbsp Info Der Archivlink wurde automatisch eingesetzt und noch nicht gepruft Bitte prufe Original und Archivlink gemass Anleitung und entferne dann diesen Hinweis 1 2 Vorlage Webachiv IABot www mpi forum org The Future of MPI PDF 2 4 MB Changes in MPI 4 0 MPI 2 Extensions to the Message Passing Interface Memento des Originals vom 21 September 2007 imInternet Archive nbsp Info Der Archivlink wurde automatisch eingesetzt und noch nicht gepruft Bitte prufe Original und Archivlink gemass Anleitung und entferne dann diesen Hinweis 1 2 Vorlage Webachiv IABot www mpi forum org Abgerufen von https de wikipedia org w index php title Message Passing Interface amp oldid 239559611