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:
Wie muss ich meinen Code ändern? Muss ich Anrufe in andere MPI-Funktionen wie hinzufügen
MPI_WIN_ALLOCATE
?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.
mpiexec -n 8 /path/to/application
, um Ihren Computer so zu fälschen, dass er 8 verschiedene Knoten hat.Antworten:
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.
quelle