我认为描述Beowulf超级电脑架构最合适的方法是举一个真实的范例,并且是大多数系统管理者所熟悉的。那就是一个UNIX主机实验室,内有一台伺服端和一群用户端,更精准地说,我会举位在南昆士兰大学理学院DEC
Alpha大学部计算机实验室为例,伺服器被称为 beldin 用户端机器分别称为 scilab01, scilab02,
scilab03, 一直到 scilab20. 每台用户端内部都安装Digital
Unix 4.0作业系统,但是使用者文档空间(/home
)和 /usr/local
都是透过NFS(网路文档系统)从伺服端上获得,每个用户端都可以进入伺服端,并且所有其他的用户端都会记载在
/etc/hosts.equiv
文档内,因此每个用户端都可以用硬件操作壳(rsh)。伺服端也是整个实验室的NIS伺服器,因此所有的机器都有相同的帐号资料,某人可以坐在scilab02的控制台前登入,就像他登入伺服端或scilab15. 一样有相同的环境,所有的用户端有相同环境的原因在于所有的机器都安装和规划相同的作业系统,并且使用者的/home
和 /usr/local
区域实体上都位在伺服端上,可以透过NFS进入。NIS和NFS更进一步的
信息请参阅
NIS 和
NFS
HOWTOs.
现在我们对系统架构有些概念,让我们看看如何使用计算机实验室内可供使用的CPU。任何人可以登入任何一台机器,并且在每个人自己的目录下执行程序,他们也可以透过硬件操作壳在其他电脑上启动(spawn)相同的程序。举例来说,假设我们要计算1到10内整数平方根的总和,我们写了个简单的程序名为 sigmasqrt
(请参见
source code) ,为了得到结果,我们执行以下的步骤
[jacek@beldin sigmasqrt]$ time ./sigmasqrt 1 10 22.468278 real 0m0.029s user 0m0.001s sys 0m0.024s
time
指令可以告诉我们执行程序所花的时间(实际经过的时间),我们可以看到,这个例子只花了很短的时间(0.029秒),假如我想计算1到1,000,000,000内整数的平方根总和,让我们试试看,重新计算所花的时间
[jacek@beldin sigmasqrt]$ time ./sigmasqrt 1 1000000000 21081851083600.559000 real 16m45.937s user 16m43.527s sys 0m0.108s
这次执行程序所花的时间非常久,一个明显的问题就是我们如何加快执行的时间?我们该如何改变执行程序的方式以减少执行所花的时间?最明显的答案就是将整个工作分成许多小工作,并且同时在所有的电脑上执行,我们可以将加法的工作分成二十份,每个部份做一段开根号的工作,并加起来,当所有的节点完成计算,并传回来,将二十个数加起来就得到最后的答案。在执行程序之前,我们需要做个标有记号的输送管,可以让所有的行程写下它们的结果。
[jacek@beldin sigmasqrt]$ mkfifo output [jacek@beldin sigmasqrt]$ ./prun.sh & time cat output | ./sum [1] 5085 21081851083600.941000 [1]+ Done ./prun.sh real 0m58.539s user 0m0.061s sys 0m0.206s
这回我们花了大约58.5秒,这时间是从开始到所有的节点都完成计算,并将结果写到输送管,这个时间并不包括最后将二十个数加起来,不过那个时间非常地短,可以忽略不计。我们可以看到平行计算可以有效地改进执行程序,事实上这个平行工作整整快了约17倍,相对于使用了二十倍CPU数目,效率是相当合理的。上述范例的目的是要展示同时平行程序最简单的方法,实际操作上,如此简单的范例是很少见的,其他技巧(PVM和MPI APIs)经常用来达成平行的工作。
上述的计算机实验室算是一个工作站群(Cluster of Workstations,COW),那么Beowulf有何不同?它和COW有何差异?实际上二者没多大差别,不过Beowulf倒是有些不同的特色。第一、大多数的Beowulf群的用户端没有键盘、鼠标、显示卡和萤幕,所有到用户端的方式都是从伺服端、特定控制端或是序列控制端经过硬件连接登入,因为对用户端而言,从电脑群外登入电脑或是从外头的电脑直接登入用户端是没有必要的,用户端通常是使用私有的IP位址,例如从10.0.0.0到10.0.0.8或是192.168.0.0到192.168.0.16(参见RFC 1918 http://www.alternic.net/rfcs/1900/rfc1918.txt.html). 通常唯一要用到第二张网路卡对外连接的机器是伺服端,使用这套电脑群最常见的方法是直接进入伺服端,或是从个人工作站使用telnet或硬件登入伺服端。一但进入伺服端,使用者可以编辑和编译他们的程序,也可以在电脑群内的用户端上启动行程。大多数情形的COW是在晚上用来执行平行计算,和在人们不使用工作站的周末时间,使用闲置的CPU。而通常Beowulf专用来平行计算,并且对这些平行计算做最佳化,当利用市售电脑零组件和免费软件建构的Beowulf也提供较好的价格效率比,并且Beowulf给人一种单一系统的印象,很容易让使用者将Beowulf群看作是一台计算用工作站。