mpirun 无法识别 $PATH 中的程序

mpirun 无法识别 $PATH 中的程序

不知何故mpirun未能承认我的$PATHPyroDist我在 中的程序$PATH有效:

$ PyroDist
Can't find asked option -in
PyroDist - pairwise distance matrix from flowgrams
-in     string            flow file name
-out    stub              out file stub
Options:
-ni                       no index in dat file
-rin    string            lookup file name

mpirun并且使用完整路径运行它也可以:

$ mpirun -np 4 ../bin/PyroDist -in C005.dat -out foo
0: Read data
0: Broadcast data
0: Broadcast flows
nN=2094 nM=360 nSize=753840

但这失败了:

$ mpirun -np 4 PyroDist
Missing: program name
Program PyroDist either does not exist, is not 
executable, or is an erroneous argument to mpirun.

由于我将使用一组复杂的工作流程,因此使用完整路径是不可行的。有任何想法吗?

(Linux 2.6.32 上的 openmpi 1.2.7)

答案1

mpirun可能使用execv()调用来运行程序而不是调用execvp()(它将在 中搜索它PATH)。

第一个解决方法:要求 shell 自行查找命令:

mpirun -np 4 $(which PyroDist) -in C005.dat -out foo

否则:我能想到的两个(不太好的)解决方法:

  1. /usr/bin/env与 argument 一起使用PyroDist,但这要求mpirun允许以某种方式随程序传递参数。

  2. 编写您自己的包装器,例如:

    #!/bin/sh
    PyroDist
    

    并将其放置在具有“固定”相对路径的地方。

相关内容