1818IP-服务器技术教程,云服务器评测推荐,服务器系统排错处理,环境搭建,攻击防护等

当前位置:首页 - 运维 - 正文

君子好学,自强不息!

基于Intel的并行计算MPI环境搭建

2022-11-05 | 运维 | 1818ip | 649°c
A+ A-

MPI是一个库,而不是一门语言。许多人认为,MPI就是一种并行语言,这是不准确的。但是,按照并行语言的分类,可以把FORTRAN+MPI或C+MPI看作是一种在原来串行语言基础之上扩展后得到的,并行语言MPI库可以被FORTRAN77/C/Fortran90/C++调用,从语法上说,它遵守所有对库函数/过程的调用规则,和一般的函数/过程没有什么区别。

MPI已在IBM PC机上、MS Windows上、所有主要的Unix工作站上和所有主流的并行机上得到实现。使用MPI作消息传递的C或Fortran并行程序可不加改变地运行在IBM PC、MS Windows、Unix工作站、以及各种并行机上。

高性能并行计算计算机技术由于具有巨大的数值计算和数据处理能力,在国内外受到高度重视,他在科学研究、工程技术以及军事等方面的应用,已经取得巨大的成就。并行计算就是通过把一个大的计算问题分解成许多彼此独立且有相关的子问题,然后把他们散列到各个节点机上并行执行从而最终解决问题的一种方法。

一、安装环境

CentOS 6.4 最小化图形安装,保证每个节点的sshd服务能正常启动,确保防火墙与selinux已经关闭,所需软件: Intel_ Fortran,Intel_C++,Intel_ MPI

二、设置通过主机名无密码登录

1、通过主机名访问

为每个节点分配IP地址,IP地址***连续分配,配置/etc/hosts文件,实现IP地址和机器的对应解析。可以在所有机器上使用同样的/etc/hosts 文件,它包含如下形式的内容:

10.12.190.183dell
10.12.190.187lenovo
……

2、计算节点之间的无密码访问

假设 A(110.12.190.183)为客户机器,B(10.12.190.187)为目标机,加密方式选 rsa|dsa均可以,默认rsa。

#ssh-keygen-trsa#使用rsa加密,默认就是rsa加密

显示信息如下,遇到系统询问直接回车即可。

Generatingpublic/privatersakeypair.
Enterfileinwhichtosavethekey(/root/.ssh/id_rsa):
Enterpassphrase(emptyfornopassphrase):
Entersamepassphraseagain:
Youridentificationhasbeensavedin/root/.ssh/id_rsa.
Yourpublickeyhasbeensavedin/root/.ssh/id_rsa.pub.
Thekeyfingerprintis:
b3:8e:87:44:71:67:81:06:d2:51:01:a4:f8:74:78:fdroot@kvm.local
Thekey'srandomartimageis:
+--[RSA2048]----+
|.o==oo..|
|.+o.+o|
|.+o+.o|
|oo..|
|..SE|
|.o|
|...|
|.o.|
|...|
+-----------------+

将会生成密钥文件和私钥文件 id_rsa,id_rsa.pub。

将A的~/.ssh/ id_rsa.pub 文件复制到B机器的 .ssh 目录, 并 cat id_rsa.pub >> ~/.ssh/authorized_keys,同样方法,把B的~/.ssh/ id_rsa.pub也复制到A机器上。

设置authorized_keys权限:

#chmod600authorized_keys

设置.ssh目录权限:

#chmod700-R.ssh

如果使用ssh-copy-id命令,可以更方便把本地主机的公钥复制到远程主机的authorized_keys文件上,ssh-copy-id 也会给远程主机的用户主目录(home)和~/.ssh, 和~/.ssh/authorized_keys设置合适的权限。

#ssh-copy-id–i~/.ssh/id_rsa.pub10.12.190.187

完成以上操作之后,用户从本地机器到远程机器就不需要用密码了,文件和目录的权限千万别设置成chmod 777.这个权限太大了,不安全,数字签名也不支持。

也可以用一台机器生成ssh-keygen,将.ssh目录连同id_rsa,authorized_keys一起复制到每个节点上去。检查是否可以直接(不需要密码,询问时输入yes回车)登录其他节点:

