Beowulf 中文HOWTO( 三 )








--------------------------------------------------------------------------------


--------------------------------------------------------------------------------

3.;架构简介


3.1;它长什麽样?;
我认为描述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.;



3.2;如何有效利用其他节点?;

现在我们对系统架构有些概念,让我们看看如何使用计算机实验室内可供使用的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)经常用来达成平行的工作 。;

推荐阅读