The spawning of MPI jobs requires different procedures depending upon the target system and the MPI implementation. The situation is complicated by the desire to avoid adding many spawn calls (the current intention of the MPI-2 forum). Instead, a number of different resource managers and MPI implementation specific taskers have been developed. This work has been the impetus behind a simplification of the current resource management hooks so that expansion of the PVM system itself is more modular.
Three basic schemes are available:
The first method is being used on various MPP versions of PVM, such as for the SP2 when using the SP2MPI variate. In these cases the resource manage and taskers must work closely together to ensure that the created groups of processes have the ``correct'' PVM parent ID. This method is also used for MPIF applications and for MPICH and LAM applications depending on circumstances.
The second method is used for MPICH applications running under the ch_p4 device on workstation clusters. This method currently alters the argument list passed to the processes. When MPI-2 eliminates the mandatory passing of {argc,argv} to MPI_Init, this will be changed to alter the environment as required.
The third method is applicable to LAM processes when the user requests a single process per LAM/PVM node.
These systems require the user to adhere to some superficial constraints, such as placing MPI executables in user-configurable directories so that their nature can be determined from their location. The declaration of available nodes in the case of LAM5.X and MPICH is also required before spawn time. Since LAM 6.0 can alter its virtual machine, this has to be polled at spawn time by a specialized tasker running on one of its nodes.
The spawn command has not altered, although when interfacing to a resource manager, it is allowed to be called with one of the following additional flags--PVMPI_LAM or PVMPI_MPICH--in place of the current spawn flag options. If a specialized tasker is used, spawning is identical to spawning on a MPP front-end or service node:
pvm_spawn( "MPI_APP",..,PvmTaskHost,"Host_in_MPI_system", N, ..)