How Does the PVM Library Work?
The PVM library is a software package that permits a heterogeneous collection of computers hooked together by a network to be used as a single large computer with multiple processors. The library provides the developer with the facilities to write and run programs that exploit parallelism. In addition to presenting a network of computers as a single multiprocessor machine, the PVM system can be used with a single computer that has multiple processors. It can also be used with computers that fall into the massively-parallel processors (MPP) class.
The PVM system is divided into two basic parts:
Library of PVM interface routines
Daemon that will run on each machine that makes up the virtual machine
The interface routines are implemented as a library of functions that are callable from C, C++, and Fortran. The PVM daemon (pvmd) is the piece of software that manages the messaging, communication, authentication, and process control of the local PVM processes. The pvmds on each computer in the virtual machine communicate with each other in order to get the job done. A PVM program can be looked at as a collection of workers that work together to solve a problem. Each worker is implemented as a standalone program. Copies of the standalone programs are compiled and stored on each computer that will participate in the virtual machine. When the PVM program is executed, the PVM daemon that runs on each computer in the virtual machine simultaneously starts one or more of the standalone programs. Figure 1 shows the logical structure of a PVM program.
Figure 1 Basic architecture of the PVM environment.
Each of these worker programs has a task(s) to perform. The developer looks at the PVM program as a collection of workers that must cooperate and communicate during the execution of some task. To the virtual machine, those workers are a collection of processes that are simultaneously executing and that require synchronization and communication. Fortunately, the PVM system handles all message routing, data conversion, and task scheduling across the network or between the processes in a multiprocessor computer.