随笔-167  评论-8  文章-0  trackbacks-0
http://blog.csdn.net/ifresh/article/details/7095977 

注:本文是在查阅好多文章之后,融合自己实践而来的,在其中会说明查阅的文章,若有遗漏,敬请谅解。由于本人是刚接触UBUNTU和MPI不久,因此其中难免有错误与不足之处,这里仅做参考!

这里我只是以两台机子作为参考例子,一台装有UBUNTU11.10,另外一台是在虚拟机中安装同样版本的UBUNTU11.10,这里我也只是做一个测试,后面可能会迁移到集群中。用到的MPICH版本是mpich2-1.4.1p1。废话不多说,现在开始!


首先MPI的配置分为几个步骤,具体请参考:点击打开链接,这里我简要说明一下:

安装前的准备
安装MPICH步骤
设置环境变量
添加配置文件
配置SSH
测试
1.安装前的准备

首先肯定是需要安装GCC和G++编译器,这个直接apt-get就OK了,网上也有好多教程。


2.安装MPICH步骤

2.1  首先将下载的文件解压,下载的文件在当前用户目录里面的“下载”目录里面,我直接解压到当前目录:

[plain] view plaincopy
tar xvfz mpich2-1.4.1p1.tar.gz  
或者直接到文件所在目录,直接右键单击,选择“解压缩到此处”也可以。

2.2  标准的 configure, make, make install 步骤,这里我是安装官方文档配置的,可以查看解压后的README文档参考:

由于是bash,因此选择以下命令,prefix指示安装路径,USERNAME就是当前用户的用户名,由于这里我不用fortran,因此加上参数(--disable-f77 and --disable-fc),在此之前当然要建立安装MPICH的路径,也就是:

[plain] view plaincopy
mkdir mpich2-install  

接下来就是configure了:
[plain] view plaincopy
./configure --prefix=/home/<USERNAME>/mpich2-install --disable-f77 --disable-fc 2>&1 | tee c.txt  
而且在之前的安装过程中,我发现如果不禁止fortran,安装会出问题,会导致MPICH2安装不完全而出错,所以这里建议不用的选上。


接下来就是make了:

[plain] view plaincopy
make 2>&1 | tee m.txt  

下面就是make install了:
[plain] view plaincopy
make install 2>&1 | tee mi.txt  

这样经过漫长的等待,最后在mpich2-install中会生成以下文件:



至此,MPICH2安装完成。


3.设置环境变量

这里设置环境变量主要是将MPICH的安装目录加到系统环境变量中,这里我在/etc/profile中加入对应的路径:

用vim编辑器打开/etc/profile:

[plain] view plaincopy
sudo vim /etc/profile  

输入密码之后,将下面语句添加到最后一行:
[plain] view plaincopy
export PATH=/home/luo/mpich2-install/bin:$PATH  

保存强制退出。
最后可以用一下命令看看mpicc和mpiexec位置:

[plain] view plaincopy
which mpicc  
which mpiexec  

这里会显示mpicc和mpiexec的位置,也就是在MPICH的安装牡蛎中的bin文件夹中。
至此,环境变量设置完成。


4.添加配置文件

这里所说的配置文件主要是进程管理的配置文件,由于UBUNTU11.10的进程管理从mpd改为了hydra,因此导致我之前一直是无法配置成功,还在苦苦寻找mpd为何没有安装,这一点其实在官方给的文档中有说明,不过自己当时因为看到大片英文就头疼,所以并没有仔细看,导致浪费了好长时间,这个教训要吸取。

首先在/etc下面建立目录:

[plain] view plaincopy
sudo mkdir /etc/hydra  

用vim编辑器建立hosts文件:
[plain] view plaincopy
sudo vim /etc/hydra/hosts  
文件的结构如下:

# Some Comments
MainNode:8 # other comments
Node1:2
Node2:2

