如何将MPI\u信息集与MPICH中的MPI\u Comm\u spawn一起使用

如何将MPI\u信息集与MPICH中的MPI\u Comm\u spawn一起使用,mpi,cluster-computing,spawn,mpich,Mpi,Cluster Computing,Spawn,Mpich,我需要在集群上使用MPI spawn。为此,我需要使用MPI_Info_set来指定将运行派生进程的节点。我尝试了MPI\u Info\u集(Info,“add host”,“node1,node2”),但不起作用 下面,我提供了一个生成代码的小示例: MPI_Info info; MPI_Info_create(&info); MPI_Info_set(info,"add-host","node1,node2"); MPI_Comm_spawn("./mpiworker", MPI_A

我需要在集群上使用MPI spawn。为此,我需要使用MPI_Info_set来指定将运行派生进程的节点。我尝试了
MPI\u Info\u集(Info,“add host”,“node1,node2”)
,但不起作用

下面,我提供了一个生成代码的小示例:

MPI_Info info;
MPI_Info_create(&info);
MPI_Info_set(info,"add-host","node1,node2");
MPI_Comm_spawn("./mpiworker", MPI_ARGV_NULL,
               dynamic_procs,
               info, 0, MPI_COMM_WORLD,
               &intercomm,
               MPI_ERRCODES_IGNORE);

还有什么我可以使用的吗?

参数
添加主机
可能来自OpenMPI(),MPICH不支持它

对于MPICH,请尝试以下选项之一:

  • 主机
    -适合我
  • 主机
    -应该可以工作,但是,在我当前使用的版本中,它似乎已被破坏,MPI在作为参数值传递的第一个节点上生成所有进程;如果在您的情况下也发生这种情况,我建议使用
    MPI\u Comm\u spawn\u multiple
    为每个进程手动分配主机

此外,我不知道如何找到所有受支持参数的列表-我认为MPICH人员不太注意保持文档的完整性。

这对我来说是可行的,而不仅仅是
MPI\u Comm\u spawn
。以下代码将为每个节点生成一个进程。通过扩展下面输入的维度,我可以为每个节点生成更多进程

MPI_Info info[2];

MPI_Info_create(&info[0]);
MPI_Info_set(info[0],"host","node1");

MPI_Info_create(&info[1]);
MPI_Info_set(info[1],"host","node2");

char *cmds[2] = { "./mpiworker", "./mpiworker" };
int np[2] = { 1, 1 };
int errcodes[2];

MPI_Comm_spawn_multiple( 2, cmds, MPI_ARGVS_NULL, np, info, 0, MPI_COMM_WORLD, &intercomm, errcodes );

//Below parallel code follows
...
以上是在Ubuntu bionic上用MPICH版本3.3a2测试的

我的示例基于以下内容。如果我找到一个更优雅的方式,我会重新发布