LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 6667|回复: 32

用龙芯盒子搭建机群(实验性的)

[复制链接]
发表于 2007-10-12 11:53:26 | 显示全部楼层 |阅读模式
前言
    对于并行计算很感兴趣,于是想做个实验性机群用来学习,使用福珑搭建的。由于只有两台机器所以并没有构建单一系统映像(SSI),也没有安装作业管理系统。本文使用两台龙芯盒子,一个100M交换机。关于盒子的信息可到龙梦论坛了解www.lemote.com/bbs
     本文所讲内容也适用于x86机器,也可把盒子和x86机器混合使用来搭建机群。
    飞豹也写过机群方面的文章:http://blog.chinaunix.net/u/13265/showart.php?id=377252
     使用的是OpenMPI,本文使用MPICH2。如果你有不少老机器,不妨搭个Beowulf集群玩玩。
相关知识
      任何并行程序都要最终运行在具体的并行计算机上,所以并行计算机是并行程序设计的硬件平台,应该有必要了解一下。
一. 典型并行计算机系统简介
      1.阵列处理机
        阵列处理机属于SIMD(Single Instruction Multiple Data,单指令多数据流)并行机,其名称反映出它是有多台处理器(即处理单元PE,Processing Element)摆成阵列拓扑结构,利用资源重复的方法开拓并行性。由于单一的指令运行在大型规则的数据结构(如数组和矩阵等)上,使阵列处理机也常叫做数据并行结构
      2.向量处理机
        1).向量流水线超级计算机
           在向量机中,标量处理器被集成为一组功能单元,它们以流水线方式执行存储器中的向量数据。能够操作于存储器中任何地方的向量就省去了要将应用数据结构映射到不变的互连结构上,从而大大简化了数据对界(Alignment)的问题。1976年生产的Cray-1将CDC6600/CDC7600中的 load-store结构的概念应用到向量上。存储器中任何以固定条状分布的向量,均可用向量load/store指令来回传至连续的向量寄存器。所有的算术运算均执行于向量寄存器上。
        2).并行向量处理机(Parallel Vector Processor)
                  
       3.共享存储多处理机
           共享存储的多处理机系统属于MIMD(Multiple Instruction Multiple Data,多指令多数据流)系统。MIMD比SIMD更灵活通用,SIMD适于开发细粒度的数据并行(操作级的并行),MIMD更适于开发粗粒度的功能并行(任务并行)。
          1).紧耦合多处理机系统
              由于采用共享主存通信以及处理器与主存之间的互联网络带宽有限,所以,当处理器数增多时,访问主存的冲突概率会加大,互联网络会成为系统性能瓶颈。为此,常采用多存储模块交叉访问和使用高速缓存,但须注意高速缓存与主存与高速缓存之间的数据一致性(Coherence)问题。
          2).同构对称多处理机系统
              在这种系统中,所使用的处理器类型是相同类型的,而各处理器在系统中的地位是平等和对称的。我国的曙光-1是由4个CPU组成的同构对称多处理机系统。
        4.分布存储多计算机
        5.分布共享存储多计算机
           分布共享存储DSM(Distributed Shared Memory)多处理机是将物理上分布的存储系统,通过硬件和软件的办法,向用户提供一个单一的全局地址空间。这样分布共享存储多处理机系统既有分布存储多计算机系统易于扩展的特性,又具有共享存储多处理机系统易于编程的优点。
二.  并行计算机体系结构模型
      大型并行机系统结构一般可分为6类:单指令多数据流机SIMD,并行向量处理机PVP,对称多处理机SMP(Symmetric MultiProsessor),大规模并行处理机MPP(Massively Parallel Processor),工作站机群COW(Cluster of Workstation)和分布共享存储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 Passing Interface)是目前最重要的一个给予消息传递的并行编程工具,它具有移植性好,功能强大,效率高等许多优点,几乎所有的并行计算机厂商都提供对它的支持,成了事实上的并行编程标准。MPI不是一个独立的自包含系统,而是建立在本地并行程序设计环境之上,其进程管理和I/O均由本地并行程序设计环境提供。
