libmpi(7)

πŸ’– libmpi β€” LAM/MPI implementation πŸ’–

okay bestie, welcome to the LAM Overview page for libmpi, section 7 of the manual. this is the big-picture vibe check on LAM/MPI, so grab a boba and let's get into it ✨


🌸 NAME 🌸

libmpi β€” the LAM/MPI implementation. that's it, that's the name, she's iconic πŸ’…


πŸ¦‹ DESCRIPTION πŸ¦‹

LAM ships a full implementation of the Message Passing Interface (MPI) 1 standard, plus a whole bunch of extra features borrowed from the MPI-2 standard. no cap.

apps that are compliant are source code portable between LAM and literally any other MPI implementation. and beyond just meeting the standard really well, LAM gives you extensive monitoring capabilities to help you debug. the monitoring happens on two levels:

  • LAM has the hooks that let you take a snapshot of process and message status at any time while your app is running. that status covers all aspects of synchronization, plus datatype map / signature, communicator group membership, and message contents. it's giving full visibility πŸ”₯
  • level two: the MPI library itself is instrumented to produce a cumulative record of communication, which you can visualize either at runtime or post-mortem.

LAM/MPI can also change its underlying message transport mechanism, and it can pass tunable parameters to different components in LAM/MPI at run-time β€” all without needing to recompile or relink your MPI applications. huge for both people writing MPI software and researchers poking at MPI performance. this modular framework is called the System Services Interface (SSI), and it's responsible for a big chunk of the back-end functionality in LAM/MPI. obsessed.

another strength: the movement of non-blocking communication requests, including the ones that come from buffered sends. this is the real challenge of implementing MPI β€” everything else is basically a straightforward wrapping of an underlying communication mechanism. LAM lets messages be buffered on the source end in any state of progression, including partially transmitted packets. that capability is what gives LAM its great portability and robustness. periodt.

πŸ“– User Information

users are strongly encouraged to read the LAM/MPI User's Guide, which is included with the LAM/MPI distribution and is provided on the main LAM/MPI web site (http://www.lam-mpi.org/). fr fr, go read it.

🌐 Up-to-Date Information

the LAM home page lives on the World Wide Web at: http://www.lam-mpi.org/. you should consult it for the most current information about LAM, plus updates, patches, etc. it's the main character of the docs, lowkey.

πŸš€ 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 message passing engine module gets used, so you don't have to recompile your programs. slay.

the different message passing engines are commonly called "Request Progression Interface" (RPI) modules. the LAM/MPI distribution includes multiple RPI modules β€” see the lamssi_rpi(7) man page for more details.

one notable module uses LAM's network message-passing subsystem, including its buffer daemon. in this "daemon" mode, LAM's extensive monitoring features are fully available. and yeah, the "daemon" mode typically incurs higher latency than the "native" RPI modules, BUT applications that can use latency-hiding techniques may get greater performance, because daemon-mode can exhibit true asynchronous message passing. the tradeoff is real but so is the glow-up ✨

πŸ›‘οΈ Guaranteed Envelope Resources

applications may fail, legitimately, on some implementations but not others because of an escape hatch in the MPI Standard called "resource limitations". most resources are managed locally, and it's easy for an implementation to give you a helpful error code and/or message when a resource is exhausted. but buffer space for message envelopes is often a remote resource (like in LAM), which is hard to manage. an overflow may not be reported (as in some other implementations) to the process that caused the overflow. also, interpretation of the MPI guarantee on message progress may confuse the debugging of an application that actually died on envelope overflow. messy 😭

LAM has a property called "Guaranteed Envelope Resources" (GER) that serves two purposes:

  1. it's a promise from the implementation to the application that a minimum amount of envelope buffering will be available to each process pair.
  2. 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 daemon 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. and psst β€” there's an option to mpirun(1) that disables GER.

πŸ’Ύ Input and Output

the MPI standard does not specify standard I/O functionality. 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 input and output. if ROMIO support is compiled into LAM, you get the functionality from Chapter 9 of the MPI-2 standard.

ROMIO has some important limitations under LAM; the User's Guide in the LAM distribution should be consulted before writing MPI programs that use MPI I/O. bestie, read first, code second πŸ™ˆ

🧬 Dynamic Processes

LAM includes an implementation of MPI-2 dynamic process creation. yes ma'am.


πŸ‘‘ LAM Extensions to MPI πŸ‘‘

πŸ› Debugging Aids

LAM includes the MPI-2 functionality for naming opaque types. support for the Etnus TotalView parallel debugger is also provided; see the User's Guide for more details.

plus, LAM can launch non-MPI programs on remote nodes. that 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 necessary. this can greatly help debugging and logging of user programs. so convenient fr.

πŸŽ₯ Trace Generation

to avoid getting 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 a signal handling package which mirrors but does not interfere with POSIX signal handling. an MPI extension routine delivers a signal to a process. see MPIL_Signal(2).


πŸ” SEE ALSO πŸ”

πŸ“š Overview of Commands and Libraries

πŸ”§ System Services Interface (SSI)

▢️ Starting / Stopping LAM

πŸ—οΈ Compiling MPI Applications

πŸƒ Running MPI Applications

🚢 Running Non-MPI Applications

πŸ‘€ Monitoring MPI Applications

πŸ—‘οΈ Unloading MPI Trace Data

πŸ“„ Reference Documents

  • "LAM/MPI Installation Guide" β€” included in the LAM/MPI distribution and available on http://www.lam-mpi.org/
  • "LAM/MPI User's Guide" β€” included in the LAM/MPI distribution and available on http://www.lam-mpi.org/
  • "LAM Frequently Asked Questions" β€” at http://www.lam-mpi.org/faq/
  • "MPI Primer / Developing with LAM", Ohio Supercomputer Center
  • "MPI: A Message-Passing Interface Standard", Message-Passing Interface Forum, version 1.1 β€” at http://www.mpi-forum.org/
  • "MPI-2: Extensions to the Message Passing Interface", Message Passing Interface Forum, version 2.0 β€” at http://www.mpi-forum.org/

🌈 MPI Quick Tutorials

πŸ›‘οΈ Guaranteed Envelope Resources

  • "Robust MPI Message Delivery Through Guaranteed Resources", MPI Developer's Conference, 1995

that's the whole page, bestie, no notes πŸ’œ go forth and pass messages.

LAM 7.1.4 Β· July, 2007 β€” yeah she's vintage, she's a classic, and she still ate πŸ’…βœ¨