Many early generation commercial parallel computers were based on the message-passing architecture due to its lower cost relative to shared-address-space architectures.
Message-passing became the modern-age form of assembly language, in which every hardware vendor provided its own library.
Performed very well on its own hardware, but was incompatible with the parallel computers offered by other vendors.
Many of the differences between the various vendor-specific message-passing libraries were only syntactic.
However, often enough there were some serious semantic differences that required significant re-engineering to port a message-passing program from one library to another.
The message-passing interface (MPI) was created to essentially solve this problem.
MPI defines
a standard library for message-passing,
can be used to develop portable message-passing programs.
The MPI standard defines both the syntax as well as the semantics of a core set of library routines.
The MPI library contains over 125 routines, but the number of key concepts is much smaller.
In fact, it is possible to write fully-functional message-passing programs by using only six routines (see table 7.5).