LinuxSir.cn,穿越时空的Linuxsir!

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

Debian建设信息化校园:超级电脑DIY

[复制链接]
发表于 2006-2-1 00:41:04 | 显示全部楼层 |阅读模式
Debian建设信息化校园:超级电脑DIY

    超级电脑听起来似乎是一个离我们很遥远的东西,但实际上超级电脑并不那么神秘,我们可以利用身边的硬件环境自己打造一台初级的超级电脑。

一 超级电脑简单介绍:
    早期的超级电脑是基于向量处理器,它们一般都是采用专用的硬件和软件,通常成本巨大,对我等平民百姓来说都犹如天文数字,所以我们一般都无法接触到这样的超级电脑。但目前形式发生了根本性的转变,现在人们更多地以一种机群(cluster)的概念来建造超级电脑,即使用大量的普通电脑通过网络之间的协作来构造超级电脑。

    世界上有一个top500.org的网站每半年会对全世界最强大的500台电脑做一个排名和总结研究,机群是目前500强中最流行的建造超级电脑的方式。

    利用普通电脑建造的机群也有很多种不同的形式,其中最主要的有两种:
    一是负载均衡机群,通常利用LVM等形式构造,特别适合于比如说提供繁重的www服务这样的工作。
    二是高性能机群,通常使用于科学计算---这也是当今世界超级电脑的主要用途。
    本文拟建造的超级电脑属于后者,也就是高性能科学计算机群式的超级电脑。

    建造一台高性能科学计算机群式的超级电脑的本质实际上就是在一群普通电脑上通过网络和必要的软件构造一个并行编程环境,而建造一个并行编程环境通常是利用PVM或MPI这两个软件来进行的,PVM(并行虚拟机)曾经是一个非常流行的并行编程平台,但是最近MPI已经成为了为机群编写并行程序的事实标准。

    超级电脑的作用是巨大的,尤其是在现在信息社会,一个国家的超级电脑计算能力通常是一个国家的国力的重要体现,有人甚至认为在当前的科学背景下一个国家的计算能力才是这个国家的第一生产力----这其实就是本人自己提出的一个观点 本文建造的超级电脑虽然非常的初级,但是已经具备了超级电脑的雏形,作为中学的一个课外活动,对于普及超级电脑的教育,消除人们对超级电脑的神秘感,还是很有帮助的。

二 高性能科学计算机群式的超级电脑的具体建造过程:
1 硬件建设:
    硬件环境的建设很简单:就是八台配置一样的普通PC(P3 866M,256M内存)以百兆网卡连接在百兆交换机上,本文的目标就是将这八台普通PC构建为一个适于科学计算的机群---也就是超级电脑了。

