Compute Canada

What is the Message Passing Interface (MPI) ?

Please note: The FAQ pages at the HPCVL website are continuously being revised. Some pages might pertain to an older configuration of the system. Please let us know if you encounter problems or inaccuracies, and we will correct the entries.

The Message Passing Interface is a communication system that was designed by a group of researchers to supply programmers with a standard for distributed-memory parallel programming that is portable and usable on a variety of platforms. The standardization process was initiated at a Workshop in 1992, and a draft of the standard was available a year later. Version 1.0 was released in the Summer of 1994. The current version of MPI is 2.0.
At present, the system is implemented in the form of "bindings" for Fortran, C, and C++. MPI-1 (i.e. the original version 1.0 of the standard) consisted of about 100 functions/subroutines which form the MPI core and were available for Fortran and C. MPI-2 approximately doubles the number of routines, adding new features (which we will not discuss in this FAQ), and introducing C++ bindings.
The number of essential MPI routines is quite limited. In our experience, well-functioning MPI programs can be written with a dozen or so. The routines are supplied in the form of libraries, header files and usually scripts for easy compilation. Almost any hardware/OS platform supplies a native MPI version these days, and public-domain versions are available as well.

Here is an overview of the main components of MPI-1:

  1. Bindings for C and Fortran
  2. Point-to-point communication
  3. Collective operations
  4. Process groups and communication domains
  5. User-defined data types and packing
  6. Process topologies
  7. Management, Inquiry, and Profiling

MPI-2 adds to this:


  1. C++ bindings
  2. Dynamic processes
  3. Parallel I/O
  4. One-sided operations