资源描述
机群搭建简介(安装,测试)
来源: ChinaUnix博客 日期: 2007.12.30 11:21 (共有0条评论) 我要评论
本人联系方式:
E-mail:yixiu0001@
QQ:124198747
前言
对于并行计算很感兴趣,于是想做个实验性机群用来学习 。由于只有两台机器所以并没有构建单一系统映像(SSI),也没有安装作业管理系统。本文使用龙芯盒子和一台x86的机器,一个100M交换机。关于盒子的信息可到龙梦论坛了解
本文所讲内容也适用于x86机器,也可把盒子和x86机器混合使用来搭建机群。
飞豹也写过机群方面的文章:
使用的是OpenMPI,本文使用MPICH2。如果你有不少老机器,不妨搭个Beowulf集群玩玩。
相关知识
任何并行程序都要最终运行在具体的并行计算机上,所以并行计算机是并行程序设计的硬件平台,应该有必要了解一下。
一. 典型并行计算机系统简介
1.阵列处理机
阵列处理机属于SIMD(Single Instruction
MultipleData,单指令多数据流)并行机,其名称反映出它是有多台处理器(即处理单元PE,ProcessingElement)摆成阵列拓扑
结构,利用资源重复的方法开拓并行性。由于单一的指令运行在大型规则的数据结构(如数组和矩阵等)上,使阵列处理机也常叫做数据并行结构
2.向量处理机
1).向量流水线超级计算机
在向量机中,标量处理器被集成为一组功能单元,它们以流水线方式执行存储器中的向量数据。能够操作于存储器中任何地方的向量就省去了要将应用数据结构映射
到不变的互连结构上,从而大大简化了数据对界(Alignment)的问题。1976年生产的Cray-1将CDC6600/CDC7600中的load
-store结构的概念应用到向量上。存储器中任何以固定条状分布的向量,均可用向量load/store指令来回传至连续的向量寄存器。所有的算术运算
均执行于向量寄存器上。
2).并行向量处理机(Parallel Vector Processor)
3.共享存储多处理机
共享存储的多处理机系统属于MIMD(Multiple Instruction MultipleData,多指令多数据流)系统。MIMD比SIMD更灵活通用,SIMD适于开发细粒度的数据并行(操作级的并行),MIMD更适于开发粗粒度的功能并行(任务并行)。
1).紧耦合多处理机系统
由于采用共享主存通信以及处理器与主存之间的互联网络带宽有限,所以,当处理器数增多时,访问主存的冲突概率会加大,互联网络会成为系统性能瓶颈。为此,
常采用多存储模块交叉访问和使用高速缓存,但须注意高速缓存与主存与高速缓存之间的数据一致性(Coherence)问题。
2).同构对称多处理机系统
在这种系统中,所使用的处理器类型是相同类型的,而各处理器在系统中的地位是平等和对称的。我国的曙光-1是由4个CPU组成的同构对称多处理机系统。
4.分布存储多计算机
5.分布共享存储多计算机
分布共享存储DSM(Distributed
SharedMemory)多处理机是将物理上分布的存储系统,通过硬件和软件的办法,向用户提供一个单一的全局地址空间。这样分布共享存储多处理机系统
既有分布存储多计算机系统易于扩展的特性,又具有共享存储多处理机系统易于编程的优点。
二. 并行计算机体系结构模型
大型并行机系统结构一般可分为6类:单指令多数据流机SIMD,并行向量处理机PVP,对称多处理机SMP
(SymmetricMultiProsessor),大规模并行处理机MPP(Massively
ParallelProcessor),工作站机群COW(Cluster
ofWorkstation)和分布共享存储DSM多处理机。SIMD计算机多为专用,其余的5种均属于多指令多数据流MIMD计算机。
三.并行计算机存储结构模型
1.均匀存储访问模型
UMA(Uniform Memory Access)模型是均匀存储访问模型的简称。其特点是:
1).物理存储器被所有处理器均匀共享;
2).所有处理器访问任何存储字用相同的时间(此即均匀存储访问名称的由来)
3).每台处理器可带有私有高速缓存
4).外围设备也可以一定形式共享
2.非均匀存储访问模型
NUMA(Nonuniform Memory Access)模型是非均匀存储访问模型的简称。其特点是:
1).被共享的存储器在物理上是分布在所有的处理器中的,其所有本地存储器的集合就组成了全局地址空间
2).处理器访问存储器的时间是不一样的
3).每台处理器照例可带私有高速缓存,且外设也可以某种形式共享
3.全高速缓存访问模型
COMA(Cache Only Memory Access)模型是全高速缓存存储访问的简称。其特点是:
1).各处理器节点中没有存储层次结构,全部高速缓存组成了全局地址空间
2).利用分布的高速缓存目录D进行远程高速缓存的访问
3).COMA中的高速缓存容量一般都大于二级高速缓存容量
4).使用COMA时,数据开始时可以任意分配,因为在运行时它最终会被迁移到要用到它们的地方。
4.高速缓存一致性非均匀存储访问模型
CC-NUMA(Coherent-Cache Nonuniform Memory Access)模型是高速缓存一致性非均匀访问模型的简称。其特点是:
1).绝大多数商用CC-NUMA多处理机系统都使用给予目录的高速缓存一致性协议
2).它在保留SMP结构易于编程的有点的同时,也改善了常规SMP的可扩方性问题
3).CC-NUMA实际上是一个分布共享存储的DSM多处理机系统
4).它最显著的优点是程序员无需明确地在节点上分配数据,系统的硬件和软件开始时自动在各节点上分配数据,在运行期间,高速缓存一致性硬件会自动将数据迁移到用到它的地方。
5.非远程存储访问模型
NORMA(NO-Remote Memory Access)模型是非远程存储访问模型的简称。在一个分布存储的多计算机系统中,如果所有的存储器都是私有的,仅能由其自己的处理器所访问时,就称为NOMA.其特点是:
1).所有存储器都是私有的
2).绝大多数NUMA都不支持远程存储访问
3).在DSM中,NORMA就消失了
还有并行程序设计模型,串行程序如何并行化,任务调度,负载平衡,互联网络等等,在此无法一一描述。
四.MPI编程
MPI(Message
PassingInterface)是目前最重要的一个给予消息传递的并行编程工具,它具有移植性好,功能强大,效率高等许多优点,几乎所有的并行计算机
厂商都提供对它的支持,成了事实上的并行编程标准。MPI不是一个独立的自包含系统,而是建立在本地并行程序设计环境之上,其进程管理和I/O均由本地并
行程序设计环境提供。
这里有一篇介绍MPI编程的文章
MPICH2是一种最重要的MPI实现,本文所用的是:http://torvalds.cs.mtsu.edu/%7Ezach/debian/current/mpich2-1.0.3.tar.gz
安装指南:
http://www-unix.mcs.anl.gov/mpi/ ... ch2-doc-install.pdf
用户手册:http://www-unix.mcs.anl.gov/mpi/mpich2/downloads/mpich2-doc-user.pdf
MPICH2安装配置
(一)、创建SSH信任连接(在root目录下)
1、更改/etc/hosts文件
#vi /etc/hosts 打开hosts文件,
更改如下:
node01的IP node01
node02的IP node02
2、在node01生成SSH秘钥对.
#ssh-keygen -t rsa 一路回车即可 产生.ssh文件,
#ls -a 查看是否有.ssh文件夹
3、进入.ssh目录
#cd .ssh
4、生成authorized_keys文件
#cp id_rsa.pub authorized_keys
5、退出到root目录
#cd ..
6、建立本身的信任连接
#ssh node01 按提示输入yes(三个字母要打全)
7、设置node02(node02的root目录下)
#ssh-keygen -t rsa 生成.ssh文件夹
#scp node01的IP:/root/.ssh/* /root/.ssh 拷贝node01上的.ssh文件夹覆盖本地的
#scp node01的IP:/etc/hosts /etc/hosts 拷贝node01上的hosts文件覆盖本地的
#ssh node01 提示处输入yes回车
8、确认2台机器的信任连接已建立 对每个节点执行:
#ssh node01
#ssh node02
在提示处输入yes回车,最后确定无需输入密码并且没有任何提示信息即可登陆("Last login:时间日期"提示信息除外)
如果有多于两个节点的话,其余节点按node02类似设置
(二)、安装MPICH2(在节点root目录下)
由于后面要用到fortran,所以在这里把它装上,推荐
#apt-get install g77 gfortran
也可从源代码编译,可参考这个帖子
解压缩
#tar xvf mpich2-1.0.3.tar.gz
创建安装目录
#mkdir /usr/MPICH-instsll
进入mpich2解压目录
#cd mpich2-1.0.3
设置安装目录
#./configure --prefix=/usr/MPICH-install
编译
#make
安装
#make install
退出到root目录
#cd ..
通过编辑.bashrc文件修改环境变量
#vi .bashrc 修改后的.bashrc文件如下:
# .bashrc
# User specific aliases and functions
PATH="$PATH:/usr/MPICH-install/bin" 新增加的
#source.bashrc
测试环境变量设置
#which mpd
#which mpicc
#which mpiexec
#which mpirun
修改/etc/mpd.conf文件,
内容为secretword=loongson
#vi /etc/mpd.conf 设置文件读取权限和修改时间
#touch /etc/mpd.conf
#chmod 600 /etc/mpd.conf
创建主机名称集合文件/root/mpd.hosts
#vi mpd.hosts
文件内容如下:
node01
node02
三、测试
1、本地测试
#mpd & 启动
#mpdtrace 观看启动机器
#mpdallexit 退出
2、通过mpd.hosts运行机群系统
#mpdboot -n number -f mpd.hosts number为要起动的机器个数
#mpdtrace
#mpdallexit
3、测试运行MPICH的例子程序
#mpdboot -n 2 -f mpd.hosts 启动2台机器
#mpiexec -n number /usr/MPICH-install/examples/cpi number为使用的进程数,可以多于实际机器数
#mpdallexit
4、如果测试不能通过,请进行第四步
四、问题解决
1、通过mpdcheck获得一写帮助信息
#mpdcheck -pc
2、查错
#mpdcheck -l
3、通过mpd.hosts文件查错
#mpdcheck -f mpd.hosts 如果无错误
#mpdcheck -f mpd.hosts -ssh
4、如果上述无错误,可略过此步
对任意两台机器进行查错
m1: #mpdcheck -s 输出主机名host和端口port
m2: #mpdcheck -c host port
注意:以上四步都是在没有运行mpd的情况下进行的
5、mpd查错
m1: #mpd -e & 返回使用的端口
m2: #mpd -h m1 -p echoed_port_m1 &
五.集群系统性能评测
基准测试程序
由于LINPACK是Top500的标准测试程序,这里介绍LINPACK的安装和使用。选用的版本是HPL(High-Performance Linpack for Distributed-Memory Computers),可到
lib.org/benchmark/hpl/software.html下载,
lib.org/benchmark/hpl/hpl.tgz
安装HPL之前需要安装另外一个软件,BLAS(Basic Linear Algebra Subprograms).很多计算机厂商都都会提供针对其产品体系结构进行优化的BLAS版本,在
lib.org/blas/faq.html能看到,比如SGI的叫SCSL。
注:什么时候有针对龙芯优化的啊,期待中。
本文使用这个,
lib.org/blas/blas.tgz
也有CBLAS(C interface to the BLAS)的,具体参考
lib.org/blas/
和这个
lib.org/blas/blast-forum/cinterface.pdf
假设都在/root目录下
#tar xvf blas.tgz 这里解压后生成BLAS目录
#cd BLAS
#make 如果不出错的话,make结束后你会看到blas_LINUX.a这个东东,后面要用它
下面可以安装HPL了
#tar xvf hpl.tgz
#cd hpl
HPL顶层目录生成Make.文件,其中指定不同的体系结构,用户无须自己从头编写该文件,可以把
setup目录下的相应文件cp到HPL的顶层目录,在有需要的的情况下作出相应修改即可,不过它是不可能有龙芯的Make.
的,只能自己搞了,不过也不难,在setup目录下会看到有make_generic 和Make.UNKNOWN.in,不用完全自己弄了
#cd setup
# bash make_generic 这一步会生成一个Make.UNKNOWN文件,看看刚才没有这个吧
#mv Mmake.UNKNOWN ../
#cd .. 回到hpl目录下
到这里还不能直接make,还要对Make.UNKNOWN编辑下才行(假设均在root目录下),把下面内容编辑下即可
TOPdir = /root/hpl
MPdir = /usr/MPICH-install
LAlib = /root/BLAS/blas_LINUX.a
CC = /usr/MPICH-install/bin/mpicc
LINKER = /usr/MPICH-install/bin/mpif77
#make arch=UNKNOWN
这一步成功后会在hpl子目录 bin/UNKNOWN/下会生成xhpl和HPL.dat文件
HPL.dat为输入数据文件,它包含了问题规模,机器配置和算法特征等信息。用户可以通过修改其中的参数对测试程序进行调整,以求获得系统的最佳性能数
据。文件1~2行为说明性文字;3~4行为指定输出设备和重定向文件名;5行指定问题规模的种数,但不能超过20,而且只有第一个整数有效;6指定所要运
行的问题规模,只有前三个正整数有效,OS要占用一定的资源,所以按物理内存的80%算。物理内存的80%除8再开方,就是最佳问题规模的大概值。如果是
盒子标配256M内存的话,问题规模大概是7100。如果是512M内存,问题规模大概是10000;7~8分别指定分块的大小的种数和具体的分块大小,
一般来说好的分块大小在[32,256]之内,需要多试几次;9指定进程网格的种数,该行参数不能大于20,且只有第一个整数有效;10~1分别指定各种
进程网格的行数和列数,一般来说,行数和列数之比为1:k(k& out
查看out即可,以下为一台盒子上的测试结果摘录(两台一起运行时经常失去响应,等不及了),HPL.dat文件没做任何修改(不修改恐怕连峰值的10%
都达不到),哪位感兴趣的可以试试看能达到的峰值是多少,也不必用太多的盒子,多了的话,就要考虑任务调度,负载平衡和互联网络等问题了。
============================================================================
HPLinpack 1.0a -- High-Performance Linpack benchmark -- January 20, 2004
Written by A. Petitet and R. Clint Whaley, Innovative Computing Labs., UTK
============================================================================
An explanation of the input/output parameters follows:
T/V : Wall time / encoded variant.
N : The order of the coefficient matrix A.
NB : The partitioning blocking factor.
P : The number of process rows.
Q : The number of process columns.
Time : Time in seconds to solve the linear system.
Gflops : Rate of execution for solving the linear system.
The following parameter values will be used:
N : 29 30 34 35
NB : 1 2 3 4
PMAP : Row-major process mapping
P : 2 1 4
Q : 2 4 1
PFACT : Left Crout Right
NBMIN : 2 4
NDIV : 2
RFACT : Left Crout Right
BCAST : 1ring
DEPTH : 0
SWAP : Mix (threshold = 64)
L1 : transposed form
U : transposed form
EQUIL : yes
ALIGN : 8 double precision words
----------------------------------------------------------------------------
- The matrix A is randomly generated for each test.
- The following scaled residual checks will be computed:
1) ||Ax-b||_oo / ( eps * ||A||_1 * N )
2) ||Ax-b||_oo / ( eps * ||A||_1 * ||x||_1 )
3) ||Ax-b||_oo / ( eps * ||A||_oo * ||x||_oo )
- The relative machine precision (eps) is taken to be 1.110223e-16
- Computational tests pass if scaled residuals are less than 16.0
============================================================================
T/V N NB P Q Time Gflops
----------------------------------------------------------------------------
WR00L2L2 29 1 2 2 4.46 3.931e-06
----------------------------------------------------------------------------
||Ax-b||_oo / ( eps * ||A||_1 * N ) = 0.0674622 ...... PASSED
||Ax-b||_oo / ( eps * ||A||_1 * ||x||_1 ) = 0.0519667 ...... PASSED
||Ax-b||_oo / ( eps * ||A||_oo * ||x||_oo ) = 0.0174238 ...... PASSED
============================================================================
T/V N NB P Q Time Gflops
----------------------------------------------------------------------------
WR00L2L4 29 1 2 2 4.97 3.529e-06
----------------------------------------------------------------------------
上面的数据看起来很低,我稍微调整了一下HPL.dat,但并非最优,感兴趣的可以调整出比较好的。(还是在一台盒子上的数据,用多台并且问题规模很大的话,会花很多时间),从数据可以看出,调整后的数据比之前没做任何调整的高出4个数量级。
具体数据在附件
..................................
===========================================================================
T/V N NB P Q Time Gflops
----------------------------------------------------------------------------
WR00L2L2 1000 64 3 1 12.33 5.420e-02
----------------------------------------------------------------------------
||Ax-b||_oo / ( eps * ||A||_1 * N ) = 1.1047878 ...... PASSED
||Ax-b||_oo / ( eps * ||A||_1 * ||x||_1 ) = 0.0268147 ...... PASSED
||Ax-b||_oo / ( eps * ||A||_oo * ||x||_oo ) = 0.0064782 ...... PASSED
============================================================================
T/V N NB P Q Time Gflops
----------------------------------------------------------------------------
WR00L2L4 1000 64 3 1 12.34 5.415e-02
----------------------------------------------------------------------------
.....................................
本文来自ChinaUnix博客,如果查看原文请点:
展开阅读全文