2 操作系统的安装:
    目前的机群建设大抵是基于开源软件的---选择Windows也是可以的,但是在建造的便利性和性能等方面都会打折扣---最新的top500里面的超级电脑统计数据显示只有一台超级电脑是基于Windows建造的,所以我选择Linux作为操作系统,当然使用我习惯的Debian,理由无他,安装软件非常方便。
    Debian的安装设置此处略。

    操作系统Debian安装好之后,还必须做一些设置和调整,主要有:
    1) #apt-get install etherconf
    安装这个软件是为了便于设置网卡参数。
    2) #apt-get install rcconf
    安装这个软件以取消一些不必要的服务,当然这步可省略。
    3) #apt-get install g77
    因为涉及到高性能的科学计算就必然涉及到Fortran----早期Fortran是科学计算的代名词----所以安装这个Fortran编译器。
    4) 在8台PC机器上安装好Debian系统,IP依次设置为
     192.168.1.101  ----   192.168.1.108
     机器名字依次设置为:
     hpc1 hpc2 hpc3 ..... hpc8
     这里你可以按照自己的情况做修改。
    5) 在每台机器上编辑/etc/hosts文件,添加下列的行:
     192.168.1.101     hpc1.test.com  hpc1
     192.168.1.102     hpc2.test.com  hpc2
     ......
     这里的作用是为了使系统能正确解析域名,显然我的域名假设为test.com
    6) 在每台电脑上编辑/root/.rhosts,文件内容全部为:
     hpc1.test.com root
     hpc2.test.com root
     ......
     这里的作用是告诉系统,哪些电脑的哪个用户可以通过rlogin rsh的方式登陆以及远程操作本系统。
     PVM也可以通过ssh而不是rsh来远程操作,应该更安全,显然我这里根本不考虑安全问题,设置都使用root帐号来操作。

     另外一种方法是在每台电脑上编辑/etc/hosts.equiv文件,内容均为:
     hpc1.test.com
     hpc2.test.com
     ....

    下面开始安装并行编译环境PVM和MPI,本来可以通过Debian本身的便利的apt-get方式来安装这两个软件,但我都选择了更为复杂的从源码编译的方式来安装,原因是:
    1) 使用这两个软件的最新版本
    2)掌握更为通用的构建PVM环境的方法。
    3) 使用源码中的示例程序、帮助文件等资源。

  4 在Debian下面建设PVM环境:
   整个过程是:
   1) 在每台机器上编辑/root/.bashrc文件,在其中加入两行:
     PVM_ROOT=/root/pvm3
     export PVM_ROOT
     这是因为PVM_ROOT这个环境变量很重要,一定要设置正确,我这里显然是把pvm安装在/root/pvm3下面了

   2) 下载最新源码并解压:
     # cd
     # wget http://www.netlib.org/pvm3/pvm3.4.5.tgz
     # tar zxvf pvm3.4.5.tgz

   3) 编译PVM系统:
     # cd pvm3
     # PVM_ROOT=/root/pvm3
     # export PVM_ROOT
     # make

   4) 重要!
     在每台电脑上:  
     #rm -rf /tmp/*
     一般的帮助文件都没有强调这个步骤的重要性,但我早期的多次失败都是因为省略了这个步骤。

   5) 启动PVM
     # cd
     # pvm3/lib/pvm   之后进入PVM控制台.
     pvm> add hpc2.test.com
     pvm> add hpc3.test.com
     .....
     你可以查看:
     pvm> conf
     或者运行那些examples试试。
   
     好了,PVM环境已经构建完成。

  5 在Debian下面建设MPI环境:
   需要说明的是,MPI只是一个标准而不是软件的名字---这点有别于PVM,具体实现MPI标准的软件有好几个,其中最出名的是MPICH和LAM,本文选择的是前者。
   整个过程是:
   1) 下载最新源码并解压:
     # cd
     # wget http://www-unix.mcs.anl.gov/mpi/mpich/downloads/mpich.tar.gz
     # tar zxvf mpich.tgz
     # ln -s mpich-1.2.7p1 mpich   建一个符号连接简单一些

   2) 编译MPI系统:
     # cd mpich
     # ./configure      
        全部用缺省的参数,如果要修改如系统的架构、使用ssh登录、安装到不同的目录等,要在这里设置,比如说:
       ./configure -rsh=ssh
       就可以使用ssh来替代rsh了。
     # make

   3) 编译一个测试的程序:
     # cd /root/mpich
     # cd examples
     # cd basic
     # make cpi

   4) 把mpich目录复制到其他每台电脑的相同位置

   5) 启动MPI
     # cd /root/mpich/examples/basic
     # ../../bin/mpirun -np 6 cpi
     这时候,发现程序的结果显示所有的进程都是运行在本机上,为了启动其他机器来运行进程,必须要告诉系统mpi还可以使用那些电脑,修改/root/mpich/util/machines/machines.LINUX文件,内容为:
     hpc1.test.com
     hpc2.test.com
     .....
     再重复上述的测试过程,可以发现进程出现在不同的机器上了。

     好了,MPI环境已经构建完成。

     (还有几个问题:1 如何解决每次启动都要输入密码的麻烦,PVM也有同样的麻烦。2 p4等device具体是指什么?3 使用NFS应该更简单一些吧?实验一下。)
     
     本文的超级电脑就造好了。

