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

mpirunexecv()呼び出すのではなく、呼び出しを使用してプログラムを実行することもできますexecvp()(で検索しますPATH)。

最初の回避策:シェルにコマンド自体を見つけるように要求します。

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

そうでない場合:私が考えることができる2つの(あまり良くない)解決策は次のとおりです。

  1. /usr/bin/env引数とともに使用されますが、PyroDistこれを行うには、mpirun任意の方法で引数をプログラムと共に渡すことを許可する必要があります。

  2. たとえば、次のようにラッパーを自分で作成します。

    #!/bin/sh
    PyroDist
    

    「固定された」相対パスがある場所に配置します。

おすすめ記事