---
name: "lamssi_coll"
section: "7"
platform: "linux"
package: "lam-runtime"
version: "7.1.4-7.2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/lamssi_coll"
---

# lamssi\_coll(7)

overview of LAM's MPI collective SSI modules

## NAME

lamssi\_collectives - overview of LAM's MPI collective SSI modules

## DESCRIPTION

The "kind" for collectives SSI modules is "coll".  Specifically, the string "coll" (without the quotes) is the prefix that should be used with the *mpirun* command line with the *-ssi* switch.  For example:

- mpirun -ssi coll\_base\_crossover 4 C my\_mpi\_program

  LAM currently has three coll modules:

- *lam\_basic*

  A full implementation of MPI collectives on intracommunicators.  The algorithms are the same as were in the LAM 6.5 series.  Collectives on intercommunicators are undefined, and will result in run-time errors.

- *impi*

  Collective functions for IMPI communicators.  These are mostly un-implemented; only the basics exist:  *MPI\_BARRIER* and *MPI\_REDUCE*.

- *shmem*

  Shared memory collectives.

- *smp*

  SMP-aware collectives (based on the MagPIe algorithms).  The following algorithms provide SMP-aware performance on multiprocessors: *MPI\_ALLREDUCE*, *MPI\_ALLTOALL*, *MPI\_ALLTOALLV*, *MPI\_BARRIER*, *MPI\_BCAST*, *MPI\_GATHER*, *MPI\_GATHERV*, *MPI\_REDUCE*, *MPI\_SCATTER*, and *MPI\_SCATTERV*. Note that the reduction algorithms must be specifically enabled by marking the operations as associative before they will be used.  All other MPI collectives will fall back to their *lam\_basic* equivalents.

More collective modules are likely to be implemented in the future.

## COLL MODULE PARAMETERS

In the discussion below, the parameters are discussed in terms of  *kind* and *value*. Unlike other SSI module kinds, since coll modules are selected on a per-communicator basis, the *kind* and *value* may be specified as attributes to a parent communicator.

Need to write much more here.

### Selecting a coll module

coll modules are selected on a per-communicator basis.  They are selected when the communicator is created, and remain the active coll module for the life of that communicator.  For example, different coll modules may be assigned to MPI\_COMM\_WORLD and MPI\_COMM\_SELF.  In most cases LAM/MPI will select the best coll module automatically.  For example, when a communicator spans multiple nodes and at least one node has multiple MPI processes, the *smp* module will automatically be selected.

However, the  *LAM\_MPI\_SSI\_COLL* keyval can be used to set an attribute on a communicator that is used to create a new communicator.  The attribute should have the value of the string name of the coll module to use.  If that module cannot be used, an MPI exception will occur.  This attribute is only examined on the parent communicator when a new communicator is created.

### coll SSI Parameters

The coll modules accept several parameters:

- coll\_associative

  Because of specific wording in the MPI standard, LAM/MPI can effectively not assume that any reduction operator is associative (at least, not without additional overhead).  Hence, LAM/MPI relies on the user to indicate that certain operations are associative.  If the user sets the  *coll\_associative* SSI parameter to 1, LAM/MPI may assume that the reduction operator is assocative, and may be able to optimize the overall reduction operation.  If it is 0 or undefined, LAM/MPI will assume that the reduction operation is **not** associative, and will use strict linear ordering of reduction operations (regardless of data locality).  This attribute is checked every time a reduction operator is invoked.  The User's Guide contains more information on this topic.

- coll\_crossover

  This parameter determines the maximum number of processes in a communicator that will use linear algorithms.  This SSI parameter is only checked during *MPI\_INIT*.

- coll\_reduce\_crossover

  During reduction operations, it makes sense to use the number of bytes to be transferred rather than the number of processes as a metric whether to use linear or logrithmic algorithms.  This parameter indicates the maxmimum number of bytes to be transferred by each process by a linear algorithm.  This SSI parameter is only checked during *MPI\_INIT*.

### Notes on the smp coll Module

The *smp* coll module is based on the algorithms from the MagPIe project.  It is not yet complete; there are still more algorithms that can be optmized for SMP-aware execution -- by the time that LAM/MPI was frozen in preparation for release, only some of the algorithms had been completed.  It is expected that future versions of LAM/MPI will have more SMP-optimized algorithms.

The User's Guide contains much more detail about the *smp* module.  In particular, the  *coll\_associative* SSI parameter must be 1 for the SMP-aware reduction algorithms to be used.  If it is 0 or undefined, the corresponding *lam\_basic* algorithms will be used.  The *coll\_associative* attribute is checked at every invocation of the reduction algorithms.

## SEE ALSO

[lamssi(7)](/lamssi/7.md), [mpirun(1)](/mpirun/1.md), LAM User's Guide
