2012-07-06 9 views
5

Ich versuche, mein Programm mit Drehmoment-Scheduler mit MPI-Lauf ausführen. Obwohl in meiner pbs-Datei ich die Bibliothek alle laden, indemLoading shared library in open-mpi/mpi-run

export LD_LIBRARY_PATH=/path/to/library 

aber es gibt Fehler heißt

error while loading shared libraries: libarmadillo.so.3: 
cannot open shared object file: No such file or directory. 

ich Fehler erraten liegt in Variable LD_LIBRARY_PATH nicht in allen Knoten festgelegt. Wie würde ich es funktionieren lassen?

+0

Konnten Sie Ihr PBS-Skript hier posten? – chrisaycock

Antwort

16

LD_LIBRARY_PATH wird nicht automatisch in MPI-Prozesse exportiert, die durch mpirun erzeugt werden. Sie sollten verwenden

mpirun -x LD_LIBRARY_PATH ... 

, um den Wert LD_LIBRARY_PATH zu drücken. Stellen Sie außerdem sicher, dass der angegebene Pfad auf allen Knoten im Cluster vorhanden ist und dass libarmadillo.so.3 überall verfügbar ist.

+2

Wenn Open MPI mit nativer Torque/TM-Unterstützung kompiliert wurde, sollte der LD_LIBRARY_PATH (und der Rest der Umgebung) automatisch an alle Knoten in der Zuweisung weitergegeben werden. Wenn Open MPI nicht mit der nativen Torque-Unterstützung erstellt wurde, dann nehme ich an, dass Sie rsh/ssh zum Starten verwenden. In diesem Fall ist die Klausel "-x LD_LIBRARY_PATH" erforderlich. Ich würde eigentlich empfehlen, OMPI mit Torque/TM-Unterstützung neu aufzubauen; es ist aus mehreren Gründen besser als rsh/ssh. –

+0

DANKE. ICH WURDE MAD MIT DIESER SCHEISSE FAHREN .... Das Exportieren des LD_LIBRARY_PATH soll Kindprozesse diese Variablen verwenden lassen, aber es stellt sich heraus, dass es nicht tut. –

+0

@GregK. Das Exportieren funktioniert nur für Prozesse, die auf demselben Knoten gestartet werden, auf dem 'mpiexec' läuft, da es sich um untergeordnete Prozesse des letzteren handelt. Prozesse, die auf entfernten Knoten gestartet werden, sind Kinder des jeweiligen ORTE-Shepherd-Daemons und erben nicht direkt die Umgebung von "mpiexec", sondern nur die Umgebung, die an den Daemon weitergeleitet und von diesem zusätzlich gesetzt wird. (Ich könnte mich irren; Jeff Squyres weiß es besser) –

3

Auf einigen Systemen wird Ihre Umgebung nicht immer über mpirun verbreitet. Sie sollten alle diese Variablen in Ihrer .bashrc Datei setzen.