Next: 2.2 TreadMarks Up: 2 PVM Versus TreadMarks Previous: 2 PVM Versus TreadMarks

2.1 PVM

PVM [9], standing for Parallel Virtual Machine, is a message passing system originally developed at Oak Ridge National Laboratory. Although other message passing systems such as TCGMSG [11], provide higher bandwidth than PVM, we chose PVM because of its popularity. We use PVM version 3.2.6 in our experiments.

2.1.1 PVM Interface

With PVM, the user data must be packed into a send buffer before being dispatched. The received message is first stored in a receive buffer, and must be unpacked into the application data structure. The application program calls different routines to pack or unpack data with different types. All these routines have the same syntax, which specifies the beginning of the user data structure, the total number of data items to be packed or unpacked, and the stride. The unpack calls should match the corresponding pack calls in type and number of items.

PVM provides the user with nonblocking sends, including primitives to send a message to a single destination, to multicast to multiple destinations, or to broadcast to all destinations. The send dispatches the contents of the send buffer to its destination and returns immediately.

Both blocking and nonblocking receives are provided by PVM. A receive provides a receive buffer for an incoming message. The blocking receive waits until an expected message has arrived. At that time, it returns a pointer to the receive buffer. The nonblocking receive returns immediately. If the expected message is present, it returns the pointer to the receive buffer, as with the blocking receive. Otherwise, the nonblocking receive returns a null pointer. Nonblocking receive can be called multiple times to check for the presence of the same message, while performing other work between calls. When there is no more useful work to do, the blocking receive can be called for the same message.

2.1.2 PVM Implementation

PVM consists of two parts: a daemon process on each host and a set of library routines. The daemons connect with each other using UDP, and a user process connects with its local daemon using TCP. The usual way for two user processes on different hosts to communicate with each other is via their local daemons. They can, however, set up a direct TCP connection between each other in order to reduce overhead. We use a direct connection between the user processors in our experiments, because it results in better performance.

Because PVM is designed to work on a set of heterogeneous machines, it provides conversion to and from an external data representation (XDR). This conversion is avoided if all the machines used are identical.



Next: 2.2 TreadMarks Up: 2 PVM Versus TreadMarks Previous: 2 PVM Versus TreadMarks


logoRice Systems Group