なぜかmpirun
私のことを認めませんでした$PATH
。PyroDist
私のプログラムは$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
)。
最初の回避策:シェルにコマンド自体を見つけるように要求します。
mpirun -np 4 $(which PyroDist) -in C005.dat -out foo
そうでない場合:私が考えることができる2つの(あまり良くない)解決策は次のとおりです。
/usr/bin/env
引数とともに使用されますが、PyroDist
これを行うには、mpirun
任意の方法で引数をプログラムと共に渡すことを許可する必要があります。たとえば、次のようにラッパーを自分で作成します。
#!/bin/sh PyroDist
「固定された」相対パスがある場所に配置します。