10.0.0.1 node1 10.0.0.2 node2 10.0.0.3 node3 10.0.0.4 node4每一个节点的/etc/hosts.equiv文件应该如下所示:
node1 node2 node3 node4 .< /CODE>一个节点号为2,使用Red Hat Linux的ifcfg-eth0配置文件如下所示:
DEVICE=eth0 IPADDR=10.0.0.2 NETMASK=255.0.0.0 NETWORK=10.0.0.0 BROADCAST=10.255.255.255 ONBOOT=yes此外,我们还经常需要一个DNS,对于那些节点名字和地址经常变化的内部网络更是如此。DNS可以运行在第一个节点来为内部网络的节点提供名字/地址的解析。 本地存储 在加载操作系统的问题上,创建Beowulf集群需要预先做一些存储方面配置的决定。因为一旦安装完成后要进行更改就要重新安装所有的节点,所以一定要进行非常细致的考虑。虽然大部分基于Linux的Beowulf集群运行的是都是Red Hat Linux发行版,但事实上,基本上所有的Linux发行版都支持基本的集群。Red Hat的安装非常简单,我们可以使用光盘或者通过集群的第一个节点进行安装(前提是在节点上已经有一份发行版拷贝)。在实际的使用过程中,很多人发现从主节点通过FTP把操作系统加载到每一个节点要比通过NFS挂载Root分区好。这种方法避免了一些不必要的网络通信,在应用程序运行时保留带宽用于信息的传送。 Red Hat Linux运行环境只需要每一个节点有大约100MB的磁盘空间,不过,在实践中发现在每一个节点包含一个编译和一些其它的工具还是非常必要。因此,在配置中,每一个操作系统需要大约175MB的磁盘空间。虽然有一些集群将交换分区配置在了普通的文件系统上,但在本地磁盘上使用一个专门的交换分区才是一个更高效的选择。一般而言,节点的交换空间的大小应该是内存的2倍,而当内存大于64MB时,交换空间应该等于内存的大小。在实际中,当内存为64MB至 128MB时,我们通常将交换分区设为128MB。因此,如果某一个节点有32MB内存,有2个硬盘,那么我们就应该将Linux系统加载至主驱动上,而将另外一个硬盘用作交换空间(64MB)和本地运行空间(138MB)。 集群管理 系统管理和维护是一件非常乏味的工作,对于大型的集群更是如此。不过,我们可以从网上找到一些工具和脚本来简化这些工作。比如,一个节点必须在时间和系统文件(/etc/passwd、/etc/group、/etc/hosts、/etc/hosts.equiv等)上与其它的节点保持同步,那么一个简单的可以被cron定时执行的脚本将可以来完成这个同步过程。 一旦所有的节点都加载和配置完成后,我们就可以来开发和设计并行应用程序来充分利用新系统的运算能力。 为集群计算开发并行应用程序 在Linux下,我们可以使用商业编译器,也可以使用免费的编译器。GCC、g++和FORTRAN(g77)编译器被包含在了大部分的Linux发行版中。其中C和C++编译器已经非常优秀,而FORTRAN编译器也在不断的进步之中。商业编译器则可以从Absoft、 Portland Group、The Numerical Algorithms Group等公司获取。如果配置适当,一些商业的FORTRAN-90编译器可以自动实现并行计算。一般来说,开发并行代码需要在处理器之间使用PVM (并行虚拟机)、MPI(信息传送接口)或者其它的通信库来进行清晰的信息传递。PVM和MPI都是免费的,并且可以在计算的过程中通过简单的库调用来实现节点的之间的信息传递。 当然,并不是所有的计算任务都适合用并行计算来实现。一般而言,为了充分利用并行计算的优势,通常要对针对任务进行一些开发工作。很多科学问题都可以进行细分,也就是可以将其分解为相对独立的模块,以使其可以在各个独立的节点进行处理。比如,图像处理任务通常可以再细分,让每一个节点都可以处理某一部分的图像。当某一图像可以被独立处理时(比如处理这部分图像不需要其它部分的信息),效果更好。 对于并行计算来说,最危险的缺陷就是将一个计算问题变成了一个通信问题(不管是使用现有的并行运算代码还是自己新开发代码)。这种问题一般发生在将任务过分细化,从而使得各个节点为了保持同步而传输数据的时间超过了CPU进行计算的时间。在这种情况下,使用更少的节点反而可能会获得更多的运行时间和更充分地利用资源。这就是说,对于不同的并行应用程序而言,要根据本地节点计算的负载和通信来进行调整和优化。 最后要说的是,在开发并行算法时,如果所使用的集群环境的节点各不相同,那么就要充分考虑到这个问题。事实上,在运行并行应用程序时,各个节点间CPU的速度是非常关键的,因此,在一个配置不同的集群中,只简单地将任务平均分配,那么速度比较快的CPU就必须要等待速度比较慢的 CPU完成自己的任务,这显然是不合理的。因此,设计适当的算法可以很好地处理这种情况,当然,不管采用什么样的算法,一定要充分考虑到通信过载问题。 并行处理可以以很多种方式来组织,但是master/Slave的组织方式是最易于理解和编写程序的。在这种模式中,一个节点作为master,而另外一个则作为Slave。Master节点通常决定如何分割任务,以及指挥信息的传送,而Slave节点则只负责处理分配到的任务,并在任务完成的时候向master报告。 总结 事实上,在开发并行代码时,并没有严格的规定,而是要根据实际情况来进行。优化硬件配置和算法的前提是要知道所要运行的应用程序的细节。在各个节点配置不同的集群中,在各个节点中进行负载平衡以及各个节点中的通信都取决于硬件的具体情况。在通信速度快的环境里,可以将任务分得更细,反之则不宜将任务过分细化。 应该说“Beowulf运动”将并行计算大众化了。在Beowulf系统中使用标准信息传送库开发的并行代码可以不经过任何更改就直接运行在商业级的超级计算机之上。因此,Beowulf集群可以作为一个入门的切入点,在需要时再将其过渡到大型机上。此外,廉价、通用的集群意味着并行计算机环境可以用于特定的任务,而大型的商业超级计算机由于其过于昂贵,故不可能使其专注于某个单一的应用程序。很显然,随着并行环境越来越多地被应用到现实工作,将会更进一步促进其在各个领域的应用。
(出处:http://www.sheup.com)