学习MPI有一段时间了,下面我根据自己的MPI使用经验介绍一下mpich的安装,多机环境的搭建与配置,以及MPI程序如何在多机之间运行。为了方便介绍,我们在两台开发板(PC机亦可)上安装mpich并且在这两台板子之间完成MPI程序的多机(也就是2)运行。
第一次用mentohust联网时输入指令:
sudo mentohust -uUsername -pPasswd -a1 -b2 -d2 -v0.31 -w
例如用户名为20150012,密码为123456,则输入:
sudo mentohust -u20150012 -p123456 -a1 -b2 -d2 -v0.31 -w
之后再使用mentohust联网时只用输入sudo mentohust即可,断开连接用mentohust -k命令。
在安装mpich之前,为了避免在安装中出错,需要安装gcc、g++以及gfortran三个编译器。
首先更新apt-get的安装版本,从而保证安装的资源最新:
sudo apt-get update
分别安装gcc、g++以及gfortran:
sudo apt-get install gcc
sudo apt-get install g++
sudo apt-get install gfortran
接下来正式开始mpich的安装,mpich源码安装包的下载地址:
http://download.csdn.net/detail/u012304016/9620878
安装ssh:
sudo apt-get install ssh
安装好ssh之后,就可以将此时的镜像复制到另一张SD卡(同为16G)。如果你用PC机互连,可以直接跳到步骤五。
这里仍然要用到Win32DiskImger工具。首先将开发板(开发板1)关机,将SD卡1取出,通过读卡器插入电脑。
在电脑上(windows环境)新建一个空的ubuntu_mpi.img文件(先新建文件ubuntu_mpi.txt,然后将后缀改为img即可)。
打开Win32DiskImger,文件选为新建的ubuntu_mpi.img,点击read。read完成后SD卡1的内容就保存到了ubuntu_mpi.img中。
再将其(ubuntu_mpi.img)烧写到另外一张SD卡(SD卡2)。然后将新烧写的SD卡2插入到另外一台开发板(开发板2)上。
将两台开发板通过网线连接在同一个局域网内。
接下来正式配置多机运行环境,首先修改两台开发板各自的主机名称:
sudo gedit /etc/hostname
在打开的文件中分别输入主机名保存即可,我设置的两台主机名称分别为:hang-pc1 和hang-pc2。设置完侯重启机器。
分别配置两台机器的hosts文件,在此之前先通过ip addr show命令查看两台机器eth0的IP地址,我的IP地址为:
hang-pc1 : 10.13.35.167
hang-pc2 : 10.13.35.203
然后修改hosts文件:
sudo gedit /etc/hosts
根据以上查得的IP地址,在两台机器的hosts文件中均输入以下内容并保存:
10.13.35.167 hang-pc1
10.13.35.203 hang-pc2
接下来通过配置ssh使两台机器可以无需密码互相访问。
在hang-pc1上(hang-pc2同理)通过ssh-keygen指令生产公钥和私钥:
ssh-keygen -t rsa
注:再输入过程中需要输入参数,一直按回车即可。
结束后,cd到 ~/.ssh目录,ls一下即可看到产生的公钥(id_rsa.pub)和私钥(id_rsa):
cd ~/.ssh
ls
接下来通过两台机器的公钥(id_rsa.pub)来制作授权文件(authorized_keys)。
在此之前先设置两台机器root用户的密码(之后会用到):
passwd root
连续输入两次要设置的密码即可设置新的密码。
接下来将hang-pc2的公钥传送到hang-pc1中(并重命名为rsa_from_pc2.pub),来制作授权文件。在hang-pc2的终端输入:
scp ~/.ssh/id_rsa.pub hang-pc1:~/.ssh/rsa_from_pc2.pub
注:在传输期间需要输入hang-pc1的密码,输入之前设置好的密码即可。
传输完成后,在hang-pc1的~/.ssh/id_rsa.pub目录下ls一下即可看到传入的文件rsa_from_pc2.pub。
将hang-pc1的公钥另复制一份并且重命名为authorized_keys,在hang-pc1的~/.ssh/目录下输入:
cp ~/.ssh/id_rsa.pub authorized_keys
将rsa_from_pc2.pub添加到authorized_keys从而完成authorized_keys的制作:
cat ~/.ssh/rsa_from_pc2.pub >> authorized_keys
然后将在hang-pc1上制作好的authorized_keys发送一份给hang-pc2:
scp ~/.ssh/authorized_keys hang-pc2:~/.ssh/
用ssh_add命令将私钥也添加进来(hang-pc1和hang-pc2均要添加):
ssh-add ~/.ssh/id_rsa
最后,为了要让两台机器之间无密码访问,需要设置公钥、私钥和授权文件的权限(两台机器都要设置):
chmod 755 ~
chmod 755 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub
权限设置完毕后,两台机器就可以不需密码互相访问了,在hang-pc1上输入指令:
ssh hang-pc2
可以看到,hang-pc1不需输入密码就能访问到hang-pc2。通过exit指令返回到hang-pc1。
至此,MPICH的安装工作以及多机环境配置工作全部完成,接下来就可以多机之间运行MPI程序了。
注:这里只讲到两台机器间的环境配置,多台机器之间的原理类似。