In many ways, MPI and PVM are similar:
Another difference is in the support for the "topology" (the interconnect pattern: grid, torus, or tree) of the communicating processes. In MPI, the group size and topology are fixed when the group is created. This permits low-overhead group operations and, because the topology is normally inherent in the algorithmic design, the lack of run-time flexibility is not a problem. In PVM, group composition is dynamic, which requires the use of a "group server" process and causes more overhead in common group-related operations.
Other reasons can be found in the design details of the two interfaces. MPI, for example, supports asynchronous and multiple message traffic, so that a process can wait for any of a list of message-receive calls to complete, and can initiate concurrent sending and receiving. MPI provides for a "context" qualifier as part of the "envelope" of each message. This permits you to build encapsulated libraries that exchange data independently of the data exchanged by the client modules. MPI also provides several elegant data-exchange functions for use by a program that is emulating an SPMD parallel architecture.
PVM is possibly more suitable for distributing a program across a heterogenous network, including both uniprocessors and multiprocessors and including computers from multiple vendors. When the application runs in the environment of a Silicon Graphics, Inc. Array system, MPI is the recommended interface.