Provided by: openmpi-doc_1.6.5-8_all bug

NAME

       MPI_Comm_spawn - Spawns a number of identical binaries.

SYNTAX

C Syntax

       #include <mpi.h>
       int MPI_Comm_spawn(char *command, char *argv[], int maxprocs,
            MPI_Info info, int root, MPI_Comm comm,
            MPI_Comm *intercomm, int array_of_errcodes[])

Fortran Syntax

       INCLUDE 'mpif.h'
       MPI_COMM_SPAWN(COMMAND, ARGV, MAXPROCS, INFO, ROOT, COMM,
            INTERCOMM, ARRAY_OF_ERRCODES, IERROR)

            CHARACTER*(*) COMMAND, ARGV(*)
            INTEGER   INFO, MAXPROCS, ROOT, COMM, INTERCOMM,
            ARRAY_OF_ERRCODES(*), IERROR

C++ Syntax

       #include <mpi.h>
       MPI::Intercomm MPI::Intracomm::Spawn(const char* command,
            const char* argv[], int maxprocs, const MPI::Info& info,
            int root, int array_of_errcodes[]) const

       MPI::Intercomm MPI::Intracomm::Spawn(const char* command,
            const char* argv[], int maxprocs, const MPI::Info& info,
            int root) const

INPUT PARAMETERS

       command   Name of program to be spawned (string, significant only at root).

       argv      Arguments to command (array of strings, significant only at root).

       maxprocs  Maximum number of processes to start (integer, significant only at root).

       info      A  set  of key-value pairs telling the runtime system where and how to start the
                 processes (handle, significant only at root).

       root      Rank of process in which previous arguments are examined (integer).

       comm      Intracommunicator containing group of spawning processes (handle).

OUTPUT PARAMETER

       intercomm Intercommunicator between original group and the newly spawned group (handle).

       array_of_errcodes
                 One code per process (array of integers).

       IERROR    Fortran only: Error status (integer).

