Open MPI 的配置和使用

    最近想要投IEEE Cloud 这个会议,因此需要做一些实验。为了比较节点之间的通信性能,采用了MPI benchmark来作为基准的测试程序

实验采用的是NASA的NPB(NASA Parallel Benchmark)。实验平台是Plane-Lab。由于涉及到了MPI程序,因此要用到MPI类库。之前一直用的是MPICH,但是Planet-Lab的安装源没有MPICH只有Open MPI只好该有后者了!


由于是刚接触Open MPI, 因此在整个实验中碰到了一些问题,最后终于解决了。现在把这些问题及解决方列出来:

 

1.安装Open MPI

 

由于,Planet-Lab源上有,所以直接yum就好了。如果没有可以手动下载源代码编译,不过要手动解决一来问题。。。

 

sudo yum install openmpi

 

2.MPI程序的运行

 

如果是在单一节点上:

mpirun -np n exe

n 是进程个数,exe是执行文件的名字。

如果是多个节点:

mpirun -hostfile hostfile -np n exe

hostfile 是参与计算的节点列表。其格式如下:

ip1

ip2

ip3

上面的命令,则本地节点也会参与运算,不推荐这样(本地节点复制调度最好),可以采用如下方法:

mpirun -nolocal -hostfile hostfile -np n exe

则可以让本地节点不参与计算。


一般来说mpi程序都是部署在集群上运行的,但是我的节点是都是部署在internet环境下,因此有很多意想不到的错误发生:

ip1[0,1,0]:connect() failed with errno=110

ip2[0,1,1]: connect() failed with errno=110

 

具体的错误原因可以用查看:

$: perl -e 'die$!=110

从错误来看是超时错误,然后网上搜索下,又不会少人都是这个问题,他们的程序都是运行在集群上。

从搜索结果总结出,问题的原因是:节点具有多个网卡、多个节点共享一个ip(局域网很常见)。

解决这个问题可以通过设置MCA参数。通过查阅MCA文档终于找到解决的办法:

--mca btl_tcp_if_include eth0 

改参数定义了强制使用第一块网卡来通信!最后整个命令如下:

mpirun -hostfile hostfile --mca btl_tcp_if_include eth0 -np n exe

另外还有不少错误事mca参数设置造成的,可以通过mca参数更改来搞定。如果不想每次运行都输入mca参数。可以在

$home/.openmpi/mca-params.conf 中直接定义:

oob_tcp_include=eth0
btl_tcp_if_include=eth0

 

关于mca详细的定义可以参考:

http://docs.sun.com/source/819-7480-11/mca-params.html#50634789_63357

你可能感兴趣的:(Open MPI 的配置和使用)