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

75次阅读
没有评论

共计 6372 个字符,预计需要花费 16 分钟才能阅读完成。

这篇文章给大家分享的是有关基于 Intel 的并行计算 MPI 环境如何搭建的内容。丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,一起跟随丸趣 TV 小编过来看看吧。

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.183 dell 10.12.190.187 lenovo  hellip; hellip;

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

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

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

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

Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: b3:8e:87:44:71:67:81:06:d2:51:01:a4:f8:74:78:fd root@kvm.local The key s randomart image is: +--[ RSA 2048]----+ | .o==oo.. | | . +o.+ o | | . + o+.o | | o o. . | | .. S E | | . 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 权限:

#chmod 600 authorized_keys

设置.ssh 目录权限:

#chmod 700 -R .ssh

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

#ssh-copy-id  ndash;i ~/.ssh/id_rsa.pub 10.12.190.187

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

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

ssh node1 ssh node2 ssh node3 ssh node4

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

三、NFS 文件系统的配置

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

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

1. /etc/exports 文件配置

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

/home/cluster 10.12.190.183(rw,sync,no_root_squash) /home/cluster 10.12.190.185(rw,sync,no_root_squash) /home/cluster 10.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/rpcbind start (注:在 *** 内核中 NFS 守护进程改为 rpcbind,如是旧内核启动 NFS 守护进程的命令是  service portmapstart)

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

# /etc/rc.d/init.d/nfs start # chkconfig nfs on

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

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

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

mkdir /usr/cluster

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

showmount -e 10.12.190.183

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

挂载共享目录:

mount -t nfs 10.12.190.183:/home/cluster /home/cluster

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

10.12.190.183:/home/cluster /home/cluster nfs defaults 0 0

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

四、安装 Intel_C++

#tar xvzf l_ccompxe_2013.1.117.tgz # cd composer_xe_2013.1.117 #./install.sh

设置环境变量:

#vi /etc/profile

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

测试环境变量设置:

#which icc

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

五、安装 Intel_Fortran 编译器

#tar fxvz l_fcompxe_2013.1.117.tgz # cd l_fcompxe_2013.1.117 #./install.sh

设置环境变量:

#vi /etc/profile

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

测试环境变量设置:

#which ifort

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

六、配置安装 Intel_MPI

1、安装与设置

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

#tar fxvz l_mpi_p_4.1.3.045.tgz #cd l_mpi_p_4.1.3.045 #./install.sh

设置环境变量:

#vi /etc/profile

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

测试环境变量设置:

#which mpd #which mpicc #which mpiexec #which mpirun

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

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

vi /etc/mpd.conf

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

chmod 600 /etc/mpd.conf

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

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

#vi mpd.hosts

文件内容如下:

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

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

# scp /opt/intel/impi/4.1.3.045/mic/bin/* dell:/bin/ mpiexec 100% 1061KB 1.0MB/s 00:00 pmi_proxy 100% 871KB 871.4KB/s 00:00  hellip; hellip; #scp /opt/intel/impi/4.1.3.045/mic/lib/* dell:/lib64/ libmpi.so.4.1 100% 4391KB 4.3MB/s 00:00 libmpigf.so.4.1 100% 321KB 320.8KB/s 00:00 libmpigc4.so.4.1 100% 175KB 175.2KB/s 00:00  hellip; hellip; # scp /opt/intel/composer_xe_2013_sp1.0.080/compiler/lib/mic/* dell:/lib64/ libimf.so 100% 2516KB 2.5MB/s 00:01 libsvml.so 100% 4985KB 4.9MB/s 00:01 libintlc.so.5 100% 128KB 128.1KB/s 00:00  hellip; hellip;

以上是 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 -o Hello Hello.c // 生成可执行文文件 Hello #mpicc cpi.c // 默认输出文件名 a.out #mpdrun -np 4 ./a.out //- n 或 -np 启动的进程数  #mpiexec [-h or -help or --help] // 查看帮助文件 

启动集群上的 mpd 服务:

# mpdboot -n process-num -f mpd.hosts

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

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

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

#mpdboot --rsh=rsh -n process-num -f hostfile  或 #mpdboot --rsh=ssh -n process-num -f hostfile

关闭 mpd 服务:

#mpdallexit

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

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

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

运行结果如下:

[root@kvm ~]# mpiexec -np 4 ./a.out Process 0 of 4 is on dell Process 2 of 4 is on dell Process 3 of 4 is on kvm.local Process 1 of 4 is on kvm.local pi is approximately 3.1415926544231274, Error is 0.0000000008333343 wall clock time = 0.037788

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

感谢各位的阅读!关于“基于 Intel 的并行计算 MPI 环境如何搭建”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计6372字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)