So führen Sie MPI-3.0 im Shared Memory-Modus wie OpenMP aus

14

Ich parallelisiere Code, um ein 5-dimensionales Populationsbilanzmodell numerisch zu lösen. Momentan habe ich in FORTRAN einen sehr guten MPICH2-parallelisierten Code, aber wenn wir die Parameterwerte erhöhen, werden die Arrays zu groß, um im verteilten Speichermodus ausgeführt zu werden.

Ich habe Zugriff auf einen Cluster mit 15 Knoten, wobei jeder Knoten über zwei 8-Kern-CPUs und 128 GB RAM verfügt. Ich möchte ein Programm mit MPI-3.0 im Shared Memory-Modus schreiben, damit nicht jeder Prozess eine eigene Kopie jedes Arrays erzeugt.

Bevor ich etwas auf dem Cluster ausführen kann, muss ich es auf einem Desktop mit Ubuntu testen. Es ist im Wesentlichen ein Blade des Clusters, da es über zwei 8-Kern-CPUs und 128 GB RAM verfügt. Ich werde meinen Code darauf schreiben und testen. Bitte richten Sie Ihre Antworten darauf aus, dass Programme auf dem Ubuntu-Computer ausgeführt werden.

Ich habe gelesen, dass es eine Möglichkeit gibt, MPI-3.0 im Shared-Memory-Modus wie OpenMP anstelle des Standard-Distributed-Memory-Modus auszuführen.

Fragen:

  1. Wie muss ich meinen Code ändern? Muss ich Anrufe in andere MPI-Funktionen wie hinzufügen MPI_WIN_ALLOCATE?

  2. Wie kompiliere ich meinen Code, um MPI-3.0 im Shared Memory-Modus auszuführen? Wird dies anders sein, wenn es sich um mehrere Knoten handelt?

Bitte geben Sie Beispiele für Kompilierungsskripte, wenn Sie können. Ich habe auch nur GNU-Compiler. Der von mir verwendete Cluster unterstützt keine Intel-Compiler.

Franklin Betten
quelle
1
Ja, Sie sollten MPI auf einem gemeinsam genutzten Speichersystem ausführen können. Die Art der Programmierung ist jedoch identisch. Ihr Code sollte für gemeinsam genutzte und verteilte Speichersysteme gleich sein. Wie es läuft, ist der einzige Unterschied.
NoseKnowsAll
Obwohl ich dies noch nicht getestet habe, sollten Sie in der Lage sein, Ihren Code mit dem Befehl auszuführen mpiexec -n 8 /path/to/application, um Ihren Computer so zu fälschen, dass er 8 verschiedene Knoten hat.
NoseKnowsAll
Ich habe es bereits auf einem gemeinsam genutzten Speichersystem ausgeführt, möchte aber, dass die Rechenkerne RAM gemeinsam nutzen, wie in OpenMP. Einige meiner Arrays haben eine Größe von 6 GB. Ich benötige daher alle Kerne auf jedem Knoten, um im Shared Memory-Modus zu arbeiten.
Franklin Betten
2
Nun, das ist für ein Forschungsprojekt. Also muss ich das Problem vergrößern. Ich habe bereits Arbeitscode, so dass das Einzige, was das Hochskalieren verhindert, der benötigte Speicher ist. Ich habe bei MPI-Konferenzen einige Dokumente und Powerpoints gefunden, die darauf hindeuten, dass MPI-3.0 Speicher mit neuen Anruffunktionen gemeinsam nutzen kann, die unter der einseitigen Kommunikationskategorie hinzugefügt wurden. Funktionen wie MPI_WIN_ALLOCATE_SHARE
Franklin Betten
2
www.eurompi2014.org/tutorials/hoefler-advanced-mpi-eurompi14.pdf cs.utexas.edu/users/flame/BLISRetreat2014/slides/…
Franklin Betten

Antworten:

0

Ich habe diesen Link auch bei Stack Overflow gefunden. Ich schwöre, ich habe für immer nach Fragen wie meinen gesucht, aber es scheint der beste Weg, eine Frage zum Stapelüberlauf zu suchen, zu sein, eine Frage zu stellen und ähnliche Beiträge vorzuschlagen.

Wie auch immer, hier ist der Link, der tatsächlich besagt, dass Sie MPI3.0 + im Shared Memory-Modus wie openmp ausführen können. Es gibt andere Quellen, die ich gefunden habe, die ebenfalls vorschlagen, und einige, aus denen hervorgeht, dass Sie nicht erklären können, wie oder wie Sie Ressourcen bereitstellen, um dies herauszufinden.

/programming/24797298/mpi-fortran-code-how-to-share-data-on-node-via-openmp

Nachdem ich den hier in diesem Link gegebenen Rat befolgt hatte, stieß ich auf Probleme, als ich USE 'mpi_f08' oben in meinen Code setzte. Ich verwende gfortran-4.8, das derzeit offenbar nicht genug FORTRAN2008-Unterstützung für USE mpi_f08 bietet. Diese Person in diesem Link verwendete wahrscheinlich den Intel Fortran 2008 Compiler. Sie können USE mpi verwenden, das bis Fortran2003 ziemlich gut funktioniert. Ich glaube jedoch nicht, dass Fortran 2003 über die Type () - Funktionen verfügt, die für die Verwendung der Funktionen für den Remotespeicherzugriff erforderlich sind, z. B. MPI_WIN_ALLOCATE_SHARED. Sie können sie daher nicht ohne FORTRAN2008 verwenden. Aber ich habe wirklich nicht genug Ressourcen, um das definitiv zu sagen, aber was ich gefunden habe, deutet darauf hin.

Franklin Betten
quelle
1
Sie können MPI_Win_allocate_shared mit allen drei Fortran-Schnittstellen verwenden. Darüber hinaus können Sie mit Fortran 2003 ISO_C_BINDING und der C-Schnittstelle Ihre eigenen schreiben.
Jeff
Bitte sagen Sie mir, warum man Type () benötigt, um RMA von Fortran zu verwenden. Ich kenne keine solche Einschränkung. RMA wird seit vielen Jahren mit F77 verwendet.
Jeff