Ich möchte (in ein paar Worten) wissen, was die Hauptunterschiede zwischen OpenMP und MPI sind.Was sind die Unterschiede zwischen MPI und OpenMP?
Antwort
OpenMP ist eine Möglichkeit, auf gemeinsam genutzten Speichergeräten zu programmieren. Dies bedeutet, dass die Parallelität dort auftritt, wo jeder parallele Thread Zugriff auf alle Ihre Daten hat.
Sie können sich folgendes vorstellen: Parallelität kann während der Ausführung einer bestimmten for
Schleife auftreten, indem die Schleife zwischen den verschiedenen Threads aufgeteilt wird.
MPI ist eine Möglichkeit, auf verteilten Speichergeräten zu programmieren. Dies bedeutet, dass die Parallelität dort auftritt, wo jeder parallele Prozess in seinem eigenen Speicherraum isoliert von den anderen arbeitet.
Sie können sich folgendes vorstellen: Jedes von Ihnen geschriebene Stück Code wird unabhängig von jedem Prozess ausgeführt. Die Parallelität tritt auf, weil Sie jedem Prozess genau den Teil des globalen Problems mitteilen, an dem er arbeiten soll, basierend auf seiner Prozess-ID.
Natürlich ist auch die Art und Weise, wie Sie ein OpenMP- und MPI-Programm schreiben, sehr unterschiedlich.
MPI steht für Message Passing Interface. Es handelt sich um eine Reihe von API-Deklarationen zur Nachrichtenübergabe (wie Senden, Empfangen, Rundsenden usw.) und welches Verhalten von den Implementierungen erwartet werden sollte.
Die Idee des "Message Passing" ist eher abstrakt. Es könnte bedeuten, dass Nachrichten zwischen lokalen Prozessen oder Prozessen weitergeleitet werden, die über vernetzte Hosts verteilt sind. Moderne Implementierungen versuchen sehr vielseitiger zu sein und die vielfachen zugrundeliegenden Mechanismen (Shared-Memory-Zugriff, Netzwerk-IO usw.) wegzuspulen.
OpenMP ist eine API, die es (vermutlich) einfacher macht, Shared-Memory-Multi-Processing-Programme zu schreiben. Es gibt keine Idee, Nachrichten weiterzugeben. Stattdessen schreiben Sie mit einer Reihe von Standardfunktionen und Compiler-Direktiven Programme, die lokale Threads parallel ausführen, und Sie steuern das Verhalten dieser Threads (auf welche Ressource sie zugreifen sollen, wie sie synchronisiert werden usw.). OpenMP benötigt die Unterstützung des Compilers, sodass Sie es auch als Erweiterung der unterstützten Sprachen betrachten können.
Und es ist nicht ungewöhnlich, dass eine Anwendung MPI und OpenMP verwenden kann.
Sie können das, was Sie beschreiben, sehr einfach in der gemeinsamen oder verteilten Speicherprogrammierung machen. Was Sie suchen, heißt "Reduktion" – NoseKnowsAll