这里有一篇介绍MPI编程的文章   http://micro.ustc.edu.cn/Linux/MPI/MPICH/
MPICH2是一种最重要的MPI实现,本文所用的是:http://torvalds.cs.mtsu.edu/%7Ez ... 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-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
也可从源代码编译,可参考这个帖子http://www.lemote.com/bbs/viewth ... amp;;extra=page%3D2
解压缩
#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),可到http://www.netlib.org/benchmark/hpl/software.html下载,
http://www.netlib.org/benchmark/hpl/hpl.tgz
安装HPL之前需要安装另外一个软件,BLAS(Basic Linear Algebra Subprograms).很多计算机厂商都都会提供针对其产品体系结构进行优化的BLAS版本,在http://www.netlib.org/blas/faq.h ... 如SGI的叫SCSL。
注:什么时候有针对龙芯优化的啊,期待中。
本文使用这个,http://www.netlib.org/blas/blas.tgz
也有CBLAS(C interface to the BLAS)的,具体参考 http://www.netlib.org/blas/
和这个http://www.netlib.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.<arch>文件,其中<arch>指定不同的体系结构,用户无须自己从头编写该文件,可以把 setup目录下的相应文件cp到HPL的顶层目录,在有需要的的情况下作出相应修改即可,不过它是不可能有龙芯的Make.<arch> 的,只能自己搞了,不过也不难,在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<=3);13行己之后用于指定算法的有关特征,要调整好这些参数,需对HPL的算法有一定了解。如果不调整HPL.dat的参数,测出来的性能恐怕连峰值的10%都达不到。有关调优的详细信息可以在文件 /root/hpl/TUNING 中找到。
在bin/UNKNOWN/下执行mirun -np number ./xhpl测试,number要大于等于4,应该会看到使用 GFLOP 表示的执行结果。
(假设在root目录下)
#mpd&
#mpdboot -n 2 -f mpd.hosts
#cd hpl/bin/UNKNOWN
#mpirun -np 4 ./xhpl   这里你会看到一些测试信息,由于内容很多,一屏是放不下的,为此,可以输出到一个文件中。
#mpirun -np 4 ./xhpl >& 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
----------------------------------------------------------------------------
.....................................

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2007-10-12 13:26:14 | 显示全部楼层
那个小小的盒子,我到现在还没有搞到,究竟还卖不卖了~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-12 13:30:40 | 显示全部楼层
Post by shooter
那个小小的盒子,我到现在还没有搞到,究竟还卖不卖了~

龙芯2E的盒子还卖。2F的盒子已经在测试了,2F的频率上去了,成本比以前要低,还是等等买2F的盒子吧
回复 支持 反对

使用道具 举报

发表于 2007-10-12 13:55:43 | 显示全部楼层
龙芯的,说什么也得支持一下。
虽然我不懂。
回复 支持 反对

使用道具 举报

发表于 2007-10-12 18:43:47 | 显示全部楼层
在哪里买?最近打算换电脑了,想试试龙芯

Post by 不开花
龙芯2E的盒子还卖。2F的盒子已经在测试了,2F的频率上去了,成本比以前要低,还是等等买2F的盒子吧
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-12 19:31:12 | 显示全部楼层
Post by echo
在哪里买?最近打算换电脑了,想试试龙芯

可到这里http://www.lemote.com/bbs/viewth ... &extra=page%3D1
2F快出来了,建议买2F的盒子。2F的性能应该会让人满意。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-12 21:48:04 | 显示全部楼层
2F的板子~~~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2007-10-12 23:00:14 | 显示全部楼层
换电脑还是不推荐换龙芯。因为不能运行windows。不习惯linux的人会很不舒服。

还是推荐买来试验或者玩玩。当个纪念也不错。呵呵
回复 支持 反对

使用道具 举报

发表于 2007-10-12 23:50:20 | 显示全部楼层
youbest 快来 comment 一下。。。
回复 支持 反对

使用道具 举报

发表于 2007-10-13 00:45:23 | 显示全部楼层
LZ的文章讲得很详细,先顶一个
等好好研究后再提问
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表