The message passing interface (MPI) is a specification for an api that allows processes to communicate by exchanging messages. It is designed for high performance computing applications and is utilized on distributed memory architectures (as computer clusters) as well as on shared memory computers.
The initial version of the MPI standard, MPI-1.0, was created in 1994 by the MPI Forum. From 1995 to 2008, the MPI Forum published a series of subsequent revisions of the standard, MPI-1.1, MPI-1.2, MPI-2.0, MPI-1.3, and MPI-2.1 (in this order). New versions incorporated various corrections and clarifications as well as some major extensions to earlier standards. In September 2009, the MPI Forum published MPI-2.2. Important changes include:
- C++ language bindings have been marked as deprecated. This means, the C++ language bindings are still part of the MPI standard. New MPI programs, however, should not use the C++ api. C++ programmers may use the C api instead, or external interfaces, as Boost MPI for example.
- There are new MPI datatypes for the new datatypes of the C99 standard, for example MPI_C_COMPLEX for double complex.
- Support for local reduction operations by MPI_REDUCE_LOCAL.
- New collective function MPI_REDUCE_SCATTER_BLOCK.
- New functions for a scalable distributed graph topology interface have been added.
It will probably take some time until open source and vendor MPI implementations have incorporated all new features of the MPI-2.2 standard. However, every MPI user or MPI developper should be aware of the revised standard and take it into account when writing new MPI programs. The MPI-2.2 standard is just a minor update to MPI-2.1. However, the MPI Forum is already working on MPI-3.0, which is planned to add new features as collectives operations, fault tolerance, support for hybrid programming models, and remote memory access.
MPI novices find good introductions to MPI, for example, in «Parallel programming with MPI» by Peter S. Pacheco or in «Cluster Computing» (in German) by Heiko Bauke (your humble blog author) and Stephan Mertens. I also strongly encourage everybody how uses an MPI library to read the MPI standard documents.