PVM is a software package that permits a heterogeneous collection of serial, parallel and vector computers hooked together by a network to appear as one large computer. Thus, PVM allows a user to exploit the aggregate power of workstations and supercomputers distributed around the world to solve computational grand challenges.
The user views PVM as a loosely coupled distributed-memory computer programmed in C or Fortran with message-passing extensions. The hardware that composes the user's personal PVM may be any UNIX based machine on which the user has a valid login and is accessible over some network.
PVM may be configured to contain various machine architectures including sequential processors, vector processors, multicomputers, etc. The present version of the software has been tested with various combinations of the following machines: Sun3, SPARCstation, Microvax, DECstation, IBM RS/6000, HP-9000, Silicon Graphics IRIS, NeXT, Sequent Symmetry, Alliant FX, IBM 3090, Intel iPSC/860, Thinking Machines CM-2 and CM-5, KSR-1, Convex, Cray Y-MP, and Fujitsu VP-2000. In addition, users can port PVM to new architectures by simply modifying a generic `makefile' supplied with the source and recompiling.
Using PVM, each user can configure his own parallel virtual computer, which can overlap with other users' virtual computers. Configuring a personal parallel virtual computer involves simply listing the names of the machines in a file that is read when PVM is started. Several different physical networks can co-exist inside a virtual machine. For example, a local ethernet, HIPPI, and a fiber optic network can all be a part of a user's virtual machine. While each user can have only one virtual machine active at a time, PVM is multitasking so several applications can run simultaneously on a parallel virtual machine.
The PVM package is small (less than 400 Kbytes of C source code) and easy to install. It needs to be installed only once on each machine to be accessible to all users. Moreover, the installation does not require special privileges on any of the machines and thus can be done by any user.
Application programs that use PVM are composed of subtasks at a moderately large level of granularity. The subtasks can be generic serial codes, or they can be specific to a particular machine. In PVM, resources may be accessed at three different levels: the transparent mode in which subtasks are automatically located at the most appropriate sites, the architecture-dependent mode in which the user may indicate specific architectures on which particular subtasks are to execute, and the machine-specific mode in which a particular machine may be specified. Such flexibility allows different subtasks of a heterogeneous application to exploit particular strengths of individual machines on the network.
The PVM user-interface requires that all message data be explicitly typed. PVM performs machine-independent data conversions when required, thus allowing machines with different integer and floating point representations to pass data. Applications access PVM resources via a library of standard interface routines. These routines allow the initiation and termination of processes across the network as well as communication and synchronization between processes. Communication constructs include those for the exchange of data structures as well as high-level primitives such as broadcast, barrier synchronization, and rendezvous.
Application programs under PVM may possess arbitrary control and dependency structures. In other words, at any point in the execution of a concurrent application, the processes in existence may have arbitrary relationships between each other and, further, any process may communicate and/or synchronize with any other.