MPIL_SPAWN(2)

NAME
MPIL_Spawn, MPIL_Parent, MPIL_Universe_size - Spawn MPI processes under LAM.

C SYNOPSIS
#include <mpi.h>

int MPIL_Spawn (MPI_Comm comm, char *app, int root, MPI_Comm *child_comm);
int MPIL_Comm_parent (MPI_Comm *parent_comm);
int MPIL_Universe_size (int *size);

FORTRAN SYNOPSIS
subroutine MPIL_SPAWN (comm, app, root, child_comm, ierr)
subroutine MPIL_COMM_PARENT (parent_comm, ierr)
subroutine MPIL_UNIVERSE_SIZE (size, ierr)
integer comm, root, child_comm, parent_comm, size, ierr
character app*(*)

DESCRIPTION
These functions are outdated - it has been replaced with MPI_Comm_spawn(), MPI_Comm_spawn_multiple(), and MPI_Comm_get_parent(), respectively. There is no MPI function replacement for MPIL_Universe_size(). Instead, the attribute MPI_UNIVERSIZE_SIZE is defined on MPI_COMM_WORLD. LAM defines this value as the number of hosts that lamboot launched LAM on.

While these functions have been left in LAM for backward compatability, developers are highly encouraged to use the new functionality that is standard in MPI-2.

A group of processes can create another group of processes with MPIL_Spawn(). The parent group is indicated by the first communicator argument. MPIL_Spawn() is a collective operation over the parent processes. The child group starts up like any MPI application. The processes must begin by calling MPI_Init(), after which the pre-defined communicator, MPI_COMM_WORLD, may be used. This world communicator contains only the child processes. It is distinct from the MPI_COMM_WORLD of the parent processes.

  Communication With Spawned Processes
The natural communication mechanism between two groups is the inter-communicator. The second communicator argument to MPIL_Spawn() returns an inter-communicator whose local group contains the parent processes (same as the first communicator argument) and whose remote group contains child processes. The child processes get the same inter-communicator by calling MPIL_Comm_parent(), which returns MPI_COMM_NULL if the process was created by mpirun(1) instead of MPIL_Spawn(). Both groups can decide to merge the inter-communicator into an intra-communicator and take advantage of other MPI collective operations. They can then use the merged intra-communicator to create new inter-communicators and reach other processes in the MPI application.

  Choosing Programs and Resources
The program names, process counts and computing resources for the new child processes are specified in an application schema identical to that used by mpirun(1). The application schema filename is given in the app argument to MPIL_Spawn(). As with mpirun(1), a simple SPMD application can be specified in the app argument itself (equivalent to the mpirun(1) command line). The simplest way to run one copy of an executable file on any node chosen by LAM is to specify "a.out -c 1" for the app argument. A single filename by itself is taken to be an application schema, not an excutable filename. See mpirun(1) for complete details.

  Locating an Application Schema
If an application schema is specified, it is located on the node that is running the process indicated by the root argument. On that node, the schema file is located by searching a few directories. The directory defined by the LAMAPPLDIR environment variable, if set, is searched first. Then the local directory is searched.

  Locating an Executable Program
If an executable file is specified, it is located on the node(s) where the process(es) will execute, unless the -s option is specified as with mpirun(1). On any node, the directories specified by the user's PATH environment variable are searched to find an executable file.

All MPI runtime options selected by mpirun(1) in the initial application launch remain in effect for all child processes created by MPIL_Spawn() .

  The Universe
The number of processes that an application spawns is often constrained by the number of processors available. That information (in nodes, not necessarily processors) is obtained from LAM with MPIL_Universe_size(). Since LAM can dynamically add and subtract nodes, the universe size can change at any time.

SEE ALSO
mpirun(1)