论文部分内容阅读
摘 要:MPICH是国内常用的集群计算消息传递系统。本文描述了MPI的基本概念及实现软件MPICH2,介绍了在Linux环境下如何构架基于MPICH的高性能计算集群系统的方法,给出了具体的步骤和基本配置过程。实验结果表明:在现有并行集群系统下能有效地利用现有计算机资源,大幅度提高计算效率,为一些复杂问题的求解提供可行方案。
关键词:并行计算;MPI;MPICH;集群
中图分类号:TP393.02 文献标识码:A
Configure Parallel Computing Cluster by MPICH2 Based on RHEL5
LI Jian,LUO Yuan-cheng
(computer department,Chongqing Vocational Institute of Engineering,ChongQing 400037)
Key words: parallel computing;MPI;MPICH;cluster
随着工作站和PC机性能的提高和网络技术的发展,集群系统(Cluster)是近年来人们开始研究的一种新计算机系统,也称网络并行计算系统,是利用高速通讯网络将一组高性能工作站或PC机连接起来而形成的一种分布式并行计算系统。它通常采用消息传递(Message Passing)的方式进行并行计算。消息传递接口(MPI - Message Passing Interface) 作为并行编程模型的代表和事实上的标准, 已经在越来越多的集群高性能计算中得到了使用。
MPI消息传递过程分为三个阶段:⑴消息装配,将发送数据从发送缓冲区中取出,加上消息信封等形成一个完整的消息;⑵消息传递,将装配好的消息从发送端传递到接收端;⑶消息拆卸,从接收到的消息中取出数据送入接收缓冲区。如图所示,整个传递过程可划分为三个层次:MPI层、内核层和网络接口层。MPI层处于整个传输的顶部,为用户提供一个透明通用的函数库,来完成用户程序的通信操作。内核层起到一个承上启下的作用,向上为MPI层提供socket接口函数,向下为网络接口程序准备skb数据空间。网络接口层与网络设备直接相连,处于传输的最底层,向上为内核层提供抽象的网络设备结构,屏蔽不同网络设备的区别,实现网络设备的统一管理。
![](https://www.soolun.com/img/pic.php?url=http://img.resource.qikan.cn/qkimages/gpjs/gpjs200905/gpjs20090520-1-l.jpg)
MPI是为开发基于消息传递模型的并行程序而制定的工业标准,其目的是为了提高并行程序的可移植性和易用性。参与MPI标准制定的人员来自欧美40多个组织,大部分主要的并行计算机制造商、大学研究所、政府实验室、工业组织等都投入到MPI标准化工作。有了统一的并行编程语言标准,并行计算环境下的应用软件及软件工具就都能够实现透明的移植,各个厂商就可以依据标准提供独具特色和优势的软件实现和软件支持,从而提高了并行处理的能力。
MPI只是一个并行编程语言标准,要编写基于MPI的并行程序,还必须借助某一MPI具体实现。MPICH是Linux平台下最重要的一种MPI实现,是一个与MPI规范同步发展的版本。LAM(Local Area Multicomputer)是Linux平台下另一免费的MPI实现。它由Ohio州立大学开发,主要用于异构的网格计算并行系统。
MPICH是可以免费从http://www-unix.mcs.anl.gov/mpi/mpich 取得,更为重要的是,MPICH是一个与MPI-1规范同步发展的版本,每当MPI推出新的版本,就会有相应的MPICH的实现版本。MPICH2是MPI(Message-Passing Interface)的一个应用实现,支持最新的MPI-2接口标准,是用于并行运算的工具,与之前版本相比MPICH2具备更加严谨和合理的结构,可移植性和效率更好,在程序设计语言上支持C/C++和Fortran。MPICH2的主页是http://www-unix.mcs.anl.gov/mpi/mpich2/index.htm,在这个页面上就能找到各平台最新版本MPICH2的下载地址,其中还包括源代码。最新源代码链接的地址是ftp://ftp.mcs.anl.gov/pub/mpi/mpich2-1.0.8.tar.gz。在ftp://ftp.mcs.anl.gov/pub/mpi下还有MPICH2的安装和使用指南文档,主要有三个,分别是User's Guide,Installer's Guide和Windows Developer's Guide。
1 准备工作:
1.1设置IP,更改主机名为station1,station3,station6,station8
![](https://www.soolun.com/img/pic.php?url=http://img.resource.qikan.cn/qkimages/gpjs/gpjs200905/gpjs20090520-2-l.jpg)
以四台pc为例,为了方便,分别更改了四台机器的主机名为station1,station3,station6,station8,以第一台为例:
hostname station1
这只是临时更改主机名,要想永久更改主机名,编辑下面文件:
vim /etc/sysconfig/network
编辑内容为(最后一行就是要改的主机名):
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=station1
更改/etc/hosts文件
#vi /etc/hosts 打开hosts文件,更改如下:
127.0.0.1 localhost.localdomain localhost
172.17.2.1 station1
172.17.2.3 station3
172.17.2.6 station6
172.17.2.8 station8
1.2 创建SSH信任连接(在root目录下)
1.2.1 在station1生成SSH秘钥对
#ssh-keygen -t rsa 一路回车即可
产生.ssh文件,
#ls -a 查看是否有.ssh文件夹
1.2.2进入.ssh目录
#cd .ssh
1.2.3 生成authorized_keys文件
#cp id_rsa.pub authorized_keys
1.2.4 退出到root目录
#cd ..
1.2.5 建立本身的信任连接
#ssh station1 按提示输入yes
1.2.6 设置station3(station3的root目录下)
#ssh-keygen -t rsa 生成.ssh文件夹
#scp 172.17.2.1:/root/.ssh/* /root/.ssh拷贝station1上的.ssh文件夹覆盖本地的
#scp 172.17.2.1:/etc/hosts /etc/hosts拷贝station1上的hosts文件覆盖本地的
#ssh station1提示处输入yes回车
设置station6,station8的方法与station3相同
1.2.7 确认四台机器的信任连接已建立
对每个节点执行:
#ssh station1
#ssh station3
#ssh station6
#ssh station8
在提示处输入yes回车,最后确定无需输入密码并且没有任何提示信息即可登陆("Last login:时间日期"提示信息除外)
2 安装mpich2
2.1到MPICH官方网站下载源代码包,解压缩
#tar -zxvf mpich2-1.0.8.tar.gz
2.2进入mpich2解压目录
#cd mpich2-1.0.8
2.3设置安装目录
#./configure --prefix=/usr/loca/mpich
2.4编译
#make
2.5安装
#make install
2.6改变目录
#mv mpich2-1.0.8 /usr/local/mpich/install
2.7退出到root目录
#cd
2.8通过编辑.bashrc文件修改环境变量
#vim .bashrc
修改后的.bashrc文件如下:
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
PATH="$PATH:/usr/local/mpich/bin" #新增加的
#Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
2.9测试环境变量设置
#which mpd
#which mpicc
#which mpiexec
#which mpirun
2.10修改/etc/mpd.conf文件,内容为secretword=myword
#vi /etc/mpd.conf
设置文件读取权限和修改时间
#touch /etc/mpd.conf
#chmod 600 /etc/mpd.conf
2.11创建主机名称集合文件/root/mpd.hosts
#vi mpd.hosts
文件内容如下:
station1
station3
station6
station8
3 测试
3.1本地测试
启动:
#mpd &
[1]24455
观看启动机器:
#mpdtrace
station1
退出:
#mpdallexit
3.2运行集群系统
#mpdboot -n 4 -f mpd.hosts
参数-n 4指定了要起动的机器个数,-f mpd.hosts指定了通过mpd.hosts运行
#mpdtrace
station1
station6
station3
station8
#mpdallexit
3.3测试运行MPICH的圆周率的程序
在软件的安装包里有圆周率计算的原代码icpi.c,先编译成可执行文件
#cd /usr/local/mpich/install/examples/
mpicc icpi.c -o icpi
3.4集群测试
#mpdboot -n 4 -f mpd.hosts
启动这四台机器
#mpiexec -n 4 /usr/local/mpich/install/examples/icpi
用num指定使用的进程数
Enter the number of intervals: (0 quits) 100000000
pi is approximately 3.1415926535901937, Error is 0.0000000000004006
wall clock time = 18.460739
Enter the number of intervals: (0 quits) 10000
pi is approximately 3.1415926544231239, Error is 0.0000000008333307
wall clock time = 0.022534
Enter the number of intervals: (0 quits) 0
#mpdallexit
3.5单机测试
#cd /usr/local/mpich/install/examples/
#./icpi
Enter the number of intervals: (0 quits) 100000000
pi is approximately 3.1415926535902345, Error is 0.0000000000004414
wall clock time = 73.898167
Enter the number of intervals: (0 quits) 10000
pi is approximately 3.1415926544231341, Error is 0.0000000008333410
wall clock time = 0.010941
测试结果表明:在intervals的值设为100000000,既精确值比较大时,群集的4进程并发运行时间是18.460739秒,单机单进程运行时间是73.898167秒,明显快很多,并行运算还是很有效果的。在intervals的值设为10000,既精确值比较小时,群集的4进程并发运行时间是0.022534秒,单机单进程运行时间是0.010941秒,这是因为并行运算过程中,参与运算的机器需要通过网络传递一些消息,如果计算量不大的话,花在了这上面的时间影响会比较明显,因而反不如单机的来得快。
4 查错
4.1通过mpdcheck获得帮助信息
#mpdcheck -pc
4.2查错
#mpdcheck -l
4.3通过mpd.hosts文件查错
#mpdcheck -f mpd.hosts
如果无错误
#mpdcheck -f mpd.hosts -ssh
4.4对任意两台机器进行查错
Station1上:
#mpdcheck -s
返回主机名host和端口port
server listening at INADDR_ANY on: station1 40782
station3上:
# mpdcheck -c 172.17.2.1 40782
client successfully recvd ack from server: ack_from_server _to_client
station1 上返回结果
server has conn on from ('172.17.2.3', 54438)
server successfully recvd msg from client: hello_from_client_to_server
返回消息传递结果
4.5mpd查错
station1上:
#mpd -e &
返回使用的端口
[1]14065
[root@station1 ~]# mpd_port=41563
station3上:
# mpd -h station1 -p 41563 &
[1]5122
以上测试通过,集群系统就建成了。
5 结束语
利用局域网和MPI可以构建由PC组成的廉价、实用且性能优良的并行计算机。文中利用普通PC机在Linux环境下构建了基于MPICH2的高性能计算集群系统,并对其进行了高性能测试。实验结果表明这种构建高性能计算集群系统的方法切实可行,不但可以节省计算时间,提高计算精度,而且可以解决单机无法完成的超大规模求解问题。并行计算使用多台计算机或者具有多个处理器的计算机来求解问题,从而为求解大规模复杂问题提供了可能。作为一个优秀的操作系统,Linux特别适合用来组建并行计算平台。
参考文献:
[1]William Gropp and Ewing Lusk in Mathematics and Computer Science Division Argonne National Laboratory. MPICH2的安装和使用指南文档[EB/OL],ftp://ftp.mcs.anl.gov/pub/mpi/ mpich2-doc-install.pdf.
[2]徐巍,李玉榕.MPICH在PC集群系统中的运用[J].福建工程学院学报,2006,(4).
[3]高飞,刘青昆,向文,黄丹.MPICH标准通信模式下消息传递机制的研究[J].长春师范学院学报(自然科学版),2007,(10).
[4]庞丽萍,何飞跃,岳建辉等.并行文件系统集中式元数据管理高可用系统设计[J].计算机工程与科学,2004, 26 (11): 87-88.
关键词:并行计算;MPI;MPICH;集群
中图分类号:TP393.02 文献标识码:A
Configure Parallel Computing Cluster by MPICH2 Based on RHEL5
LI Jian,LUO Yuan-cheng
(computer department,Chongqing Vocational Institute of Engineering,ChongQing 400037)
Key words: parallel computing;MPI;MPICH;cluster
随着工作站和PC机性能的提高和网络技术的发展,集群系统(Cluster)是近年来人们开始研究的一种新计算机系统,也称网络并行计算系统,是利用高速通讯网络将一组高性能工作站或PC机连接起来而形成的一种分布式并行计算系统。它通常采用消息传递(Message Passing)的方式进行并行计算。消息传递接口(MPI - Message Passing Interface) 作为并行编程模型的代表和事实上的标准, 已经在越来越多的集群高性能计算中得到了使用。
MPI消息传递过程分为三个阶段:⑴消息装配,将发送数据从发送缓冲区中取出,加上消息信封等形成一个完整的消息;⑵消息传递,将装配好的消息从发送端传递到接收端;⑶消息拆卸,从接收到的消息中取出数据送入接收缓冲区。如图所示,整个传递过程可划分为三个层次:MPI层、内核层和网络接口层。MPI层处于整个传输的顶部,为用户提供一个透明通用的函数库,来完成用户程序的通信操作。内核层起到一个承上启下的作用,向上为MPI层提供socket接口函数,向下为网络接口程序准备skb数据空间。网络接口层与网络设备直接相连,处于传输的最底层,向上为内核层提供抽象的网络设备结构,屏蔽不同网络设备的区别,实现网络设备的统一管理。
![](https://www.soolun.com/img/pic.php?url=http://img.resource.qikan.cn/qkimages/gpjs/gpjs200905/gpjs20090520-1-l.jpg)
MPI是为开发基于消息传递模型的并行程序而制定的工业标准,其目的是为了提高并行程序的可移植性和易用性。参与MPI标准制定的人员来自欧美40多个组织,大部分主要的并行计算机制造商、大学研究所、政府实验室、工业组织等都投入到MPI标准化工作。有了统一的并行编程语言标准,并行计算环境下的应用软件及软件工具就都能够实现透明的移植,各个厂商就可以依据标准提供独具特色和优势的软件实现和软件支持,从而提高了并行处理的能力。
MPI只是一个并行编程语言标准,要编写基于MPI的并行程序,还必须借助某一MPI具体实现。MPICH是Linux平台下最重要的一种MPI实现,是一个与MPI规范同步发展的版本。LAM(Local Area Multicomputer)是Linux平台下另一免费的MPI实现。它由Ohio州立大学开发,主要用于异构的网格计算并行系统。
MPICH是可以免费从http://www-unix.mcs.anl.gov/mpi/mpich 取得,更为重要的是,MPICH是一个与MPI-1规范同步发展的版本,每当MPI推出新的版本,就会有相应的MPICH的实现版本。MPICH2是MPI(Message-Passing Interface)的一个应用实现,支持最新的MPI-2接口标准,是用于并行运算的工具,与之前版本相比MPICH2具备更加严谨和合理的结构,可移植性和效率更好,在程序设计语言上支持C/C++和Fortran。MPICH2的主页是http://www-unix.mcs.anl.gov/mpi/mpich2/index.htm,在这个页面上就能找到各平台最新版本MPICH2的下载地址,其中还包括源代码。最新源代码链接的地址是ftp://ftp.mcs.anl.gov/pub/mpi/mpich2-1.0.8.tar.gz。在ftp://ftp.mcs.anl.gov/pub/mpi下还有MPICH2的安装和使用指南文档,主要有三个,分别是User's Guide,Installer's Guide和Windows Developer's Guide。
1 准备工作:
1.1设置IP,更改主机名为station1,station3,station6,station8
![](https://www.soolun.com/img/pic.php?url=http://img.resource.qikan.cn/qkimages/gpjs/gpjs200905/gpjs20090520-2-l.jpg)
以四台pc为例,为了方便,分别更改了四台机器的主机名为station1,station3,station6,station8,以第一台为例:
hostname station1
这只是临时更改主机名,要想永久更改主机名,编辑下面文件:
vim /etc/sysconfig/network
编辑内容为(最后一行就是要改的主机名):
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=station1
更改/etc/hosts文件
#vi /etc/hosts 打开hosts文件,更改如下:
127.0.0.1 localhost.localdomain localhost
172.17.2.1 station1
172.17.2.3 station3
172.17.2.6 station6
172.17.2.8 station8
1.2 创建SSH信任连接(在root目录下)
1.2.1 在station1生成SSH秘钥对
#ssh-keygen -t rsa 一路回车即可
产生.ssh文件,
#ls -a 查看是否有.ssh文件夹
1.2.2进入.ssh目录
#cd .ssh
1.2.3 生成authorized_keys文件
#cp id_rsa.pub authorized_keys
1.2.4 退出到root目录
#cd ..
1.2.5 建立本身的信任连接
#ssh station1 按提示输入yes
1.2.6 设置station3(station3的root目录下)
#ssh-keygen -t rsa 生成.ssh文件夹
#scp 172.17.2.1:/root/.ssh/* /root/.ssh拷贝station1上的.ssh文件夹覆盖本地的
#scp 172.17.2.1:/etc/hosts /etc/hosts拷贝station1上的hosts文件覆盖本地的
#ssh station1提示处输入yes回车
设置station6,station8的方法与station3相同
1.2.7 确认四台机器的信任连接已建立
对每个节点执行:
#ssh station1
#ssh station3
#ssh station6
#ssh station8
在提示处输入yes回车,最后确定无需输入密码并且没有任何提示信息即可登陆("Last login:时间日期"提示信息除外)
2 安装mpich2
2.1到MPICH官方网站下载源代码包,解压缩
#tar -zxvf mpich2-1.0.8.tar.gz
2.2进入mpich2解压目录
#cd mpich2-1.0.8
2.3设置安装目录
#./configure --prefix=/usr/loca/mpich
2.4编译
#make
2.5安装
#make install
2.6改变目录
#mv mpich2-1.0.8 /usr/local/mpich/install
2.7退出到root目录
#cd
2.8通过编辑.bashrc文件修改环境变量
#vim .bashrc
修改后的.bashrc文件如下:
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
PATH="$PATH:/usr/local/mpich/bin" #新增加的
#Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
2.9测试环境变量设置
#which mpd
#which mpicc
#which mpiexec
#which mpirun
2.10修改/etc/mpd.conf文件,内容为secretword=myword
#vi /etc/mpd.conf
设置文件读取权限和修改时间
#touch /etc/mpd.conf
#chmod 600 /etc/mpd.conf
2.11创建主机名称集合文件/root/mpd.hosts
#vi mpd.hosts
文件内容如下:
station1
station3
station6
station8
3 测试
3.1本地测试
启动:
#mpd &
[1]24455
观看启动机器:
#mpdtrace
station1
退出:
#mpdallexit
3.2运行集群系统
#mpdboot -n 4 -f mpd.hosts
参数-n 4指定了要起动的机器个数,-f mpd.hosts指定了通过mpd.hosts运行
#mpdtrace
station1
station6
station3
station8
#mpdallexit
3.3测试运行MPICH的圆周率的程序
在软件的安装包里有圆周率计算的原代码icpi.c,先编译成可执行文件
#cd /usr/local/mpich/install/examples/
mpicc icpi.c -o icpi
3.4集群测试
#mpdboot -n 4 -f mpd.hosts
启动这四台机器
#mpiexec -n 4 /usr/local/mpich/install/examples/icpi
用num指定使用的进程数
Enter the number of intervals: (0 quits) 100000000
pi is approximately 3.1415926535901937, Error is 0.0000000000004006
wall clock time = 18.460739
Enter the number of intervals: (0 quits) 10000
pi is approximately 3.1415926544231239, Error is 0.0000000008333307
wall clock time = 0.022534
Enter the number of intervals: (0 quits) 0
#mpdallexit
3.5单机测试
#cd /usr/local/mpich/install/examples/
#./icpi
Enter the number of intervals: (0 quits) 100000000
pi is approximately 3.1415926535902345, Error is 0.0000000000004414
wall clock time = 73.898167
Enter the number of intervals: (0 quits) 10000
pi is approximately 3.1415926544231341, Error is 0.0000000008333410
wall clock time = 0.010941
测试结果表明:在intervals的值设为100000000,既精确值比较大时,群集的4进程并发运行时间是18.460739秒,单机单进程运行时间是73.898167秒,明显快很多,并行运算还是很有效果的。在intervals的值设为10000,既精确值比较小时,群集的4进程并发运行时间是0.022534秒,单机单进程运行时间是0.010941秒,这是因为并行运算过程中,参与运算的机器需要通过网络传递一些消息,如果计算量不大的话,花在了这上面的时间影响会比较明显,因而反不如单机的来得快。
4 查错
4.1通过mpdcheck获得帮助信息
#mpdcheck -pc
4.2查错
#mpdcheck -l
4.3通过mpd.hosts文件查错
#mpdcheck -f mpd.hosts
如果无错误
#mpdcheck -f mpd.hosts -ssh
4.4对任意两台机器进行查错
Station1上:
#mpdcheck -s
返回主机名host和端口port
server listening at INADDR_ANY on: station1 40782
station3上:
# mpdcheck -c 172.17.2.1 40782
client successfully recvd ack from server: ack_from_server _to_client
station1 上返回结果
server has conn on
server successfully recvd msg from client: hello_from_client_to_server
返回消息传递结果
4.5mpd查错
station1上:
#mpd -e &
返回使用的端口
[1]14065
[root@station1 ~]# mpd_port=41563
station3上:
# mpd -h station1 -p 41563 &
[1]5122
以上测试通过,集群系统就建成了。
5 结束语
利用局域网和MPI可以构建由PC组成的廉价、实用且性能优良的并行计算机。文中利用普通PC机在Linux环境下构建了基于MPICH2的高性能计算集群系统,并对其进行了高性能测试。实验结果表明这种构建高性能计算集群系统的方法切实可行,不但可以节省计算时间,提高计算精度,而且可以解决单机无法完成的超大规模求解问题。并行计算使用多台计算机或者具有多个处理器的计算机来求解问题,从而为求解大规模复杂问题提供了可能。作为一个优秀的操作系统,Linux特别适合用来组建并行计算平台。
参考文献:
[1]William Gropp and Ewing Lusk in Mathematics and Computer Science Division Argonne National Laboratory. MPICH2的安装和使用指南文档[EB/OL],ftp://ftp.mcs.anl.gov/pub/mpi/ mpich2-doc-install.pdf.
[2]徐巍,李玉榕.MPICH在PC集群系统中的运用[J].福建工程学院学报,2006,(4).
[3]高飞,刘青昆,向文,黄丹.MPICH标准通信模式下消息传递机制的研究[J].长春师范学院学报(自然科学版),2007,(10).
[4]庞丽萍,何飞跃,岳建辉等.并行文件系统集中式元数据管理高可用系统设计[J].计算机工程与科学,2004, 26 (11): 87-88.