GNU/Linux |
RedHat 6.2(Zoot) |
|
![]() |
MPIL_Universe_size(2) |
![]() |
MPIL_Spawn, MPIL_Parent, MPIL_Universe_size − Spawn MPI processes under LAM.
#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);
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*(*)
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.
mpirun(1)
![]() |
MPIL_Universe_size(2) | ![]() |