Laufendes OpenMPI-Programm ohne mpirun

8

Ich verwende gcc und OpenMPI . Normalerweise starte ich MPI-Programme mit dem mpirun -Wrapper - zum Beispiel

%Vor%

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 )?

    
Jay 24.06.2012, 10:21
quelle

2 Antworten

6

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:

%Vor%

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.

    
Hristo Iliev 25.06.2012, 08:15
quelle
1

Sie können dies mit einem Bash-Skript tun:

%Vor%     
RSFalcon7 24.06.2012 19:06
quelle

Tags und Links