The LAM implementation of MPI is a freely available and portable implementation developed at the Ohio Supercomputer Center [11]. LAM and MPICH are the two most important free options for running MPI on a network of workstations. LAM existed before MPI and was adopted to implement the MPI interface. LAM runs on many platforms, including RS6000, Irix 5, Irix 6, Linux86, HPUX, OSF/1 and Solaris.
LAM provides an infrastructure to turn a network of workstations (possibly heterogeneous) into a virtual parallel computer. A user-level daemon running on each node provides process management, including signal handling and I/O management. LAM also provides extensive monitoring capabilities to support tuning and debugging. The xmpi tool that comes with LAM (and has since been adopted by the HP and SGI implementations as well) provides visualization of message traces and allows inspection of message queues.
By default, full message monitoring is enabled, and communication goes through the daemons. It is also possible to enable direct client-to-client communication using TCP sockets or shared memory.
LAM also provides so-called Guaranteed Envelope Resources (GER), which is a promise about how much pending communication LAM can support. Such a guarantee is missing from the MPI specification, and there is debate over whether it is needed or not. In theory, a compliant MPI implementation could have so few internal resources (e.g. buffers for message envelopes) that reasonable MPI programs would fail. Fortunately, there are few MPI implementations which fail due to resource exhaustion for average codes, and most have tunable parameters to allow them to deal with unusual codes. Through GER, LAM makes explicit quantitative guarantees on resource availability.
LAM is compliant with MPI 1.1 and also implements dynamic process management routines from MPI-2.