sshnode1
sshnode2
sshnode3
sshnode4

如能任意两节点之间不需要密码登录其他节点则表明配置成功。

三、NFS文件系统的配置

方法示例如下(假设NFS 服务器IP 为10.12.190.183,配置需在root用户下完成):

服务器端配置方法(下面的配置只在主节点进行):

1. /etc/exports 文件配置

在文件/etc/exports 中增加以下几行:

/home/cluster10.12.190.183(rw,sync,no_root_squash)
/home/cluster10.12.190.185(rw,sync,no_root_squash)
/home/cluster10.12.190.187(rw,sync,no_root_squash)

这几行文字表明NFS 服务器向IP 地址为10.12.190.183,10.12.190.185,10.12.190.185 的三个节点共享其/home/cluster目录,并使这些节点具有可读写权限。如有更多的节点可按此方法填写。

接着执行如下命令,启动端口映射:

#/etc/rc.d/init.d/rpcbindstart(注:在***内核中NFS守护进程改为rpcbind,如是旧内核启动NFS守护进程的命令是serviceportmapstart)

***执行如下命令启动NFS 服务,此时NFS 会激活守护进程,然后就开始监听 Client 端的请求:

#/etc/rc.d/init.d/nfsstart
#chkconfignfson

也可以重新启动Linux 服务器,自动启动NFS 服务。

2、客户端配置方法(需要在所有子节点做同样的配置)

建立与服务器相同的共享目录用于共享服务器文件:

mkdir/usr/cluster

查看服务器已有的共享目录(这步可省略)

showmount-e10.12.190.183

通过这条命令我们可以查看IP地址为10.12.190.183的服务器可以共享的目录情况。

挂载共享目录:

mount-tnfs10.12.190.183:/home/cluster/home/cluster

这一命令将 NFS 服务器10.12.190.183上的共享目录挂载到本地/home/cluster 目录下。我们也可在所有子节点的/etc/fstab 文件中输入以下的代码,使文件系统在启动时实现自动挂载NFS:

10.12.190.183:/home/cluster/home/clusternfsdefaults00

至此我们已可以实现对 NFS 共享目录的本地访问,所有子节点的/home/cluster 文件夹都共享了NFS 服务器的同名文件夹的内容,我们可以像访问本地文件一样访问共享文件。用户存放并行程序的文件夹都可以实现NFS 共享,从而避免了每次向各节点发送程序副本。

四、安装Intel_C++

#tarxvzfl_ccompxe_2013.1.117.tgz
#cdcomposer_xe_2013.1.117
#./install.sh

设置环境变量:

#vi/etc/profile

添加一行source /opt/intel/composer_xe_2013.1.117/bin/iccvars.sh intel64

测试环境变量设置:

#whichicc

如果能看到/opt/intel/composer_xe_2013.1.117/bin/intel64/icc,那么就安装设置成功了。

五、安装Intel_Fortran编译器

#tarfxvzl_fcompxe_2013.1.117.tgz
#cdl_fcompxe_2013.1.117
#./install.sh

设置环境变量:

#vi/etc/profile

添加一行source /opt/intel/composer_xe_2013.1.117/bin/compilervars.sh intel64。

测试环境变量设置:

#whichifort

如果能看到/opt/intel/composer_xe_2013.1.117/bin/intel64/ifort,那么就安装设置成功了。

六、配置安装Intel_MPI

1、安装与设置

安装前一定要将Fortran编译器安装好,c++放到***没有影响,其它版本MPI就需要先将前2个软件安装好,设置好环境变量,***在安装MPI程序,如开源的mpich。

#tarfxvzl_mpi_p_4.1.3.045.tgz
#cdl_mpi_p_4.1.3.045
#./install.sh

设置环境变量:

#vi/etc/profile

添加一行source /opt/intel/impi/4.1.3.045/bin64/mpivars.sh。

测试环境变量设置:

#whichmpd
#whichmpicc
#whichmpiexec
#whichmpirun

如果能看到所有命令的路径说明,安装设置成功了。

