Ich verwende gcc
und OpenMPI . Normalerweise starte ich MPI-Programme mit dem mpirun
-Wrapper - zum Beispiel
um 4 Prozesse zu starten.
Allerdings habe ich mich gefragt, ob es möglich ist, einfach eine Binärdatei zu erzeugen, die das automatisch macht (vielleicht mit einigen hartcodierten Optionen wie -np 4
oben).
Ich weiß, dass ich einen C-Wrapper schreiben kann, der mein Programm aufruft, wie zum Beispiel:
%Vor%Aber das scheint etwas ungeschickt zu sein und ich habe zwei ausführbare Dateien anstelle von einem.
Ich habe versucht, die MPI-Bibliotheken explizit zu verknüpfen, wie
%Vor% Aber wenn ich die ausführbare Datei ausführe, setzt MPI_Comm_size
Null als Gruppengröße (als hätte ich -np 0
als Argument angegeben). Kann ich eine Umgebungsvariable oder etwas anderes verwenden, um die Gruppengröße zu übergeben? Oder gibt es eine andere Möglichkeit, ein einfach ausführbares MPI-Programm zu erstellen (mit Linux und gcc
)?
Wenn ich es richtig verstehe, wollen Sie eine selbst startende MPI-Programmdatei. Wie ich in meinem Kommentar geschrieben habe, können Sie mit einer speziellen Option gehen, die Ihren Code mpirun
ausführt, wenn er geliefert wird, z. %Code%. Mit Open MPI ist es noch einfacher, da spezielle Umgebungsvariablen in gestartete MPI-Prozesse exportiert werden, z. %Code%. Wenn diese Variable in der Umgebung vorhanden ist, wissen Sie, dass das Programm von -launchmpi
und nicht direkt gestartet wurde. Sie können beide Methoden in einer einzigen Prüfung kombinieren:
Wenn Sie die Anzahl der Prozesse im MPI-Job steuern möchten, können Sie sie als zusätzliche Ressource angeben, z. OMPI_COMM_WORLD_RANK
, oder in einer Umgebungsvariablen und verwenden Sie ihren Wert anstelle von mpirun
im obigen Code.
Beachten Sie, dass MPI-Executables nicht ohne -launchmpi 12
gestartet werden können. Letzteres ist ein integraler Bestandteil der MPI-Laufzeit und es bietet viel mehr, als nur mehrere Kopien der MPI-ausführbaren Datei zu starten. Außerdem verbinden Sie immer explizit mit der MPI-Bibliothek, wenn Sie mit einem der MPI-Compiler-Wrapper kompilieren (versuchen Sie "4"
). Sie können MPI-Bibliotheken zwar statisch verknüpfen (nicht empfohlen, siehe hier ) ), Sie benötigen weiterhin mpirun
, um MPI-Jobs ausführen zu können - AFAIK gibt es keine Möglichkeit, mpicc -showme
-Funktionalität in Ihr Programm einzubetten, zumindest nicht in Open MPI.
Tags und Links compilation openmpi