我正在使用gcc
和OpenMPI。通常我使用包装器运行 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;
}
但这似乎有点笨拙,我最终得到了两个可执行文件而不是一个。
我试图显式链接 MPI 库,比如
gcc -o myprogram -I/usr/lib/openmpi/include/ \
-lmpi -L/usr/lib/openmpi/lib/ myprogram.c
但是当我运行生成的可执行文件时,MPI_Comm_size
将组大小设置为零(就像我-np 0
作为参数给出一样)。我可以使用环境变量或其他东西来传递组大小吗?或者,是否有另一种方法来构建单可执行 MPI 程序(使用 Linux 和gcc
)?