MPI, mpi - LAM MPI implementation
DESCRIPTION
LAM features a full implementation of Message-Passing
Interface, with the exception that the MPI_CANCEL function
will not properly cancel messages that have been sent.
Pending receive requests can be canceled; implementation
of canceling send messages was judged to be too difficult
(and not enough LAM users asked for it).
Compliant applications are source code portable between
LAM and any other implementation of MPI. In addition to
meeting the standard in a high quality manner, LAM offers
extensive monitoring capabilities to support debugging.
Monitoring happens on two levels. LAM has the hooks to
allow a snapshot of process and message status to be taken
at any time during an application run. The status
includes all aspects of synchronization plus datatype map
/ signature, communicator group membership and message
contents. On the second level, the MPI library is instru
mented to produce a cumulative record of communication,
which can be visualized either at runtime or post-mortem.
Another strength of this MPI implementation is the move
ment of non-blocking communication requests, including
those that result from buffered sends. This is the real
challenge of implementing MPI; everything else is mostly a
straight forward wrapping of an underlying communication
mechanism. LAM allows messages to be buffered on the
source end in any state of progression, including par
tially transmitted packets. This capability leads to
great portability and robustness.
Up-to-Date Information
The LAM home page can be found on the World Wide Web at:
http://www.mpi.nd.edu/lam/ . It should be consulted for
the most current information about LAM, as well as
updates, patches, etc.
Direct MPI Communication
The sophisticated message advancing engine at the heart of
the MPI library uses only a handful of routines to drive
the underlying communication system. Runtime flags decide
which implementation of these low-level routines is used,
so recompilation is not necessary. The default implemen
tation uses LAM's network message-passing subsystem,
including its buffer daemon. In this "daemon" mode, LAM's
extensive monitoring features are fully available. The
main purpose of daemon based communication is development,
but depending on the application's decomposition granular
ity and communication requirement, it may also be entirely
adequate for production execution.
communication intends to use the highest performance
underlying mechanism, certainly bypassing the LAM daemon
and connecting directly between application processes.
This is the "client to client" mode (C2C).
The availability of optimal C2C implementations will con
tinue to change as architectures come and go. At the
least, LAM includes a combination TCP/IP and shared memory
implementation of C2C that bypasses the LAM daemon.
MPI process and message monitoring commands and tools will
be much less effective in C2C mode, usually reporting run
ning processes and empty message queues. Signal delivery
with doom(1) is unaffected.
Guaranteed Envelope Resources
Applications may fail, legitimately, on some implementa
tions but not others due to an escape hatch in the MPI
Standard called "resource limitations". Most resources
are managed locally and it is easy for an implementation
to provide a helpful error code and/or message when a
resource is exhausted. Buffer space for message envelopes
is often a remote resource (as in LAM) which is difficult
to manage. An overflow may not be reported (as in some
other implementations) to the process that caused the
overflow. Moreover, interpretation of the MPI guarantee
on message progress may confuse the debugging of an appli
cation that actually died on envelope overflow.
LAM has a property called "Guaranteed Envelope Resources"
(GER) which serves two purposes. It is a promise from the
implementation to the application that a minimum amount of
envelope buffering will be available to each process pair.
Secondly, it ensures that the producer of messages that
overflows this resource will be throttled or cited with an
error as necessary.
A minimum GER is configured when LAM is built. The MPI
library uses a protocol to ensure GER when running in dae
mon mode. The default C2C mode (TCP/IP) does not use a
protocol, because process-pair protection is provided by
TCP/IP itself. Errors are only reported to the receiving
process in C2C mode. An option to mpirun(1) disables GER.
Input and Output
The MPI standard does not specify standard I/O functional
ity. LAM does not interfere with the I/O capabilities of
the underlying system but it does make special provisions
for remote terminal I/O using the ANSI/POSIX routines.
See mpirun(1) and tstdio(3).
LAM now includes the ROMIO distribution for MPI-2 file
provided.
ROMIO has some important limitations under LAM; the
RELEASE_NOTES file in the LAM distribution should be con
sulted before writing MPI programs that use MPI I/O.
Dynamic Processes
LAM includes an implementation of MPI-2 dynamic process
creation. The non-blocking functions are not implemented.
LAM Extensions to MPI
Debugging Aids
Opaque MPI objects are monitored by LAM commands but the
user needs a way to cross-reference the identification
given by the commands with variables within MPI applica
tion. These extensions extract identifiers from MPI com
municators and datatypes. See MPIL_Comm_id(2) and
MPIL_Type_id(2).
Additionally, LAM provides the capability to launch non-
MPI programs on remote nodes. This includes shell
scripts, debuggers, etc. As long as an MPI program is
eventually launched (as a child, grandchild, etc.), LAM
can handle executing as many intermediate programs as nec
essary. This can greatly help debugging and logging of
user programs.
Trace Generation
To avoid being swamped with trace data from a long running
application, LAM supplies collective operations to turn
the tap on and off. See MPIL_Trace_on(2) and
MPIL_Trace_off(2).
Asynchronous Signals
LAM has an signal handling package which mirrors but does
not interfere with POSIX signal handling. An MPI exten
sion routine delivers a signal to a process. See
MPIL_Signal(2).
SEE ALSO
Overview of Commands and Libraries
introu(1), introc(2), INTROF(2)
Starting LAM
recon(1), lamboot(1), wipe(1), tping(1), lamgrow(1),
lamshrink(1)
Compiling MPI Applications
hcc(1), hcp(1), hf77(1)
Running MPI Applications
mpirun(1), lamclean(1)
mpitask(1), mpimsg(1)
Unloading MPI Trace Data
lamtrace(1)
Enhanced I/O in MPI Programs
lam_rfposix(2), tstdio(3), cubix(3)
Reference Documents
"MPI Primer / Developing with LAM", Ohio Supercomputer
Center
"MPI: A Message-Passing Interface Standard", Message-Pass
ing Interface Forum, version 1.1
at http://www.mpi-forum.org/
"MPI-2: Extensions to the Message Passing Interface", Mes
sage Passing Interface Forum, version 2.0
at http://www.mpi-forum.org/
MPI Quick Tutorials
"LAM/MPI ND User Guide / Introduction"
at http://www.mpi.nd.edu/mpi_tutorials/lam/
"MPI: It's Easy to Get Started"
"MPI: Everyday Datatypes"
"MPI: Everyday Collective Communication"
Guaranteed Envelope Resources
"Robust MPI Message Delivery Through Guaranteed
Resources", MPI Developer's Conference, 1995