如何将MPI\u信息集与MPICH中的MPI\u Comm\u spawn一起使用
我需要在集群上使用MPI spawn。为此,我需要使用MPI_Info_set来指定将运行派生进程的节点。我尝试了如何将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\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测试的
我的示例基于以下内容。如果我找到一个更优雅的方式,我会重新发布