Programming models are generally categorized by how memory
is used. In the shared memory model each process accesses a shared
address space, while in the message passing model an application
runs as a collection of autonomous processes, each with its own
local memory. In the message passing model processes communicate
with other processes by sending and receiving messages. When data
is passed in a message, the sending and receiving processes must
work to transfer the data from the local memory of one to the local
memory of the other.
Message passing is used widely on parallel computers with
distributed memory, and on clusters of servers. The advantages of
using message passing include:
Portability—Message passing
is implemented on most parallel platforms.
Universality—Model makes minimal assumptions
about underlying parallel hardware. Message-passing libraries exist
on computers linked by networks and on shared and distributed memory multiprocessors.
Simplicity—Model supports explicit control
of memory references for easier debugging.
However, creating message-passing applications may require
more effort than letting a parallelizing compiler produce parallel
applications.
In 1994, representatives from the computer industry, government
labs, and academe developed a standard specification for interfaces
to a library of message-passing routines. This standard is known
as MPI 1.0 (MPI: A Message-Passing Interface Standard). Since this initial standard, versions 1.1
(June 1995), 1.2 (July 1997), and 2.0 (July 1997) have been produced.
Versions 1.1 and 1.2 correct errors and minor omissions of MPI 1.0.
MPI-2 (MPI-2: Extensions to the Message-Passing Interface) adds new functionality to MPI 1.2. You can find
both standards in HTML format at http://www.mpi-forum.org.
MPI-1 compliance means compliance with MPI 1.2. MPI-2 compliance means
compliance with MPI 2.0. Forward compatibility is preserved in the
standard. That is, a valid MPI 1.0 program is a valid MPI 1.2 program
and a valid MPI-2 program.