使用PVM的并行处理
PVM是免费软件,它提供使用若干联网(TCP/IP)机器作为并行虚拟机来执行那些并行性有利的任务的能力。我们在东方华盛顿大学(EWU)的计算机实验室之一中使用PVM,将Linux和Sun机器混合在一起,构成各种虚拟机。PVM附带丰富的示例和教程材料,使用户能够在相对较短的时间内达到合理的熟练程度。无需学习新的编程语言,前提是已经掌握C、C++或FORTRAN。通过两台或更多联网的Linux机器,可以运行PVM并研究并行编程。即使只有一台Linux机器,仍然可以运行应用程序并模拟并行性。
PVM由橡树岭国家实验室与几所大学联合开发,其中主要包括田纳西大学诺克斯维尔分校和埃默里大学。最初的目的是通过尽可能地利用并行性来促进高性能科学计算。通过利用现有的异构网络(最初是Unix)和现有的软件语言(FORTRAN、C和C++),无需花费新的硬件成本,设计和实施成本也降至最低。
典型的PVM由网络上(可能是异构的)机器混合组成,其中一台是“主”机,其余的是“工作”或“从”机。这些不同的主机通过消息传递进行通信。PVM在主机的命令行启动,主机进而可以派生工作进程,以实现PVM所需的宿主机配置。此配置最初可以通过配置文件建立。或者,可以从PVM命令行(主机的控制台)或在运行时从应用程序内部配置虚拟机。
大型任务的解决方案(适用于并行化)被划分为模块,由主进程派生,并根据需要在工作进程之间进行分发。PVM由两个软件组件组成:常驻守护进程 (pvmd) 和 PVM 库 (libpvm)。这些组件必须在作为虚拟机一部分的每台机器上都可用。第一个组件 pvmd 是每个本地机器上的应用程序与连接到 PVM 其余部分的网络之间的消息传递接口。第二个组件 libpvm 为本地应用程序提供必要的消息传递功能,使其能够与其他主机通信。这些库调用触发本地 pvmd 的相应活动,pvmd 处理消息传输的细节。消息被目标节点的本地 pvmd 拦截,并通过该程序内部的相关库调用提供给该机器的应用程序模块。
PVM 主页位于 http://www.epm.ornl.gov/pvm/pvm_home.html。从那里可以下载 PVM 软件,获取教程,获取最新的 PVM 新闻等。该软件经过 tar 和 zip 压缩,仅约 600KB。其中包含的 README 文件足以启动并运行,但必须强调教程的价值。教程可以从 PVM 主页下载,也可以以书籍形式获得。
以教程为指导,可以学习软件包中包含的示例。示例源文件内部文档良好,因此可以熟悉常用的 PVM 库调用。教程有一个非常好的章节,清晰详细地解释了每个库调用。这个过程基本上就是我们在 EWU 开始使用 PVM 的方式。
我们在 EWU 使用的网络拥有各种机器、架构和 Unix 版本。第一个挑战是学习如何配置这样的机器组合以形成 PVM。随着异构性的增加,情况变得不那么直接,而复杂的因素是各种不同的 Unix 版本。配置 PVM 的一种方法是使用 Unix rsh (远程 shell) 命令。这依赖于目标机器上是否存在 .rhosts 文件。从主机器开始,在从机器上启动 PVM 守护进程 (pvmd),以便将从机器合并到虚拟机中——主机器使用 rsh 来完成此操作。但是,只有当主机器列在目标机器的 .rhosts 文件中时,目标(从)机器才允许主机器访问。各种 Unix 版本在 .rhosts 文件的语法细节上并不一致,我们也无法总是找到相关的文档。还有其他几种配置 PVM 的方法,在大多数情况下,我们发现这是一门黑魔法。尽管如此,我们坚持不懈,并将我们的经验记录在一个早期的 PVM WebCourse 网站 (http://knuth.sirti.org/cscdx/) 上,供那些发现类似问题的人参考。
查看一个示例(参见清单 1 和 2)以了解编程的风格是很有启发性的。清单 1 中的源代码的可执行文件在主机的命令行启动,主机进而派生从机器上的第二个可执行文件。为简单起见,未包含错误检查。但是,PVM 提供了简单的方法来检查诸如 pvm_spawn 等库调用的失败情况。该示例改编自教程中的一个示例,仅测量主机器到从机器以及从机器到主机器之间简单交换传递消息所需的时间。特别是,主机器向从机器发送一个数组,从机器将每个元素加倍并将其发送回。主机器打印出初始数组、最终数组和数组的往返时间。
PVM 在我们的课程中找到了常规的位置。它提供了一种以廉价而现实的方式研究并行编程的方法。对于那些只习惯于顺序编程的人来说,思考一个复杂的并行编程练习是一个新的,有时是困难的演变。一旦学生们完成了教程材料,他们就会转向他们担任设计角色的问题,最后转向实质性的项目。
尽管 PVM 很快成为事实上的标准,但批评者指出,实际上并没有正式的、强制执行的标准。也很明显,消息传递比架构原生的优化协议慢。在 PVM 传播后不久,就提出了一个名为 MPI 的标准,即消息传递接口。相对于 PVM,MPI 具有优势(例如,更快的消息传递,一个标准)和劣势(例如,在异构架构之间不可互操作,不可动态重新配置)。PVMPI 是一个较新的项目,它将结合两种方法的优点。该项目的成功以及 PVMPI 的任何标准化努力可能会决定 PVM 未来的可行性。
Richard Sevenich 是东方华盛顿大学的计算机科学教授,对 Debian GNU/Linux 特别热衷。他的研究兴趣包括特定于应用程序的语言、工业控制的状态语言、模糊逻辑和并行分布式处理。可以通过电子邮件 rsevenich@ewu.edu 与他联系。