每行中由冒号(:)分隔的前半部分表示节点,可以使用节点名也可以使用IP地址,貌似不区分大小写;后半部分表示可用的CPU数量。注释用“#”前导。根据你的实际情况撰写hosts文件。这里我是将我自己的两台计算机名加入其中,可能在此之前需要设置/etc/hosts中IP与机器名的对应关系:
[plain] view plaincopy
192.168.1.105 luo-UBUNTU  
192.168.1.106 luo-VirtualBox  

上面就是我自己的/etc/hosts文件中加入的信息。
在/etc/hydra/hosts中加入:

[plain] view plaincopy
luo-UBUNTU:1  # 192.168.1.105  
luo-VirtualBox:1  #192.168.1.106  

然后我们需要告诉hydra hosts文件的位置,hydra通过环境变量进行配置,因此我们需要修改.bashrc文件:

[plain] view plaincopy
$ vim ~/.bashrc  


在其中加入如下行:

[plain] view plaincopy
export HYDRA_HOST_FILE=/etc/hydra/hosts  

至此设置完毕,这里参考了其他文章(点击打开链接)。
5.配置SSH

这里主要是要各个机器之间能无密码访问,主要用到的就是SSH,因此需要一些设置。

首先,我们需要导出各个节点的公钥和私钥:

[plain] view plaincopy
$ ssh-keygen -t rsa  

在运行过程中,会提示你输入这个输入那个,不用管那么多,直接回车就完了。等运行结束后,进入.ssh目录,你会看到公钥和私钥文件:
[plain] view plaincopy
$ cd ~/.ssh  
$ ls  
id_rsa   id_rsa.pub  
(可能还有其他乱七八糟的东西)

其中id_rsa就是私钥,id_rsa.pub就是公钥,现在我们需要把各个节点上的公钥都集中发送到一个节点上,来制作授权文件(authorized_keys):

$ scp id_rsa.pub User@MainNode:/path/to/yours/id_rsa.pub-X

其中有色字体需要你根据实际情况进行调整,这里我们讲所有的公钥发送到了MainNode,然后我们在MainNode上用这些公钥合成一个authorized_keys:
[plain] view plaincopy
$ cp ~/.ssh/id_rsa.pub authorized_keys  
$ cat /path/to/yours/id_rsa.pub-X >> authorized_keys  

其中第2条语句需要反复多次,讲所有的公钥都放入authorized_keys中,这样就做好了authorized_keys文件。然后我们分别把他拷到各个机器的.ssh目录中:
[plain] view plaincopy
$ cp authorized_keys ~/.ssh/  
$ scp authorized_keys User@SomeNode:/home/User/.ssh/  

如果你现在试一下ssh很可能发现他们仍旧不好用,别急,我的话还没有说完呢。这个东西对权限的要求很严格,所以我们需要更改一下必要的文件的权限(所有节点都要更改):
[plain] view plaincopy
$ chmod 755 ~  
$ chmod 755 ~/.ssh  
$ chmod 600 ~/.ssh/authorized_keys  
$ chmod 600 ~/.ssh/id_rsa  
$ chmod 644 ~/.ssh/id_rsa.pub  

至此,SSH配置就完成了。下面检验一下:
在一个主机上面SSH另一个主机:

[plain] view plaincopy
ssh luo-VirtualBox  

显示下面截图:


可以看到是无密码登录,首次登录的时候可能会需要密码,后面就不需要了。在另一个主机上面也是可以SSH连接成功的。


5.测试

将MPICH源代码中example目录下面的cpi拷贝至各个节点的相同目录,这里我放在当前目录下面的MpiWork目录下面,然后在主节点上面启动程序:

[plain] view plaincopy
mpiexec -np 2 ./MpiWork/cpi  

显示如下图:



可以看到不同的进程分别运行在不同的机器上。


至此MPICH2配置完成。

其中在SSH中参考了其他的文章(点击打开链接),而且我也没有这样配置,因为自己是两台,网上这个配置有好多文章。还有一点是,不知到其他机器上面是不是需要配置MPICH2,因为我设置hydra的时候,并没有在其他机器上面设置,只在主节点上面设置了,这个后面再研究。
posted on 2012-02-17 15:41 老马驿站 阅读(991) 评论(0)  编辑 收藏 引用 所属分类: c++linux