如何在MPICH中使用MPI_Info_set和MPI_Comm_spawn

问题描述 投票:1回答:2

我需要在群集上使用MPI spawn。为此我明白我需要使用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);

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

mpi cluster-computing spawn mpich
2个回答
1
投票

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

对于MPICH尝试其中一个:

  • host - 适合我,
  • hosts - 应该工作,但是,它似乎在我当前使用的版本中被破坏,并且MPI产生作为参数值传递的第一个节点的所有进程;如果它也发生在你的情况下,我建议使用MPI_Comm_spawn_multiple为每个进程手动分配主机。

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


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

以上在Ubuntu-bionic上用MPICH版本:3.3a2进行了测试。

我的例子基于以下page。如果我找到一种更优雅的方式,我会重新发布。

© www.soinside.com 2019 - 2024. All rights reserved.