私はgcc
とOpenMPIを使用しています。 4つのプロセスを開始するために例えば、mpirunを使用しないOpenMPIプログラムの実行
mpirun -np 4 myprogram
- 通常、私はmpirun
ラッパーを使用してMPIプログラムを実行します。
しかし、自動的に(おそらく上記の-np 4
などのハードコードされたオプションを使用して)自動的に行うバイナリを簡単に生成できるかどうか疑問に思っていました。
私は次のような、私のプログラムを呼び出すCラッパーを書くことができます知っている:
#include <stdlib.h>
#include <unistd.h>
int main() {
char *options[] = { "mpirun", "-np", "4", "myprogram" };
execvp("mpirun", options);
/* Ignoring return value to keep example simple */
return EXIT_SUCCESS;
}
をしかし、これは少し不器用なようで、私は2つの実行ファイルの代わりに、1で終わります。
私は
gcc -o myprogram -I/usr/lib/openmpi/include/ \
-lmpi -L/usr/lib/openmpi/lib/ myprogram.c
のように、明示的にMPIライブラリをリンクすることを試みたが、私は実行可能ファイルを結果として実行したときに(私は引数として-np 0
を与えていたかのように)、MPI_Comm_size
セットはグループサイズとしてゼロ。グループサイズを渡すために環境変数などを使用できますか?あるいは、単一実行可能なMPIプログラム(Linuxとgcc
を使用して)を構築する別の方法がありますか?
私は私の頭の上からどのようにわからないが、それを行うことができます。 私はこれを実行するプログラムをいくつか知っています。そこには本当の魔法はありません。自分でもできるシーンの裏にはたくさんのものがあります。 –
私は正しく理解していますか?あなたは 'mpirun'をスキップしたいですか、何とか自動的に' mpirun'を呼び出したいですか? –
@Hristo Iliev:静的なバイナリが1つあればいいです。 – Jay