如何在MPICH中将MPI_Info_set与MPI_Comm_spawn一起使用

时间:2019-02-05 00:43:33

标签: mpi cluster-computing spawn mpich

我需要在群集上使用MPI生成。为此,我需要使用MPI_Info_set来指定将运行衍生进程的节点。我已经尝试过MPI_Info_set(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);

还有其他可以使用的东西吗?

2 个答案:

答案 0 :(得分:1)

参数add-host可能来自OpenMPI(man page),MPICH不支持。

对于MPICH,请尝试以下方法之一:

  • host-为我工作,
  • hosts-应该可以工作,但是,在我当前使用的版本中,它似乎已损坏,并且MPI在作为参数值传递的第一个节点处生成了所有进程。如果您也遇到这种情况,建议您使用MPI_Comm_spawn_multiple为每个进程手动分配主机。

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

答案 1 :(得分:0)

这为我解决了问题,而不仅仅是MPI_Comm_spawn。以下代码将为每个节点生成1个进程。我可以通过扩展下面输入的维度来为每个节点生成更多进程。

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
...
  

以上内容已在MPICH版本:3.3a2的Ubuntu-bionic上进行了测试。

我的示例基于以下page。如果我找到更优雅的方式,我将重新发布。