远程节点上的mpi_comm_spawn

时间:2010-11-23 22:33:59

标签: mpi openmpi

如何使用MPI_Comm_spawn在远程节点上启动工作进程?

使用OpenMPI 1.4.3,我尝试了这段代码:

MPI_Info info;
MPI_Info_create(&info);
MPI_Info_set(info, "host", "node2");
MPI_Comm intercom;
MPI_Comm_spawn("worker",
        MPI_ARGV_NULL,
        nprocs,
        info,
        0,
        MPI_COMM_SELF,
        &intercom,
        MPI_ERRCODES_IGNORE);

但是这个错误消息失败了:

--------------------------------------------------------------------------
There are no allocated resources for the application 
  worker
that match the requested mapping:


Verify that you have mapped the allocated resources properly using the 
--host or --hostfile specification.
--------------------------------------------------------------------------
--------------------------------------------------------------------------
A daemon (pid unknown) died unexpectedly on signal 1  while attempting to
launch so we are aborting.

There may be more information reported by the environment (see above).

This may be because the daemon was unable to find all the needed shared
libraries on the remote node. You may set your LD_LIBRARY_PATH to have the
location of the shared libraries on the remote nodes and this will
automatically be forwarded to the remote nodes.
--------------------------------------------------------------------------

如果我用本地机器的名称替换“node2”,那么它可以正常工作。如果我ssh到node2并在那里运行相同的东西(在信息字典中使用“node2”),那么它也可以正常工作。

我不想用mpirun启动父进程,所以我只想找到一种在远程节点上动态生成进程的方法。这可能吗?

1 个答案:

答案 0 :(得分:2)

  

我不想启动父母   与mpirun的过程,所以我只是   寻找动态产卵的方法   远程节点上的进程。这是   可能的?

我不确定你为什么不想用mpirun启动它?一旦你点击MPI_Init(),你就会隐含地启动整个MPI机制,这样你只需要传递它而不是依赖默认值。

这里的问题很简单,当MPI库启动时(在MPI_Init())它没有看到任何其他主机可用,因为你还没有给它任何带有--host或--hostfile选项的的mpirun。它不会只是在你说的其他地方启动进程(实际上,spawn不需要Info主机,所以一般来说它甚至不知道去哪里),所以它失败了。

所以你需要这样做 mpirun --host myhost,host2 -np 1 ./parentjob 或者,更一般地说,提供一个主机文件,最好有许多可用的插槽

myhost slots=1
host2 slots=8
host3 slots=8

以这种方式启动作业,mpirun --hostfile mpihosts.txt -np 1 ./parentjob这是一个功能,而不是错误;现在,MPI的工作是找出工人去哪里,如果你没有在信息中明确指定主机,它会尝试把它放在最未充分利用的地方。这也意味着您无需重新编译即可更改要生成的主机。