基于 Windows XP 的 PVM 的实现
摘 要 网络 并行 计算 已成为国际上并行环境 发展 的重要方向,本文介绍了 PVM 的概
念、组成、在 Windows XP 下的安装与配置及在该环境下两种编写程序的 方法 。 关键
词 并行虚拟机;并行程序设计环境;安装;配置;编程 1 引言 近年来,网络并行计
算已成为国际上并行环境发展的一个重要方向。首先,网络并行计算环境在硬件和软件方
面的成本都比并行计算专用工作站要低廉,更易于建立。其次,网络并行计算系统使用方
便,可扩展性强,更灵活。PVM ( Parallel Virtual Machine) 是并行虚拟机的简称,它通过
TCP/ IP 网络通讯协议将整个网络的多台计算机虚拟成一台并行机使用,是 目前 国内外比
较流行的并行计算环境之一。 PVM 需要一个多任务的操作系统平台,以便生成多个
PVM 进程,实现其虚拟并行机的功能。以前多任务的操作系统平台都是基于 Unix 或 Liunx
的,但由于 Windows XP 亦是 32 位的多任务操作系统且基于 Windows 的 PC 机在数量上
远远超过基于 Unix 或 Liunx 的机器,加之 PC 机所用 CPU 速度的迅速升级,由高速网络互
连的多台计算机可形成强大的计算能力。本文介绍了在 Windows XP 环境下 PVM 的安装,
配置与编程。选用的 PVM 版本为基于 Windows 的 。2 PVM 的组成 PVM 系统
由三部分组成。系统的第一部分是一个称为 Daemon Process 的守护程序,缩写为 pvmd
,它驻留在构成虚拟机的所有计算机上。守护程序是在后台执行的一种程序,在需要时随
时准备完成一个操作。它通常是在开始时启动的一种无人值守的被挂起的进程,它等待某
种事件发生,自动地被激活,执行作业。然后终止或将自身挂起,等待下一事件(邮件程
序就是守护程序的一个例子,它在后台运行,处理计算机上的所有输入和输出 电子 邮件)
。当用户指定了构成并行虚拟机的节点后,启动 PVM,就会在相应的节点上各自启动一个
pvmd3 进程,它们之间互相通信,共同管理各并行任务的执行和通信,从而构成了一个并
行虚拟机。并行任务之间的通信实际上是通过各 pvmd3 进程来实现的,因此每个 pvmd3
进程都起着不可估量的作用。 由于 pvmd3 是在后台运行的,因此它对于虚拟机中的机
器完成其它工作毫无 影响 。用户可在任意主机上开始执行 PVM 应用 ,多用户可以配置
重叠的虚拟机,并且每个用户可以同时执行若干个 PVM 应用。 系统的第二部分是一个
PVM 接口例行程序库 。它包含各种功能完备的原语,这些原语主要用于协调应
用任务。该程序库包括那些用于消息传递、创建进程、协调任务以及修改虚拟机等用户可
调用例行程序。PVM 可在体系结构互不兼容的计算机网络上透明地处理所有消息路径选择
、数据转换及任务调度等。PVM 计算模型是基于由若干个任务组成的应用,所有任务通过
这个标准接口例行程序库来访问 PVM 资源。此系统当前支持 C、C+ +和 Fortran 语言。
系统的第三部分是 PVM 控制台进程,相当于“并行虚拟机”的操作平台,可以交互式地
与用户工作。用户在此可以增加、删除节点机以及执行一些其它的控制命令,如启动、终
止一个 PVM 任务、显示某任务的状态等。3 Windows XP 下 PVM 的安装与配置 PVM 安
装应该说是比较容易的。 版本提供了安装软件包,只需按照其向导安装即可成
功(对于 以前的版本则需要用户添加一些环境变量)。 但是只安装 PVM 软件包是
不够的,如果要联机计算还需要安装 winsock rshd/ NT (在 WindowsXP 下)。rsh ( remote
shell) 实际上是一个在本地启动远程宿主机上应用程序的一个实用命令,PVM 就是利用初
启机上 rsh 命令来启动远程宿主机上 pvmd 的。但要使本地 rsh 命令能正常工作还需得到
远程宿主机上的 rsh 监控进程 rshd ( remote shell dae2mon) 的支持。一般来说,rshd 是
作为 Windows 操作系统的一项服务来使用,如果没有得安装。在 PVM 下配置虚拟机时必
须首先启动每台节点机上的 rshd 服务,否则 rsh 命令无法使用,虚拟机的配置当然不会
成功。 所需的软件 我们使用的是 Denlcomp Sysrems 公司的 RSHD/NT 软件,读
者可以自行在网上下载。Rsh 已经存在于 Windows Xp 的 system32 文件夹下。 所需
的文件系统 因为我们是将 PVM 运行在 Windows 下,所以我们使用 FAT32 文件格式,如
果运行在 Windows 2000 下,则必须使用 NTFS 格式,否则 PVM 会报错。 安装步骤
(1)点击图标 进行安装,安装时指定 Sever 版还是 Client 版,如果用于希望本地安装,
就选择 Sever 版,如果已存在 PVM 服务器,可选择远程 client 安装模式(不推荐使用)。
(2)接着需要指定 PVM 的安装目录(c:\ 和临时目录 c:\temp,如果没有得自
己提前新建),则安装程序会自动设置环境变量 PVM_ROOT 为 c:\,PVM_TMP 为
c:\temp,PVM_ARCH 为 WIN32。其中 PVM_TM:它定义临时文件的位置(PVM_TM=c:
\temp);PVM_ROOT:指定 PVM 的安装(PVM_ROOT= c:\)。 (3)安装过程中还
必须指定系统所用的 C 或 Fortran 编译器(笔者机器安装了 C++,没有安装 Fortran 编译
器,读者可以跳过)。指定后安装程序会自动搜索编译器所在目录并显示出来。 (4)安装
完成重启计算机,则 PVM 安装完毕。 (5)Winsock RSHD/NT 的安装。 将网上下载的
自解压软件包安装在用户硬盘的某一目录下(例如 c:\wrshdnt)。在安装
过程中可以选择每次启动 Windows 时即启动 rshd 服务。实际上用户随时可以通过“开始—
程序—WINSOCK RSHD-NT”来启动或停止 rshd 服务。4 PVM 并行计算环境的建立 (1)启
动所有机器上的 rshd 服务。 (2)在开始——程序—— 中,点击 PVM Console 图
标,将打开 PVM 控制台,并启动 pvmd 后台伺服程序,以上工作完成后会出现以下提示
符:pvm> 注意,如果点击 PVM Console 时,出现不能启动 pvmd 的错误信息时,只需
将 PVM_TMP 目录下的 pvml.<uid>和 pvmd.<uid>(<uid>代表本机登录用户名)两文件删除
,然后进行步骤(2),即可顺利启动,因为此两文件记录上次 PVM 运行过程中的错误信息
,如果上次 PVM 运行过程中出现错误,那么将影响本次 PVM 的启动(程序不会把这些文件
自动清空,所以只有手动清空或删除了)。 (3)在 PVM 控制台用 add 命令添加节点机。
我们条件有限,只有三台机器(都为 WIN32 机器,操作系统:winxp sp2)。命令格式如下
: pvm > add“主机名 dx = c:\\lib\win32\ lo=登录名 so=口令” 由
以上命令格式可以看出,除了主机名外,我们还必须指定此主机的守护进程 所
在的位置(我们安装在 c:\\lib\win32 目录下);而且如果使用不同的登录名添加时
,还必须输入登录名和口令。5 PVM 无法正常启动或节点机无法添加的原因 分析
(1)PVM 的临时工作目录是否已建立,该目录的位置与安装 PVM 时的设置一致。 (2)
网络是否通畅,可以用 rsh 命令来测试一下。例如 c:\rsh 主机名 dir c:\ ( 列出指定远
程主机上的 C 盘根目录)。
(3)所要添加的节点机上的 rshd 服务是否已启动。PVM 控制台是一个标准的、交互式
PVM 进程,类似于外壳(shell),用户通过键入命令来管理虚拟机、调用 PVM 应用 作业以
及监控作业的执行。表 1 列出了常用的一些 PVM 控制台命令,关于其它命令的说明和使
用 方法 ,在此不作说明。经过以上六个步骤,pvm 的安装和配置就基本完成。环境配置
好后,下一步工作就是编写程序,使之运行于 pvm 环境中了。表 1 主要的 PVM 控制台命
令 pvm>add apple 将主机 “ apple” 加入到虚拟机中 pvm>delete apple 从虚拟机中删除主
机 “ apple”pvm>conf 列出虚拟机的配置 pvm>spawn –count 4 app 在虚拟机上启动 4 个
任务运行 “app”pvm>halt 中止所有 PVM 进程,关闭 PVM6 PVM 的编程模式 使用 PVM
进行程序设计的一般方法为:用 C 、C++或 Fortran 语言编写一个或多个含有对 PVM 库嵌
入式调用的顺序程序,每个程序对应于一个构成该应用的任务。PVM 应用程序常采用“群
型” 计算 模式,这种模式从程序的结构上又可分为两种,即主从模式和对等模式。主从模
式又称为\Masher/slave 模式。在这种模式的应用程序中,单独执行控制程序的一个进程
称为主进程(master)。负责生成其它进程,初始化,收集并显示结果等。执行从程序的若
干进程称为从进程(slave),由主进程生成,做实际的计算,它们的工作负载由主进程分配
或由从进程本身分配。对等模式又称为 SPMD 模式。在这种模式的应用程序中,所有进程
都执行同一个程序,但计算的数据不同。其中,有一个进程在完成自己的计算任务的同时
还负责非计算的功能,比如初始化,收集并显示结果等,具体选用哪种模式应视具体应用
而定。 Ma ster/ Slave 并行程序的基本框架 MasterPSlave 并行编程模式中,
Master 主进程产生 n 个工作进程,其中第一个工作进程在指定的结点机上运行,其余的
由 PVM 选择合适的结点机上运行,在这些结点机上运行的都是 Slave 从进程。Master 主
进程是应用程序的控制进程,负责进程的生成、初始化、收集数据并显示计算结果,其余
的 Slave 从进程执行实际计算工作。在执行 Master 主进程的结点机处于等待状态时,
PVM 会自动执行 Slave 进程使该结点机也参加实际的计算工作。因此,需要编写 2 个程序
,即 Master 进程和 Slave 进程。Master:Pvm_ mytid ();/进入 PVM,获得主进程的
tid/Pvm_ spawn ();/ 生成 n 个从进程 /初始化;向各个从进程发送消息 for 所有结点机
{pvm_ initsend ();/创建新的活动发送缓冲区/pvm_ pk();/数据打包/}endforpvm_ barrier
() /等待各个从进程发送消息/for 所有结点机 {pvm_ recv ();/接收从进程发送的消息
/pvm_ upk ();/数据解包/}endfor 显示最终结果 Pvm_ exit ();/离开 PVM /Slave 进程:
Pvm_ mytid ();/进入 PVM,获得从进程的 tid/等待主进程发送消息 pvm_parent ();/获
得主程序的 tid /pvm_ recv();/接收主进程发送的消息/pvm_ upk ();/数据解包/计算;
等待主进程接收消息 pvm_ initsend ();/创建新的活动发送缓冲区/pvm_ pk();/数据打包
/向主进程发送消息 Pvm_send();Pvm_exit();/离开 PVM/ SPMD 并行程序的基本框
架 SPMD 模式的并行应用程序采用任务组机制。第一个启动的应用程序拷贝负责创建
任务组且获得成员号 0,同时还负责启动其它应用程序拷贝并完成一些非计算任务:如初
始化、归约运算结果等。下面是典型 SPMD 并行应用程序的基本框架。 begin
pvm- joingroup (groupname);/ 如果任务组不存在则创建该组,否则加入该组 /
pvm-parent (); / 获得父进程的 tid /if 组成员号= 0 then
pvm- spawn ();/启动其它应用程序拷贝 /
一些非计算任务,如输入,初始化等;
endif
for 所有进程 pardo
在各自的数据区进行计算;
endfor
if 组成员号 = 0 then
归约各进程的运算结果并输出;
endif
pvm- barrier ();/同步所有进程/
pvm- lvgroup () /离开任务组/
pvm- exit ();/退出 PVM 3 /end7 结论 总的来说,基于 Windows XP 的 PVM 环境
提供了可靠的并行计算环境,针对 目前 Windows 比较流行的状况,它为我们提供了一个
很好的利用机群实现并行处理的方案。另外,也使我们有可能在一台机器上运行多个相互
通信的进程。利用 Windows 系统上的丰富的资源,我们还可以开发出更强大、更实用的
PVM 应用程序。 参考 文献 [1] 黄铠,徐志伟著,陆鑫达等译. 可扩展并行计算技术.结
构与编程.北京:机械 工业 出版社,2000,450—455[2] 陈国良著.并行计算—结构、
算法、编程.北京:高等 教育 出版社,1999 348-352[3] PVM3 FOR WIN32 http:
// win32/[4] Winsock rshd/nt http:
// homepages/denicomp [5] http:
//