注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

notes

@-@

 
 
 

日志

 
 
 
 

mpi的master node的问题  

2009-06-04 21:07:39|  分类: MPI |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Issue

I have a cluster, which has for example 3 nodes, where the mpd.hosts file contains:

$ cat mpd.hosts
node2
node3

The master node, which is node1 is not listed in the mpd.hosts file. The shell commands:

$ mpdboot -r ssh -n 2 -f ~/mpd.hosts
$ mpiexec -n 4 /bin/hostname
which are issued from node1 reveal the following:
node1
node1
node2
node2

Solution

By design, the master node (i.e., the node where the mpiexec command is launched from) needs to have a daemon running. If you want to run your application on node2 and node3, you can use the -host options with the mpiexec command as follows:

$ mpdboot -r ssh -n 3 -f ~/mpd.hosts
$ mpiexec -n 2 -host node2 /bin/hostname : -n 2 -host node3 /bin/hostname
Or simply to use the -nolocal option for mpiexec as follows:
$ mpdboot -r ssh -n 3 -f ~/mpd.hosts
$ mpiexec -nolocal -n 4 /bin/hostname

This will run the hostname command on nodes node2 and node3 only, even though there are three mpd daemons total.


想在指定的若干个节点上运行这个程序,比如host1,host2,host3等,将这3个节点名称写在一个文件hostfile里,
以下是运行过程:
mpd &
mpicc cpi.c   //此时生成一个名为a.out的可执行文件
mpiexec -machinefile hostfile -n 3 ./a.out
就在此时出现了问题:
mpiexec: unable to start all procs; may have invalid machine names
    remaining specified hosts:
        IP地址 (host2)
 IP地址 (host3)

原因是这几个节点上的mpd连接不上从而无法通信,这个可能是ssh或是rsh的问题造成的。

但是这个问题可以通过手动执行以下命令来解决:(假设是在host1上编译这个并行程序,就在host1上执行以下命令)

mpd &
mpdtrace -l //此处列出主机名和端口号,形式为:<hostname>_<port>

然后登陆到文件中的其他每个节点执行以下命令:(此处为host2和host3)

mpd -h <hostname> -p <port> &   //这里hostname和port是host1的hostname和port。

然后在host1上执行mpdtrace就可以查看到执行mpd的主机名了,从而节点间也就可以正常痛心了。

再执行mpiexec -machinefile hostfile -n 3 ./a.out时,就可以看到所预期的结果了。 



method 1:

mpd.hosts文件每列为 hostname:ncpus

mpdexec -1 .......去掉第一个host,也就是local.

method 2:

Let's say you have 4 machines: host, node1, node2, node3. You run mpiexec from host and want the jobs to run only the 3 nodes. Here's what you do: >>> * From host, start an MPD ring on all 4 machines using mpdboot. >>> >>> * Create a machine file containing >>> node1 >>> node2 >>> node3 >>> node1 >>> node2 >>> node3 >>> (repeated as many times as needed to cover the maximum >> number of processes >>> you want to run). >>> >>> * Then run the job from host as >>> mpiexec -machinefile FILE -n NPROCS a.out >>> >>> NPROCS has to be <= the number of machines listed in the >> machinefile.

  评论这张
 
阅读(659)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018