三 性能测试:
    超级电脑造是造好了,但是我的超级电脑的性能又如何呢?

    衡量超级电脑的指标有好几种,其中最负盛名的就是Linpack, LINPACK是一个用Fortran语言编写的线性代数软件包,主要用于求解线性方程和线性最小平方问题,虽然不少人质疑使用Linpack来衡量超级电脑的性能的正确性而且Linpack本身也在向Lapack过度。但由于top500.org排名世界超级电脑500强的时候就是使用这个标准,所以我也打算用Linpack来测算一下我的超级电脑的性能。

    下面是在前面建造的超级电脑上安装、使用Linpack的全过程:
    1) 建立工作目录,方便后继工作:
       # cd
       # mkdir linpack
       # cd linpack
    2) 下载Linpack所依赖的包Blas,因为有现成的编译好的包,所以这里我没有下载源码编译:
       # wget http://www.netlib.org/blas/archives/blas_linux.tgz
       # tar zxvf blas_linux.tgz
       得到这个blas_linux.a这个文件就可以了,可以忽略其他错误显示。
    3) 下载一份并行版本的linpack并设置、编译:
       注意我们现在是在并行编译的环境下测试linpack,所以需要一份并行版本的linpack,这也有多种实现,我选择了HPL。
       # http://www.netlib.org/benchmark/hpl/hpl.tgz
       # tar zxvf hpl.tgz
       # cd hpl
       # cp setup/Make.Linux_PII_FBLAS Make.Linux   这是根据模版之一创建一个适合于自己电脑的makefile文件。
       # nano Make.Linux           
       修改这个makefile文件,一是要把文件中的Linux_PII_FBLAS该为现在自己命名的Linux,而其余五个地方的修改主要是设置正确的文件路径,针对本文的情况设置如下:
      TOPdir = /root/linpack/hpl             (设置hpl的路径)
      MPdir = /root/mpich                    (设置mpich的路径)
      LAlib = /root/linpack/blas_linux.a     (设置blas库文件的位置)
      CC = /root/mpich/bin/mpicc             (设置C并行编译器的位置)
      LINKER = /root/mpich/bin/mpif77        (设置Fortran并行编译器的位置)
       # make arch=Linux      
      正常编译的话就可以在hpl/bin目录下生成两个文件,一个xhpl是测试程序本身,另一个HPL.dat是控制hpl运行的参数文件,你可以通过修改这个文件中的内容以控制hpl的运行。
   4) 将linpack目录复制其余电脑的相同目录下。
   5) 运行测试:
     # cd /root/linpack/hpl/bin/Linux
     # /root/mpich/bin/mpirun -np 8 xhpl
   这样,linpack测试就在前面我们创建的超级电脑中----也就是由八台PC构成的机群----运行。
   不过很遗憾的是我的超级电脑的测试分数很不理想,峰值速度还没有达到1GFlops,而最新的世界计算机500强的入选成绩是1645.7GFlops。当然,我们这里建造的只是一台很初级的超级电脑,真正的超级电脑并不是普通PC简单的线形叠加,还需要做很多的优化的。

     (完成于20060201,0:28,利用2006新年的大年初一、初二、初三这三天中儿子午睡和晚上比我早睡的这两个时段,完成了所有的实验工作和写作)
发表于 2006-2-1 16:50:14 | 显示全部楼层
好文!值得精华鼓励,希望楼主多分享经验心得。

只是觉得那些rlogin,rsh,r...等有点隐患。。。
回复 支持 反对

使用道具 举报

发表于 2006-2-1 20:36:52 | 显示全部楼层
good.
thanks.
回复 支持 反对

使用道具 举报

发表于 2006-2-2 00:31:29 | 显示全部楼层
很強的文章; 推
回复 支持 反对

使用道具 举报

发表于 2006-2-2 14:10:35 | 显示全部楼层
强文啊,佩服
回复 支持 反对

使用道具 举报

发表于 2006-2-2 15:07:03 | 显示全部楼层
八台机器呀,可不可以用虚拟机实验呢?
回复 支持 反对

使用道具 举报

发表于 2006-2-2 17:04:06 | 显示全部楼层
wen 老师的文章要顶
回复 支持 反对

使用道具 举报

发表于 2006-2-3 13:28:02 | 显示全部楼层
很受启发!很受启发!一直对超级计算机有很多疑问,这一篇就解决了一半。
回复 支持 反对

使用道具 举报

发表于 2006-2-5 10:57:29 | 显示全部楼层
支持WEN兄
回复 支持 反对

使用道具 举报

发表于 2006-2-7 22:51:56 | 显示全部楼层
新年就看到好文,支持!
回复 支持 反对

使用道具 举报

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

本版积分规则

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