ubuntu下MPICH的安装以及多机环境运行

学习MPI有一段时间了,下面我根据自己的MPI使用经验介绍一下mpich的安装多机环境的搭建与配置,以及MPI程序如何在多机之间运行。为了方便介绍,我们在两台开发板(PC机亦可)上安装mpich并且在这两台板子之间完成MPI程序的多机(也就是2)运行。

一、安装mpich之前的一些准备工作(如果你的机器为PC机,可以直接跳到第二步)

我用到的机器为开发板DE1-SOC(其他板子同理),支持SD卡槽,其操作系统可以从SD卡载入。所以准备工作就是将ubuntu 系统烧到SD卡(16G)上,然后从SD卡启动系统。 烧制系统的软件用到Win32DiskImager(在windows环境下烧写),软件下载址:

http://download.csdn.net/detail/u012304016/9620892


其使用方法很简单,将SD卡通过读卡器插入PC机,将下载的包解压后运行Win32DiskImager.exe,选择要烧写的ubuntu镜 像,点击write即可。

ubuntu镜像(ubuntu.img)下载地址:http://pan.baidu.com/s/1miEqOXy

烧写完成后要对SD卡的分区进行调整,因为默认的分区中许多空闲空间用不了。这里要用到另外一台安装有ubuntu系统的 PC机,在该PC机上安装gparted软件(分区软件)

在ubuntu终端输入:

sudo apt-get install gparted 

来安装gparted(此时需要联网,如果PC机也不能联网,请看步骤二的mentohust安装)。安装完成后输入指令:

sudo gparted 

运行软件,将SD卡通过读卡器插入PC机。软件使用方法很简单,通过简单的拖动(第3个分区)将未分配的区域利用上即可。分区调整完成后,将SD卡 入开发板启动操作系统就可以进行接下来的安装了。


二、安装mentohust使机器联网(如果机器能联网,可直接跳到第三步)

因为在安装mpi之前需要用apt-get在线安装许多编译器,所以我们需要先在开发板(或者说SD卡)上安装mentohust,使其能够联网。

mentohust源码安装包下载地址: http://download.csdn.net/detail/u012304016/9620869

源码安装包下载完成后,将其拷贝到/home/mpi_install/目录下(这是我为了安装mpi自己建的目录,当然也可以用其他目录)。

运行指令cd到该目录底下:
cd /home/mpi_install/

解压安装包:

tar -zxvf ./mentohust-0.3.01.tar.gz

解压完成后,进入mentohust-0.3.01根目录下:

cd mentohust-0.3.01

输入命令配置环境:

./configure
注:如果配置过程出现错误,则通过chmod 777 ./configure指令给configure文件执行权限即可。


编译和安装:

make
make install

安装完成后,用mentohust联网:
	第一次用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


在安装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


安装包下载完成后,将其拷贝到 /home/mpi_install/ 目录下(这是我为了安装mpi自己建的目录,当然可以用其他目录)。

运行指令cd到该目录底下:
cd /home/mpi_install/

解压安装包:

tar -zxvf ./mpich-3.2.tar.gz

解压完成后,进入mpich-3.2.tar根目录下:

cd mpich-3.2

接下来的安装过程根据shell的版本而异,首先检查shell版本:

cat /etc/shells

(1)如果显示为:/bin/sh 和 /bin/bash,则配置、编译和安装命令分别为:

配置:
./configure 2>&1 | tee c.txt
编译
make 2>&1 | tee m.txt

安装:

make install |& tee mi.txt

(2)如果显示为:/bin/csh 和 /bin/tcsh,则配置、编译和安装命令分别为:

配置:
./configure |& tee c.txt

编译:
make |& tee m.txt

安装:

make install |& tee mi.txt

注:配置和编译的过程中需要很长时间,请耐心等待 *^_^*


安装结束后,用which mpiccwhich mpiexec检查安装是否成功,如果有这两个可执行程序的路径显示,则表示安装成功。

四、安装ssh并且配置多机运行环境


安装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-pc1hang-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程序了。


注:这里只讲到两台机器间的环境配置,多台机器之间的原理类似。


五、多机之间运行MPI程序


首先,在home根目录(也可以是其他目录)下新建一个文件:mpi_config_file。

mpi_config_file是在运行MPI程序时参考的配置文件,它显式注明每台机器各有几个CPU核。

cd /home
touch mpi_config_file

接下来在每台机器上查看各自的CPU核数:

lscpu

编辑mpi_config_file:

sudo gedit mpi_config_file

因为我的两台板子的CPU核数均为2,所以在mpi_config_file中输入一下内容并保存:

hang-pc1:2
hang-pc2:2

接下来就可以找一个MPI程序在多机之间运行了 :-)
在我们之前解压的mpi-3.2文件夹下的examples目录下就有现成的可执行程序:cpi,我们运行它:

cd /home/mpi_install/mpich-3.2/examples
mpiexec -n 8 -f /home/mpi_config_file ./cpi


注: 参数-n 8表示改程序分将拆分为8个并行过程执行
参数-f /home/mpi_config_file 表示运行过程参考配置文件mpi_config_file

屏幕上显示运行结果:

Process 4 of 8 is on hang-pc1
Process 5 of 8 is on hang-pc1
Process 2 of 8 is on hang-pc2
Process 0 of 8 is on hang-pc1
Process 3 of 8 is on hang-pc2
Process 6 of 8 is on hang-pc2
Process 7 of 8 is on hang-pc1
Process 1 of 8 is on hang-pc2


表示运行成功。

注:MPI多机运行一个程序,要求在每台机器的相同目录下有相同的可执行程序。


例如想要运行examples下的hellow.c文件,则需要在hang-pc1和hang-pc2上都对hello.c文件进行编译从而生成可执行文件。

即均需要cd到examples目录下执行:
mpicc hellow.c -o hellow

然后才能在主机(hang-pc1)上运行生成的可执行文件hellow:
mpiexec -n 8 -f /home/mpi_config_file ./hellow

















你可能感兴趣的:(ubuntu,mpi,ssh,mentohust,多机并行)