MPI工作正常:
$ mpirun -np 2 -H compute-0-0,compute-0-1 echo 1
1
1
然而,当通过屏幕启动时它不起作用:
$ rm -f screenlog.*
$ screen -L mpirun -np 2 -H compute-0-0,compute-0-1 echo 1
[screen is terminating]
$ cat screenlog.0
mpirun: error while loading shared libraries: libimf.so: cannot open shared object file: No such file or directory
这没有用:
$ rm -f screenlog.*
$ screen -L `which mpirun` -xLD_LIBRARY_PATH -np 2 -H compute-0-0,compute-0-1 echo 1
[screen is terminating]
$ cat screenlog.0
/share/apps/intel/openmpi/bin/mpirun: error while loading shared libraries: libimf.so: cannot open shared object file: No such file or directory
答案 0 :(得分:1)
(这是一个Rocks群?)
显然,由于某种原因,你没有得到正确的$LD_LIBRARY_PATH
。
这不是一个非常干净的解决方案,但它应该有效:
$ screen -L env LD_LIBRARY_PATH=$LD_LIBRARY_PATH mpirun -np 2 \
-H compute-0-0,compute-0-1 echo 1
我认为这是你试图用 -xLD_LIBRARY_PATH
选项做的事情,但我没有在documentation中看到我能找到的。
这就是你试图用-xLD_LIBRARY_PATH
选项做的事情,但这只会从$LD_LIBRARY_PATH
调用的进程中获取screen
的值(并传递给它)到echo 1
命令。到那时为时已晚。此外,man page表明应该有一个空格:-x LD_LIBRARY_PATH
;我不知道是否需要。
是否有一些脚本要为MPI获取环境(包括$LD_LIBRARY_PATH
)?它是在您的登录shell启动时自动获取的,还是您手动执行?您可能希望编写一个小的包装器脚本来源安装脚本,然后调用指定的命令。像(未经测试)的东西:
#!/bin/sh
. /share/apps/intel/openmpi/etc/setup.sh # probably not the right name
exec "$@"
将其另存为$HOME/bin/mpienv.sh
,然后您可以使用:
$ screen -L mpienv.sh mpirun -np 2 -H compute-0-0,compute-0-1 echo 1