Figure 3: Process architecture on PVM
Only few modifications were necessary to adapt our Parix application to the PVM programming model. Both models provide similar constructs for the communication interfaces. Compared to Parix, PVM is lacking a common `execution context' for sharing objects among tasks running on the same processor. Therefore, we had to implement a mechanism for sharing the frontier nodes by explicit message transfer. In PVM, all synchronization and information sharing is solely done via messages, even when running on the same processor. While this is certainly the most abstract (hardware independent) approach, it might cause unnecessary inefficiencies.
In our implementation (Fig. 3) the frontier nodes array is maintained by the the communicator task. When a worker task runs out of work, it sends a message to its communicator executing on the same node. When there are no work packets left in the frontier nodes array, the communicator task sends -- as before -- a request to it neighboring processors. However, unlike in the Parix approach, work packets are directly returned to the requester. This does not cause any extra programming effort, because PVM implies a clique network, directly connecting every processor to every other.