写在前面:
使用VMware新建了两个Ubuntn(20.04LTS),现在要安装MPI,并使用MPD作为进程管理器。
参考文章:
- Ubuntu虚拟机实现两结点SSH免密码通信 https://blog.csdn.net/u012842255/article/details/72677144
利用VMwa新建两台Ubuntu虚拟机后(注意,1.新建时选择桥接模式 2.两台Ubuntu的用户名要一致),进入虚拟机
为了正常编译MPI代码,需要安装C, C++与Fortran的编译环境。
Ubuntu缺省情况下,并没有提供这些语言的编译环境,因此需要手动安装。如果单独安装这些编译环境非常麻烦。幸运的是,build-essential工具提供了许多与编译相关的软件包,包括gcc/g++/gfortran等编译器、libc6-dev等必要的库与其他工具。于是,我们只需要通过包管理器安装build-essential即可。
apt-get命令的 -y 选项默认安装过程中同意所有的默认选择。
sudo apt-get install -y build-essential
下载与安装完成后,可键入下面的命令观察gcc版本信息。
gcc -v
实现功能:
这里创建了两台ubuntu VM 20.04 虚拟机进行操作。
node1-ubuntu: 192.168.3.126 (注:这个将来作为server端)
node2-ubuntu: 192.168.3.131
编辑hostname文件,设置主机名。这里为了识别方便,给两个服务器结点分别设为node1-ubuntu, node2-ubuntu。
$ sudo gedit /etc/hostname
重启虚拟机(或者当前用户logout再login),便可以看到服务器的主机名为node1-ubuntu和node2-ubuntu。
编辑hosts文件并设置hosts与IP的映射关系:
udo gedit /etc/hosts
这里主要是要各个机器之间能无密码访问,主要用到的就是SSH,因此需要一些设置。
首先,我们需要导出各个节点的公钥和私钥:
$ ssh-keygen -t rsa
在运行过程中,会提示你输入这个输入那个,不用管那么多,直接回车就完了。等运行结束后,进入.ssh目录,你会看到公钥和私钥文件;
$ cd ~/.ssh
$ ls
id_rsa id_rsa.pub
其中id_rsa就是私钥,id_rsa.pub就是公钥,现在我们需要把各个节点上的公钥都集中发送到一个节点上,来制作授权文件(authorized_keys).
注意:在两台机器必须安装ssh(sudo apt-get install ssh openssh-server)而且必须设置root密码(sudo passwd root),才能远程登录
$ scp ~/.ssh/id_rsa.pub node1-ubuntu:~/.ssh/1.pub
在将node2-ubuntu拷贝到node1-ubuntu后,在node1-ubuntu进行如下处理:
$ cp ~/.ssh/id_rsa.pub authorized_keys
$ cat ~/.ssh/1.pub >> authorized_keys
在node1-ubuntu上制作好的authorized_keys拷贝到node2-ubuntu上:(node1-ubuntu使用scp)
$ scp ~/.ssh/authorized_keys node2-ubuntu:~/.ssh/
要想让这两台机器无密码登录,所以我们需要更改一下必要的文件的权限(所有节点都要更改):其实只要保证authorized_keys的文件权限为600或者644
$ chmod 755 ~
$ chmod 755 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/id_rsa
$ chmod 644 ~/.ssh/id_rsa.pub
至此,SSH配置就完成了。下面检验一下:
在一个主机上面SSH另一个主机:
软件包中包含了mpich,可以直接通过apt-get下载安装。
sudo apt-get install -y mpich
观察mpicc版本信息
mpicc -v
MPI进程的创建、启动和管理需借助进程管理器(PM)来完成,直观说,PM是MPI环境和操作系统的接口
最新版的mpich简化了运行方式,不再提供mpd开头的命令,只需要一个mpiexec即可启动mpi运行环境,方便了mpi编程 - 来自https://www.cnblogs.com/snake-hand/p/3148152.html
切换到用户家目录
cd ~
利用vim新建一份代码文件
vim mpi.c
vim进入后默认为控制模式。需要按字母i
进入编辑模式,写入MPI程序代码。
#include
#include
int main(int argc, char **argv)
{
MPI_Init(&argc, &argv);
printf("Hello World!\n");
MPI_Finalize();
return 0;
}
按esc
键进入控制模式,输入:wq
保存并退出文件。
利用 mpicc 命令编译MPI代码文件。mpicc 是编译并链接用C编写的MPI程序的命令。
mpicc mpi.c -o mpi.o
利用 mpirun 命令运行程序。其中 -np 选项指定处理器数目。mpirun 是MPI程序的启动脚本,它可以简化作业的启动程序,并且尽可能把不同特征屏蔽掉,提供给用户一个通用的MPI并行机的概念。
mpirun -np 8 ./mpi.o