修改/etc/mpd.conf文件,内容为secretword=myword 或MPD_SECRETWORD=myword:

vi/etc/mpd.conf

设置文件读取权限为只有自己能读写:

chmod600/etc/mpd.conf

非root用户在家目录创建内容相同的.mpd.conf,每个节点都要添加:

创建主机名称集合文件/root/mpd.hosts:

#vimpd.hosts

文件内容如下:

dell#主机名1,(主机名:数字可以指定节点开启的进程数dell:2)
lenovo#主机名2

在协处理器上***运行MPI应用之前,请将MPI库复制到该系统的所有节点以下目录。

#scp/opt/intel/impi/4.1.3.045/mic/bin/*dell:/bin/
mpiexec100%1061KB1.0MB/s00:00
pmi_proxy100%871KB871.4KB/s00:00
……
#scp/opt/intel/impi/4.1.3.045/mic/lib/*dell:/lib64/
libmpi.so.4.1100%4391KB4.3MB/s00:00
libmpigf.so.4.1100%321KB320.8KB/s00:00
libmpigc4.so.4.1100%175KB175.2KB/s00:00
……
#scp/opt/intel/composer_xe_2013_sp1.0.080/compiler/lib/mic/*dell:/lib64/
libimf.so100%2516KB2.5MB/s00:01
libsvml.so100%4985KB4.9MB/s00:01
libintlc.so.5100%128KB128.1KB/s00:00
……

以上是intel官方文档的操作步骤,个人感觉比较麻烦,没有采用这种方法。

http://software.intel.com/en-us/articles/using-the-intel-mpi-library-on-intel-xeon-phi-coprocessor-systems

我使用的是将/opt设置成nfs共享,然后挂载到每个节点下的相同目录,设置一下环境变量就可以了。服务器端一定要将Intel_ Fortran,Intel_C++,Intel_ MPI全部安装上,各个节点只需要MPI就可以了,服务器端将程序编译好后,分发给各个节点,然后这个程序就可以通过MPI接口,进行并行运算了。

2、MPI使用方法

MPI采用mpd服务来对进程进行管理,使用mpiexec或mpirun运行mpi程序。

启动单机上的mpd服务:

#mpd&

查看mpd服务:

#mpdtrace查看主机名
# mpdtrace-l查看主机名和端口号

关闭mpd进程管理:

#mpdallexit

测试mpi程序,编译mpi文件(-o Hello 指定输出文件的名称):

#mpicc-oHelloHello.c//生成可执行文文件Hello
#mpicccpi.c//默认输出文件名a.out
#mpdrun-np4./a.out//-n或-np启动的进程数
#mpiexec[-hor-helpor--help]//查看帮助文件

启动集群上的mpd服务:

#mpdboot-nprocess-num-fmpd.hosts

启动 process-num个进程,mpd.hosts是前面创建的文件。

mpi默认是使用ssh来登陆集群里的其他机器,也可以使用rsh来登陆集群里的其他机器来启动mpd服务。

只要使用-rsh选项就可以指定用ssh或rsh:

#mpdboot--rsh=rsh-nprocess-num-fhostfile
或#mpdboot--rsh=ssh-nprocess-num-fhostfile

关闭mpd服务:

#mpdallexit

使用MPIEXEC|MPIRUN来执行mpi任务:

#mpiexec-np4./a.out//a.out所有节点在相同的路径下,需都有a.out文件
或mpiexec-machinefilefilename-np4./a.out

http://blog.sina.com.cn/s/blog_605f5b4f0100sw3j.html

运行结果如下:

[root@kvm~]#mpiexec-np4./a.out
Process0of4isondell
Process2of4isondell
Process3of4isonkvm.local
Process1of4isonkvm.local
piisapproximately3.1415926544231274,Erroris0.0000000008333343
wallclocktime=0.037788

注意:以上的环境变量设置好后都需要重启,或者使用source命令重新执行一下文件。

本文来源:1818IP

本文地址:https://www.1818ip.com/post/7176.html

免责声明:本文由用户上传,如有侵权请联系删除!

发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。