One aspect of concern,
particularly to novices, is the large number of routines
comprising the MPI
specification. In all there are 128 MPI routines,
and further extensions
(see Section ) will probably
increase their number.
There are two fundamental reasons for the size of MPI.
The first reason is that MPI was designed to be rich in
functionality.
This is reflected in MPI's support for derived datatypes,
modular communication via the communicator abstraction, caching,
application topologies,
and the fully-featured set of collective communication routines.
The second reason for the size of MPI
reflects the diversity and complexity of today's high
performance computers. This is particularly true with respect to the
point-to-point communication
routines where the different communication modes
(see Sections
and
) arise mainly
as a means of providing a set of the most
widely-used communication protocols. For example, the synchronous
communication mode
corresponds closely to a protocol that minimizes the
copying and buffering of
data through a rendezvous mechanism. A protocol
that attempts to initiate delivery of messages as soon as possible
would provide buffering for messages, and this corresponds closely
to the buffered communication mode (or the standard mode if this is
implemented with sufficient buffering).
One could decrease the number of functions by increasing the
number of parameters in each call. But such approach would
increase the call overhead and would make the use of the most
prevalent calls more complex. The availability of a large
number of calls to deal with more esoteric features of MPI
allows one to provide a simpler interface to the more frequently
used functions.