The PVM communication model gives asynchronous blocking receive, asynchronous blocking send and nonblocking receive functions. In our methodology, a blocking send returns as early as the send buffer is free for use again, and an asynchronous send does not depend on the receiver calling a matching receive before the send can return. There are options in PVM 3 that request that data be transmitted directly from task to task. In this case, if the message is big, the sender may block until the receiver has called a matching receive.
A nonblocking receive instantaneously returns with both the data and a flag that the data has not arrived, whereas a blocking receive returns only when the data is in the receive buffer. In adding to these point-to-point communication functions, the model supports the multicast to a place of tasks and the broadcast to a user-defined group of tasks. There are also functions to present global max, global sum, etc. across a user-defined set of tasks. Wildcards can be specified in the receive for the label and the source, allowing either or both of these contexts to be ignored. A routine can be called to return the information about the received messages.
The PVM model assuring that the message order is conserved. If task 1 sends message A to task 2, then after task 1 sends message B to task 2, message A will arrive at task 2 earlier than message B. Furthermore, if both the messages arrive earlier than task 2 does a receive, then a wildcard receive will the entire time return message A.
Generates a new message buffer. encoding states the buffer's encoding scheme.