DESCRIPTION

       MPI_Comm_spawn tries to start maxprocs identical copies of the MPI  program  specified  by
       command,  establishing  communication  with  them  and returning an intercommunicator. The
       spawned processes are referred to as children. The children have their own MPI_COMM_WORLD,
       which  is  separate  from that of the parents. MPI_Comm_spawn is collective over comm, and
       also may not return until MPI_Init has been called in the children. Similarly, MPI_Init in
       the  children  may not return until all parents have called MPI_Comm_spawn. In this sense,
       MPI_Comm_spawn in the parents and MPI_Init in the children  form  a  collective  operation
       over  the  union  of  parent  and  child  processes.  The  intercommunicator  returned  by
       MPI_Comm_spawn contains the parent processes in the local group and the child processes in
       the  remote group. The ordering of processes in the local and remote groups is the same as
       the as the ordering of the group of the comm in the parents and of MPI_COMM_WORLD  of  the
       children, respectively. This intercommunicator can be obtained in the children through the
       function MPI_Comm_get_parent.

       The MPI standard allows an  implementation  to  use  the  MPI_UNIVERSE_SIZE  attribute  of
       MPI_COMM_WORLD  to  specify  the  number  of  processes  that will be active in a program.
       Although this implementation of the MPI standard defines MPI_UNIVERSE_SIZE,  it  does  not
       allow  the  user  to set its value.  If you try to set the value of MPI_UNIVERSE_SIZE, you
       will get an error message.

       The command Argument

       The command argument is a string containing the name of  a  program  to  be  spawned.  The
       string  is null-terminated in C. In Fortran, leading and trailing spaces are stripped. MPI
       looks for the file first in the working directory of the spawning process.

       The argv Argument

       argv is an array of strings containing arguments that are passed to the program. The first
       element  of  argv is the first argument passed to command, not, as is conventional in some
       contexts, the command itself. The argument list is terminated by NULL in C and C++ and  an
       empty  string  in  Fortran (note that it is the MPI application's responsibility to ensure
       that the last entry of  the  argv  array  is  an  empty  string;  the  compiler  will  not
       automatically  insert it). In Fortran, leading and trailing spaces are always stripped, so
       that a string consisting of all  spaces  is  considered  an  empty  string.  The  constant
       MPI_ARGV_NULL  may  be used in C, C++ and Fortran to indicate an empty argument list. In C
       and C++, this constant is the same as NULL.

       In C, the MPI_Comm_spawn argument argv differs from the  argv  argument  of  main  in  two
       respects. First, it is shifted by one element. Specifically, argv[0] of main  contains the
       name of the program (given  by  command).  argv[1]  of  main  corresponds  to  argv[0]  in
       MPI_Comm_spawn,  argv[2]  of main to argv[1] of MPI_Comm_spawn, and so on. Second, argv of
       MPI_Comm_spawn must be null-terminated, so that its length can be determined.  Passing  an
       argv  of  MPI_ARGV_NULL  to MPI_Comm_spawn results in main receiving argc of 1 and an argv
       whose element 0 is the name of the program.

       The maxprocs Argument

       Open MPI tries to spawn maxprocs processes. If it is unable to spawn  maxprocs  processes,
       it raises an error of class MPI_ERR_SPAWN. If MPI is able to spawn the specified number of
       processes, MPI_Comm_spawn returns successfully and the number of spawned processes, m,  is
       given by the size of the remote group of intercomm.

       A  spawn  call with the default behavior is called hard. A spawn call for which fewer than
       maxprocs processes may be returned is called soft.

       The info Argument

       The info argument is an opaque handle of type MPI_Info in C, MPI::Info in C++ and  INTEGER
       in  Fortran.  It  is  a container for a number of user-speci ed (key,value) pairs. key and
       value are strings (null-terminated char* in C,  character*(*)  in  Fortran).  Routines  to
       create  and  manipulate  the  info  argument  are  described  in Section 4.10 of the MPI-2
       standard.

       For the SPAWN calls, info provides additional,  implementation-dependent  instructions  to
       MPI  and  the  runtime  system  on  how  to  start  processes.  An  application  may  pass
       MPI_INFO_NULL in C or Fortran. Portable  programs  not  requiring  detailed  control  over
       process locations should use MPI_INFO_NULL.

       The  following keys for info are recognized in Open MPI. (The reserved values mentioned in
       Section 5.3.4 of the MPI-2 standard are not implemented.)

       Key                             Type      Description
       ---                             ----      -----------

       host                            char *    Host on which the process should be spawned.
                                                 See the orte_host man page for an
                                                 explanation of how this will be used.
       hostfile                        char *    Hostfile containing the hosts on which
                                                 the processes are to be spawned. See
                                                 the orte_hostfile man page for an
                                                 explanation of how this will be used.
       add-host                        char *    Add the specified host to the list of
                                                 hosts known to this job and use it
                                                 for the associated process. This will
                                                 be used similarly to the -host option.
       add-hostfile                    char *    Hostfile containing hosts to be added
                                                 to the list of hosts known to this job and
                                                 use it for the associated process. This will
                                                 be used similarly to the -hostfile option.
       wdir                            char *    Directory where the executable is located. If
                                                 files are to be pre-positioned, then this
                                                 location is the desired working directory
                                                 at time of execution - if not specified,
                                                 then it will automatically be set to
                                                 ompi_preload_files_dest_dir.
       ompi_prefix                     char *    Same as the --prefix command line argument
                                                 to mpirun.
       ompi_local_slave                bool      If set to true, launch the specified process
                                                 as a local slave to the calling process.
                                                 The new process will only be known to the caller,
                                                 and will only be able to communicate with the caller.
       ompi_preload_binary             bool      If set to true, pre-position the specified
                                                 executable onto the remote host. A destination
                                                 directory must also be provided.
       ompi_preload_files_dest_dir     char *    Target directory where pre-positioned files
                                                 are to be placed.
       ompi_preload_files              char *    A comma-separated list of files that are to
                                                 be pre-positioned in addition to the executable.
                                                 Note that this option does not depend upon
                                                 ompi_preload_binary - files can be moved
                                                 to the target even if an executable is not moved.
       ompi_preload_files_src_dir      char *    Source directory where files and executables
                                                 that are to be pre-positioned can be found. If
                                                 not specified, the current working directory
                                                 will be used.
       ompi_non_mpi                    bool      If set to true, launching a non-MPI
                                                 application; the returned communicator
                                                 will be MPI_COMM_NULL. Failure to set
                                                 this flag when launching a non-MPI
                                                 application will cause both the child
                                                 and parent jobs to "hang".
       ompi_param                      char *    Pass an OMPI MCA parameter to the child job.
                                                 If that parameter already exists in the
                                                 environment, the value will be overwritten
                                                 by the provided value.
       map_bynode                      bool      If set to true, the processes are mapped bynode.
                                                 If set to false, the processes are mapped byslot.
                                                 By default, mapping is determined by the default
                                                 mapping policy set when the job was started.

       bool info keys are actually strings but are evaluated as follows: if the string value is a
       number,  it  is  converted to an integer and cast to a boolean (meaning that zero integers
       are false and non-zero values are true).  If the string value is (case-insensitive)  "yes"
       or  "true",  the  boolean  is  true.   If  the  string value is (case-insensitive) "no" or
       "false", the boolean is false.  All other string values are  unrecognized,  and  therefore
       false.

       The root Argument

       All arguments before the root argument are examined only on the process whose rank in comm
       is equal to root. The value of these arguments on other processes is ignored.

       The array_of_errcodes Argument

       The array_of_errcodes is an array of length maxprocs in which MPI reports  the  status  of
       the  processes  that  MPI  was requested to start. If all maxprocs processes were spawned,
       array_of_errcodes is filled in with the value MPI_SUCCESS. If anyof the processes are  not
       spawned,  array_of_errcodes is filled in with the value MPI_ERR_SPAWN. In C or Fortran, an
       application may pass MPI_ERRCODES_IGNORE if it is not interested in the  error  codes.  In
       C++  this  constant does not exist, and the array_of_errcodes argument may be omitted from
       the argument list.

NOTES

       Completion of MPI_Comm_spawn in the parent does not necessarily  mean  that  MPI_Init  has
       been  called  in  the  children  (although  the  returned  intercommunicator  can  be used
       immediately).

ERRORS

       Almost all MPI routines return an error value; C routines as the value of the function and
       Fortran  routines in the last argument. C++ functions do not return errors. If the default
       error handler is set to MPI::ERRORS_THROW_EXCEPTIONS, then  on  error  the  C++  exception
       mechanism will be used to throw an MPI:Exception object.

       Before  the  error value is returned, the current MPI error handler is called. By default,
       this error handler aborts the MPI job, except for I/O function errors. The  error  handler
       may    be   changed   with   MPI_Comm_set_errhandler;   the   predefined   error   handler
       MPI_ERRORS_RETURN may be used to cause error values to be returned. Note that MPI does not
       guarantee that an MPI program can continue past an error.

SEE ALSO

       MPI_Comm_spawn_multiple(3)
       MPI_Comm_get_parent(3)
       mpirun(1)