我想知道在调用MPI_Comm_spawn时是否有必要所有进程都有所需的数据。
当调用此函数时,定义根进程来驱动操作,显然,这个等级必须为函数提供适当的参数。即:
MPI_Comm_spawn("./a.out", &argvs, maxprocs, info, 0, MPI_COMM_WORLD, &intercomm, MPI_ERRCODES_IGNORE);
如果我们知道 rank 0 是根,那么其他进程是否需要设置变量: argvs,maxprocs和info ?或者将这些信息放在 rank 0 中
是否足够?答案 0 :(得分:3)
不,从文档中可以看出这一点:
MPI_Comm_spawn
argv :命令的参数(字符串数组,仅在 root 时显着)
maxprocs :要启动的最大进程数(整数,重要 仅限 root )
信息: 一组键值对告诉运行时系统在何处以及如何启动进程(句柄,只在 root 时有效)
所以"其他"从文档中我理解,过程并不需要设置上述内容 请记住,这是一个集体呼吁。
答案 1 :(得分:3)
虽然MPI_Comm_spawn
的前四个参数仅在指定的根进程中很重要,但通信器中的所有进程都必须进行调用。因此,他们通过MPI_Comm_spawn
返回的交互者获得了与子工作进行通信的能力。如果您不需要初始作业中的所有排名都能够与子作业进行通信,而只需要与根级别进行通信,则可以使用MPI_COMM_SELF
而不是MPI_COMM_WORLD
:
int rank;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
if (rank == 0) {
MPI_Comm_spawn("./a.out", args, maxprocs, info, 0, MPI_COMM_SELF,
&intercomm, MPI_ERRCODES_IGNORE);
}