私はOpenMPIgcc
を使用しています。通常、私はラッパーを使用してMPIプログラムを実行します-たとえば、mpirun
mpirun -np 4 myprogram
4つのプロセスを開始します。
ただし、それを自動的に実行するバイナリを簡単に生成できるかどうか疑問に思っていました(おそらく、-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;
}
しかし、これは少し不器用なようで、1つではなく2つの実行可能ファイルになってしまいます。
MPIライブラリを明示的にリンクしようとしました。
gcc -o myprogram -I/usr/lib/openmpi/include/ \
-lmpi -L/usr/lib/openmpi/lib/ myprogram.c
しかし、結果の実行可能ファイルを実行するMPI_Comm_size
と、グループサイズとしてゼロが設定されます(-np 0
引数として指定したかのように)。グループサイズを渡すために環境変数などを使用できますか?または、(Linuxとを使用して)単一の実行可能MPIプログラムを構築する別の方法はありgcc
ますか?