1、在Ubuntu下安装mpich
在装之前,请确保以下软件都已经安装
$ gcc --version
$ g++ --version
$ python --version
如果缺少相应的软件,先安装。
安装好以后,即可进入用以下命令安装mpich
$ sudo apt-get install mpich
等待安装完成后,测试安装结果
$ which mpicc
$ which mpiexec
到这里,单机下的已经安装完毕,如果想实现真正多机运行,可按后面的步骤继续配置。
2、配置多环运行环境
这里假设有两台处于同一网络的主机master和slave
1、安装ssh
sudo apt-get install ssh
2、修改各自的主机名称
sudo vim /etc/hostname
在打开的文件中分别输入主机名保存即可,我设置的两台主机名称分别为:master和slave。设置完后重启机器。
3、分别配置两台机器的hosts文件
到这里需要确定主机的IP地址,如果主机采用dhcp方式,则每次启动时Ip地址可能会改变,如果采用静态IP的方式,则可以固定主机IP地址。在配置好hosts文件以后,如果重启主机以后IP地址发生改变,则需要重新修改hosts文件。这里采用设置静态IP的方式,设置方式参考:
两台主机的IP地址为:
master:192.168.0.100
slave : 192.168.0.101
修改两台主机的hosts文件
sudo vim /etc/hosts
修改文件内容为:
192.168.0.100 master
192.168.0.101 slave
两台主机的hosts文件相同
4、设置两台主机root的密码,接下来会用到
passwd root
5、设置ssh允许root登录
$ sudo vim /etc/ssh/sshd_config
找到PermitRootLogin no一行,改为PermitRootLogin yes
重启 openssh server
$ sudo service ssh restart
6、配置ssh使两台机器可以无需密码互相访问
在master上(slave同理)通过ssh-keygen指令生产公钥和私钥:
ssh-keygen -t rsa
在输入过程中需要输入参数,一直按回车即可。
结束后,cd到 ~/.ssh目录,ls一下即可看到产生的公钥(id_rsa.pub)和私钥(id_rsa):
cd ~/.ssh
ls
看到有id_rsa 和 id_rsa.pub文件
接下来通过两台机器的公钥(id_rsa.pub)来制作授权文件(authorized_keys)。
将slave的公钥传送到master中(并重命名为rsa_from_slave.pub),来制作授权文件。
在slave的终端输入:
scp ~/.ssh/id_rsa.pub master:~/.ssh/rsa_from_slave.pub
在传输期间需要输入master的密码,输入之前设置好的密码即可。
传输完成后,在master的~/.ssh/id_rsa.pub目录下ls一下即可看到传入的文件rsa_from_slave.pub。
将master的公钥另复制一份并且重命名为authorized_keys,在master的~/.ssh/目录下输入:
cp ~/.ssh/id_rsa.pub authorized_keys
将rsa_from_slave.pub添加到authorized_keys从而完成authorized_keys的制作
cat ~/.ssh/rsa_from_slave.pub >> authorized_keys
然后将在master上制作好的authorized_keys发送一份给slaves
scp ~/.ssh/authorized_keys slave:~/.ssh/
最后,为了要让两台机器之间无密码访问,需要设置公钥、私钥和授权文件的权限(两台机器都要设置)
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pubpub
权限设置完毕后,两台机器就可以不需密码互相访问了,在master上输入指令:
ssh slave
可以看到,master不需输入密码就能访问到slave。通过exit指令返回到master。
至此,MPICH的安装工作以及多机环境配置工作全部完成,接下来就可以多机之间运行MPI程序了。
3、多机之间运行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中输入一下内容并保存:
master:2
slave: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 master
Process 5 of 8 is on master
Process 2 of 8 is on slave
Process 0 of 8 is on master
Process 3 of 8 is on slave
Process 6 of 8 is on slave
Process 7 of 8 is on master
Process 1 of 8 is on slave
表示运行成功。