这里我只是以两台机子作为参考例子,一台装有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
老马驿站 阅读(1000)
评论(0) 编辑 收藏 引用 所属分类:
c++ 、
linux