无论是中国还是外国,都有一个“石头汤”的寓言。寓言中讲到一个掉队的士兵来到了一个非常贫穷的村庄,他对村民们说他可以只用一个大锅和一个石头就做出一锅可口的汤。刚开始煮的时候,村民对此非常怀疑,但不久以后就有村民为其提供了一些白菜、几个胡萝卜、一点牛肉……最终,这口大锅里盛满了足以让大家喝饱的汤。这个寓言说明,团结一致在有些时候可以做到一些意想不到的事情。即使我们每个人所做的贡献可能是微不足道,但把这些贡献汇集起来就可以做成一些大事。
Hargrove和Hoffman两位科学家正是利用了寓言所阐述的道理来构建自己的超级计算机。通常,功能强大的计算机可以达到每秒数十亿次的处理能力。大部分超级计算机采用的都是并行处理的技术。它们通常配备有很多功能强大的处理器,用来解决天气预报、原子弹爆炸模拟等复杂的问题。这些超级计算机一般由IBM、SGI等业界巨头生产,其价格也高得惊人,大都需要上千万美元。对于经费紧张的科学研究小组来说,这显然过于昂贵。于是一些实验室和大学里就开始使用廉价的PC来自己构建超级计算机,并且自己编写软件来处理一些非常复杂的问题。
问题的提出
1996年,ORNL(Oak Ridge National Laboratory,美国田纳西州橡树岭国家实验室,http://www.ornl.gov/)的Hargrove和Hoffman在工作中就是遇到了一个问题。他们需要绘制一个美国的生态地图,该地图包含的信息有:气候相同的区域、地形和土壤特征等。为了创建美国大陆的高分辨率地图,需要将国家分成 780万个小方格,每个小方格代表一平方公里。而每一个方格中需要考虑的变量多达25个。很显然,PC或者普通的工作站不可能完成这样的任务。也就是说,他们需要一个具有并行处理能力的超级计算机来完成这项工作,但这种计算机的价格已经远远超出他们的承受能力。
最后,他们采取的解决办法是使用ORNL准备丢弃的陈旧计算机和捐赠得来的计算机建造一个计算机集群。该集群被命名为“石头汤计算机 (Stone Souper Computer,http://stonesoup.esd.ornl.gov)”。之所以采用这样的名字,是为了表示建造它主要依靠的是各界的捐赠。结果这个由废弃PC组成的超级计算机功能非常强大,它为Hargrove和Hoffman绘制出了高分辨率的生态地图。当时,其它的研究小组更是采用同样的方法设计出了可以和世界上最好的超级计算机相媲美的计算机集群系统。由于具有极佳的性价比,这种方法同样也受到了厂商和公司用户的极大关注。事实上,这种集群的概念为所有的研究组织、学校和企业机构提供了非常强大的处理能力,从而引起了一场观念上的变革。
集群系统的起源
把计算机连接起来提供强大的计算机能力的方法由来已久。早在20世纪50年代,美国空军就建立了一个名为SAGE的网络真空管计算机,用于预防前苏联的核攻击。20世纪80年代中期,DEC公司将其中端VAX小型机整合到了更加大的系统中,并且最终提出了“集群”一词。当时,网络工作站 (一般比小型机慢但比PC机快)在研究机构中得到了非常广泛的应用。到20世纪90年代,由于微处理器芯片和以太网设备的价格大幅下降,科学家们开始考虑建造一个PC集群。
而软件的发展也为建造PC集群做好了充分的准备。20世纪80年代,Unix成为了科研领域应用最为广泛的操作系统。不幸的是,该操作系统缺乏在PC上应用的灵活性。1991年,Linux诞生,当时Linus Torvalds将其免费放在Internet上供人下载。在很短的时间里,成千上万的程序员开始为Linux的发展做出贡献。现在Linux已经成为了举世瞩目的操作系统,而它也是建造PC集群的理想操作系统。
第一个PC集群于1994年诞生于NASA戈达德空间飞行中心(NASA Goddard Space Flight Center)。此前,NASA一直在寻找一种廉价的,可以解决地球和太空科学领域里有关计算的一些问题的方案。科学家们需要一台可以达到 gigaflops(每秒可以达到10亿次浮点运算,一次浮点运行相当于进行一次加或者乘的简单运算)运行级别的计算机。在当时,能够达到这个运行能力的超级计算机的价格大约是100万美元。这对于从事某一领域研究的科研小组来说实在是太贵了。
当时,一个名叫Sterling的科学家决定自己购买PC然后建造一个集群。Sterling和他在戈达德研究中心的同事Donald J. Becker总共连接起了16个PC。每个PC包含有一个Intel 486处理器,使用的操作系统是Linux,连接设备也是普通的网卡。当时,这个PC集群达到了70megaflops的运算能力,即每秒钟可以进行7千万次浮点运算。虽然从今天的标准来看,这算不了什么,但在当时,这已经达到了一些商业小型超级计算机的运算能力。而当时这个集群只花费了4万美元,只相当于1994年时具有同等计算能力计算机十分之一的价格。
NASA的研究人员将他们建造的集群称之为Beowulf(http://www.beowulf.org)。从此以后,这个名字就成为了使用PC的低成本集群系统的代名词。1996年,出现了Beowulf的两个继承者:Hyglac(由加利佛尼亚技术学院和美国Jet Propulsion Laboratory的研究人员建造)和Loki(它由美国的Los Alamos National Laboratory建造)。这两个集群分别使用了16个Intel Pentium Pro 200 CPU,网络为100Mbits/s Fast Ethernet,操作系统采用 Linux,数据传输用 MPI (Message Passing Library) 。它们的性能都达到了1gigaflops,而价格则都低于5万美元。
“石头汤计算机”的构建
看起来,采用Beowulf的方法似乎可以满足Hargrove和Hoffman绘制美国生态地图的要求。因为每一台单一的工作站只能处理几个州的数据,而他们不可能将不同的区域分配给不同的工作站来处理(因为整个国家中每个部分的环境数据都必须同时进行比较和处理)。换句话说,他们需要一个能够进行并行处理的系统。于是,在1996年,Hargrove和Hoffman向自己的上级部门提交了一个申请,准备购买64台包含奔腾2处理器的 PC来建一个和Beowulf类似的集群系统。然而,这个计划却没有得到批准。出于无奈,他们决定寻求替代的方案。他们获知美国能源部橡树岭办公室经常会使用一些新的PC来替代旧的PC,而这些旧的PC则会在内部网上作为废弃的设备进行拍卖。而现在就有数百台被废弃的机器等着处理。于是,他们开始在 ORNL一个闲置的房间里通过收集废弃的PC来建造“石头汤计算机”。
并行计算系统的设计理念是“各个击破”,也就是并行系统将一个复杂的问题分解成了一些小的任务。然后这些任务被分配到了系统的各个节点 (比如Beowulf集群中的PC),而这些节点可以同时处理问题。并行处理的效率在很大程度上取决于所要处理的问题。一个需要考虑的非常重要的因素是各个节点之间以什么样的频率进行中间结果的共享。有些问题必须被分成无数细小的任务,而这些过于细化的分配需要各节点间进行频繁的通信,因此并不适于进行并行计算。与之相比,一些问题可以被分成比较大的子问题,而这些子问题间无需频繁的通信,因而通过并行系统处理起来就要快得多。这样的问题就比较适于使用这种系统来处理。
在构建任何一个Beowulf集群之前,都要对所要构建的系统进行一些设计。连接PC的方法可以选择普通的以太网,也可以选择更加专业快速的网络。由于缺乏预算,Hargrove和Hoffman采用了普通的以太网进行连接,因为这是免费的。他们选择其中一个PC作为前端节点,并且在其中安装了两个网卡。其中一个网卡用于和外面的用户通信,另外一个则和剩下的节点进行通信,而这些节点则通过自己的专有网络进行连接(如图1)。各个PC之间的合作是通过相互之间传送信息来完成的。现在有两种最流行的信息传送方式,其中一种是MPI,它的全称是Message Passing Interface。另一种是PVM,它的全称是Parallel Virtual Machine。MPI和PVM各有各的优点,PVM虽然应用得比较早,但缺少标准化,它比较适用于异种机环境。比较来看,PVM的性能较低,而且它的函数功能不如MPI丰富。MPI不仅提供大量的函数功能,并且它有一个共同遵守的标准受到广泛的支持。MPI的发展也很快。二者都可以免费从网上获得。在 “石头汤计算机”的建造中,两种方式都被使用到了。
很多Beowulf集群系统的硬件组成都很一致,也就是说所使用的所有PC的处理器和其它硬件都一样。这种一致简化了集群的管理和使用,但却并不是必须的。“石头汤计算机”就包含了各种处理器,因为它在建造之初的设计就是使用所有可用的设备。刚开始,“石头汤计算机”包含有一些使用 Intel 486的机器,接下来,使用的机器至少都是奔腾以上,且内存至少为32MB,硬盘则为200MB以上。
事实上,在建造这个集群系统的过程中,Hargrove和Hoffman发现很少有机器可以满足这种需求,于是他们就将不同PC的比较好的组件组合在一起。
每为集群添加一个节点,他们就为其安装上Linux操作系统。后来他们更是简化了这个过程,使得每一节点的安装过程更加简便。“石头汤计算机”第一次运行是在1997年。到2001年的时候,其所包含的节点已经达到了133个。这其中包含有75个486 PC、53个奔腾机器和5个Compaq公司产的Alpha工作站(如图2和图3)。
对“石头汤计算机”的升级过程非常简单,只需要将其中最慢的节点进行替换即可。作为集群的一个例行任务,每隔一个小时,每一个节点就会进行一次简单的速度测试。测试得到的值将帮助对集群进行调整。与商业机器不一样的是,“石头汤计算机”的性能一直在持续上升,因为它会不断得到来自各方免费赠送的机器对其进行升级。
并行处理问题
与设置和装配Beowulf系统的硬件相比,并行程序的开发更需要技巧和创造力,因而也更具有挑战性。Beowulf集群中最常用的程序模式是Master-Slave。这种模式中,一个节点作为Master,它负责指挥与之相关联的一个或者多个Slave。
另外一个挑战是在集群中的PC间实现负载均衡。因为“石头汤计算机”中包含有各种不同速度的处理器,所以不能将工作量进行平均分配(因为这样将导致快的机器长时间等待慢的机器)。解决这个问题的办法是开发一个算法程序,让Master给那些更快完成数据处理的节点传送更多的任务。这样,那些快的PC就可以做更多的工作,而速度慢的机器也可以被充分利用起来。
最终效果
经过一段时间的努力,Hargrove和Hoffman终于使用“石头汤计算机”成功绘制出了完整的美国生态地图。该地图于1999年在波特兰举行的超级计算机年会上在ORNL的展台上展出(如图4)。
除了绘制当前的生态地图外,功能强大的“石头汤计算机”还可以预测出随着全球气候变暖的影响,2099年时美国生态地图的情况。图5显示的就是分别采用两种模型(British Hadley模型和Canadian Climate Centre模型)得出的结果。
小结
据称,“石头汤计算机”的峰值处理能力曾达到过150gigaflops。不过该集群系统的建造者坦言,他们从来没有对该集群系统做过正式的性能测试。他关心的是能够使用该系统来完成他们的工作,不过他们也表示,该系统的理论处理能力应该达到1.2gigaflops左右。
在写本文的时候,“石头汤计算机”集群系统已经在完成了它的使命之后停止了运行。不过作为开放源码应用的一个经典案例,该集群的网站(http://stonesoup.esd.ornl.gov)至今也没有关闭。目的是让我们能够从中得到更多的启示。
就我国而言,集群系统有极其广泛的应用前景,它将促进我国系统集成的发展和自有软件开发和推广。以前一些在大型机运行的国外大型软件都是国外公司与国外计算机生产厂商的紧密合作开发出来的。而我国由于不可能得到一些计算机厂商的底层技术,因此大大限制了国有软件的发展速度及高性能计算的认识水平。现在许多国外大型软件公司都致力将软件移植到PC机系统上,而Linux的发展更是加速了这种更新的步伐。在集群技术日益发展和更新的今天,我们应紧跟国际发展趋势,研究我国的具体应用,开发出更高性能的自有集群系统,普遍提高我国高性能计算水平。
图1 “石头汤计算机”集群的结构
图2 “石头汤计算机”集群系统局部图
图3 “石头汤计算机”集群系统俯视图
图4 使用“石头汤计算机”绘制的地图
图5 预测的地图
链接
“石头汤计算机”简介
建造单位:美国田纳西州橡树岭国家实验室
计算机集群名:Stone SouperComputer
使用硬件:集群系统使用的是一个内部的以太网,前端系统可以分别连接至内部网和Internet。集群共有133个节点,其中有75个为处理器为Intel 486的PC,53个为处理器为奔腾的PC,5个为Alpha工作站。硬件主要来源是捐赠。
使用软件:128台Intel处理器PC使用的是RedHat Linux,5台Alpha工作站使用的是Digital Unix。用于信息传送的软件是MPICH、PVM和LAM/MPI。开发工具是GNU C、C++和FORTRAN编译器。