The Message Passing Interface (MPI) is a portable message-passing standard designed to function on parallel computing architectures. The MPI standard defines the syntax and semantics of library routines that are useful to a wide range of users writing portable message-passing programs in C, C++, and Fortran. There are several open-source MPI implementations, which fostered the development of a parallel software industry, and encouraged development of portable and scalable large-scale parallel applications.
History The message passing interface effort began in the summer of 1991 when a small group of researchers started discussions at a mountain retreat in Austria. Out of that discussion came a Workshop on Standards for Message Passing in a Distributed Memory Environment, held on April 29–30, 1992 in Williamsburg, Virginia. Attendees at Williamsburg discussed the basic features essential to a standard message-passing interface and established a working group to continue the standardization process. Jack Dongarra, Tony Hey, and David W. Walker put forward a preliminary draft proposal, "MPI1", in November 1992. In November 1992 a meeting of the MPI working group took place in Minneapolis and decided to place the standardization process on a more formal footing. The MPI working group met every 6 weeks throughout the first 9 months of 1993. The draft MPI standard was presented at the Supercomputing '93 conference in November 1993. After a period of public comments, which resulted in some changes in MPI, version 1.0 of MPI was released in June 1994. These meetings and the email discussion together constituted the MPI Forum, membership of which has been open to all members of the high-performance-computing community.
The MPI effort involved about 80 people from 40 organizations, mainly in the United States and Europe. Most of the major vendors of concurrent computers were involved in the MPI effort, collaborating with researchers from universities, government laboratories, and industry.
MPI provides parallel hardware vendors with a clearly defined base set of routines that can be efficiently implemented. As a result, hardware vendors can build upon this collection of standard low-level routines to create higher-level routines for the distributed-memory communication environment supplied with their parallel machines. MPI provides a simple-to-use portable interface for the basic user, yet one powerful enough to allow programmers to use the high-performance message passing operations available on advanced machines.
In an effort to create a universal standard for message passing, researchers did not base it off of a single system but it incorporated the most useful features of several systems, including those designed by IBM, Intel, nCUBE, PVM, Express, P4 and PARMACS. The message-passing paradigm is attractive because of wide portability and can be used in communication for distributed-memory and shared-memory multiprocessors, networks of workstations, and a combination of these elements. The paradigm can apply in multiple settings, independent of network speed or memory architecture.
Support for MPI meetings came in part from DARPA and from the U.S. National Science Foundation (NSF) under grant ASC-9310330, NSF Science and Technology Center Cooperative agreement number CCR-8809615, and from the European Commission through Esprit Project P6643. The University of Tennessee also made financial contributions to the MPI Forum.
In subsequent years the MPI standard has evolved through multiple major and minor revisions, each introducing new capabilities and improvements. For example, MPI-3.0 introduced nonblocking collective operations, enhancements to one-sided communication, and updated language bindings; MPI-4.0 added large-count routines, persistent collectives, and refined initialization methods; and MPI-5.0 introduced a standardized application binary interface (ABI) to improve interoperability between implementations.
Overview MPI is a communication protocol for programming parallel computers. Both point-to-point and collective communication are supported. MPI "is a message-passing application programmer interface, together with protocol and semantic specifications for how its features must behave in any implementation". MPI's goals are high performance, scalability, and portability. MPI remained the dominant model used in high-performance computing as of 2006.
The standard’s goals include high performance, scalability, and portability across parallel computing architectures. Although not governed by a formal international standards body, MPI is widely regarded as a de facto standard for message passing in high-performance computing applications.
MPI is not sanctioned by any major standards body; nevertheless, it has become a de facto standard for communication among processes that model a parallel program running on a distributed memory system. Actual distributed memory supercomputers such as computer clusters often run such programs.
The principal MPI-1 model has no shared memory concept, and MPI-2 has only a limited distributed shared memory concept. Nonetheless, MPI programs are regularly run on shared-memory computers, and both MPICH and Open MPI can use shared memory for message transfer if it is available.KNEM: High-Performance Intra-Node MPI Communication: "MPICH2 (since release 1.1.1) uses KNEM in the DMA LMT to improve large message performance within a single node. Open MPI also includes KNEM support in its SM BTL component since release 1.5. Additionally, NetPIPE includes a KNEM backend since version 3.7.2." Designing programs around the MPI model (contrary to explicit shared memory models) has advantages when running on NUMA architectures, since MPI encourages memory locality. Explicit shared-memory programming was introduced in MPI-3.The MPI-3 standard introduces another approach to hybrid programming that uses the new MPI Shared Memory (SHM) model.Shared Memory and MPI 3.0: "Various benchmarks can be run to determine which method is best for a particular application, whether using MPI + OpenMP or the MPI SHM extensions. On a fairly simple test case, speedups over a base version that used point to point communication were up to 5X, depending on the message."Using MPI-3 Shared Memory As a Multicore Programming System (PDF presentation slides).
Although MPI belongs in layers 5 and higher of the OSI Reference Model, implementations may cover most layers, with sockets and Transmission Control Protocol (TCP) used in the transport layer.
Most MPI implementations consist of a specific set of routines directly callable from C, C++, Fortran (i.e., an API) and any language able to interface with such libraries, including C#, Java or Python. The advantages of MPI over older message-passing libraries are portability (because MPI has been implemented for almost every distributed-memory architecture) and speed (because each implementation is in principle optimized for the hardware on which it runs).
MPI uses Language Independent Specifications (LIS) for calls and language bindings. The first MPI standard specified ANSI C and Fortran 77 bindings together with the LIS. The draft was presented at Supercomputing 1994 (November 1994)Table of Contents — September 1994, 8 (3-4). Hpc.sagepub.com. Retrieved on 2014-03-24. and finalized soon thereafter. About 128 functions constitute the MPI-1.3 standard, which was released as the final end of the MPI-1 series in 2008.MPI Documents. Mpi-forum.org. Retrieved on 2014-03-24.
At present, the standard has several versions: version 1.3 (commonly abbreviated MPI-1), which emphasizes message passing and has a static runtime environment, MPI-2.2 (MPI-2), which includes new features such as parallel I/O, dynamic process management and remote memory operations,. and MPI-3.1 (MPI-3), which includes extensions to the collective operations with non-blocking versions and extensions to the one-sided operations.MPI: A Message-Passing Interface Standard. Version 3.1, Message Passing Interface Forum, June 4, 2015 on www.mpi-forum.org. MPI-2's LIS specifies over 500 functions and provides language bindings for ISO C, ISO C++, and Fortran 90. Object interoperability was also added to allow easier mixed-language message-passing programming. A side-effect of standardizing MPI-2, completed in 1996, was clarifying the MPI-1 standard, creating the MPI-1.2.
MPI-2 is mostly a superset of MPI-1, although some functions have been deprecated. MPI-1.3 programs still work under MPI implementations compliant with the MPI-2 standard.
MPI-3.0 introduces significant updates to the MPI standard, including nonblocking versions of collective operations, enhancements to one-sided operations, and a Fortran 2008 binding. It removes deprecated C++ bindings and various obsolete routines and objects. Importantly, any valid MPI-2.2 program that avoids the removed elements is also valid in MPI-3.0.
MPI-3.1 is a minor update focused on corrections and clarifications, particularly for Fortran bindings. It introduces new functions for manipulating values, nonblocking collective I/O routines, and methods for retrieving index values by name for performance variables. Additionally, a general index was added. All valid MPI-3.0 programs are also valid in MPI-3.1.
MPI-4.0 is a major update that introduces large-count versions of many routines, persistent collective operations, partitioned communications, and a new MPI initialization method. It also adds application info assertions and improves error handling definitions, along with various smaller enhancements. Any valid MPI-3.1 program is compatible with MPI-4.0.
MPI-4.1 is a minor update focused on corrections and clarifications to the MPI-4.0 standard. It deprecates several routines, the attribute key, and the Fortran include file. A new routine has been added to inquire about the hardware running the MPI program. Any valid MPI-4.0 program remains valid in MPI-4.1.
MPI-5.0 is a major update that introduces an application binary interface. This allows for increased interoperability of MPI libraries from different MPI vendors, as well as increased performance in containerized environments.MPI Forum Meets at HLRS on Path to MPI 5.0. Retrieved 2025-09-30.
MPI is often compared with Parallel Virtual Machine (PVM), which was a popular distributed environment and message-passing system developed in 1989, and which was one of the systems that motivated the need for standard parallel message passing. Threaded shared-memory programming models (such as Pthreads and OpenMP) and message-passing programming (MPI/PVM) can be considered complementary and have been used together on occasion in, for example, servers with multiple large shared-memory nodes.
Functionality
The MPI interface is meant to provide essential virtual topology, synchronization, and communication functionality between a set of processes (that have been mapped to nodes/servers/computer instances) in a language-independent way, with language-specific syntax (bindings), plus a few language-specific features. MPI programs always work with processes, but programmers commonly refer to the processes as processors. Typically, for maximum performance, each CPU (or core in a multi-core machine) will be assigned just a single process. This assignment happens at runtime through the agent that starts the MPI program, normally called mpirun or mpiexec.
MPI supports both point-to-point communication, where messages are exchanged directly between pairs of processes, and collective communication, where groups of processes cooperate on operations such as broadcast and reduction. Language bindings allow MPI routines to be used from multiple programming languages, with the C and Fortran bindings being the most common.