SPAWN(3PVM) SPAWN(3PVM)
NAME
pvm_spawn - Starts new PVM processes.
SYNOPSIS
C int numt = pvm_spawn( char *task, char **argv, int flag, char
*where, int ntask, int *tids )
Fortran call pvmfspawn( task, flag, where, ntask, tids, numt )
PARAMETERS
task Character string which is the executable file name of the PVM pro-
cess to be started. The executable must already reside on the host
on which it is to be started. The name may be a file in the PVM
search path or an absolute path. The default PVM search path is
$HOME/pvm3/bin/$PVM_ARCH/ .
argv Pointer to an array of arguments to the executable (if supported on
the target machine), not including the executable name, with the
end of the array specified by NULL. argv[0] of the spawned task is
set to the executable path relative to the PVM working directory
(or absolute if an absolute filename was specified). If the exe-
cutable needs no arguments, then the second argument to pvm_spawn
is NULL.
flag Integer specifying spawn options.
In C, flag should be the sum of:
Option value MEANING
PvmTaskDefault 0 PVM can choose any machine to start task
PvmTaskHost 1 where specifies a particular host
PvmTaskArch 2 where specifies a type of architecture
PvmTaskDebug 4 Start up processes under debugger
PvmTaskTrace 8 Processes will generate PVM trace data. *
PvmMppFront 16 Start process on MPP front-end.
PvmHostCompl 32 Use complement host set
In Fortran, flag should be the sum of:
Option value MEANING
PVMDEFAULT 0 PVM can choose any machine to start task
PVMHOST 1 where specifies a particular host
PVMARCH 2 where specifies a type of architecture
PVMDEBUG 4 Start up processes under debugger
PVMTRACE 8 Processes will generate PVM trace data. *
* future extension
where Character string specifying where to start the PVM process.
Depending on the value of flag, where can be a host name such as
``ibm1.epm.ornl.gov'' or a PVM architecture class such as ``SUN4''.
If flag is 0, then where is ignored and PVM will select the most
appropriate host.
ntask Integer specifying the number of copies of the executable to start.
tids Integer array of length ntask returning the tids of the PVM
processes started by this pvm_spawn call.
numt Integer returning the actual number of tasks started. Values less
than zero indicate a system error. A positive value less than
ntask indicates a partial failure. In this case the user should
check the tids array for the error code(s).
DISCUSSION
The routine pvm_spawn starts ntask copies of the executable named task. On
systems that support environment, spawn passes selected variables from
parent environment to children tasks. If set, the envar PVM_EXPORT is
passed. If PVM_EXPORT contains other names (separated by ':') they will be
passed too. This is useful for e.g.:
setenv DISPLAY myworkstation:0.0
setenv MYSTERYVAR 13
setenv PVM_EXPORT DISPLAY:MYSTERYVAR
The hosts on which the PVM processes are started are determined by the flag
and where arguments. On return the array tids contains the PVM task iden-
tifiers for each process started.
If pvm_spawn starts one or more tasks, numt will be the actual number of
tasks started. If a system error occurs then numt will be < 0. If numt is
less than ntask then some executables have failed to start and the user
should check the last ntask - numt locations in the tids array which will
contain error codes (see below for meaning). The first numt tids in the
array are always valid.
When flag is set to 0 and where is set to NULL (or ``*'' in Fortran) a
heuristic (round-robin assignment) is used to distribute the ntask
processes across the virtual machine.
If the PvmHostCompl flag is set, the resulting host set gets complemented.
Also, the TaskHost hostname "." is taken as localhost. These can be used,
for example, to spawn n - 1 tasks on host "." with flags TaskHost|HostCompl
to get all but the localhost.
In the special case where a multiprocessor is specified by where, pvm_spawn
will start all ntask copies on this single machine using the vendor's
underlying routines.
The spawned task will have argv[0] set to the the executable path relative
to its inherited working directory (or possibly an absolute path), so the
base filename can be got by using:
char *p;
p = (p = rindex(argv[0], '/')) ? p + 1 : argv[0];
If PvmTaskDebug is set, then the pvmd will start the task(s) under
debugger(s). In this case, instead of executing pvm3/bin/ARCH/task args it
executes pvm3/lib/debugger pvm3/bin/ARCH/task args. debugger is a shell
script that the users can modify to their individual tastes. Presently the
script starts an xterm with dbx or comparable debugger in it.
EXAMPLES
C:
numt = pvm_spawn( "host", 0, PvmTaskHost, "sparky", 1, &tid[0] );
numt = pvm_spawn( "host", 0, (PvmTaskHost+PvmTaskDebug),
"sparky", 1, &tid[0] );
numt = pvm_spawn( "node", 0, PvmTaskArch, "RIOS", 1, &tid[i] );
char *args[] = { "12", "60" , (char*)0 };
numt = pvm_spawn( "FEM1", args, 0, 0, 16, tids );
numt = pvm_spawn( "pde", 0, PvmTaskHost, "paragon.ornl", 512, tids );
Fortran:
FLAG = PVMARCH + PVMDEBUG
CALL PVMFSPAWN( 'node', FLAG, 'SUN4', 1, TID(3), NUMT )
CALL PVMFSPAWN( 'FEM1', PVMDEFAULT, '*', 16, TIDS, NUMT )
CALL PVMFSPAWN( 'TBMD', PVMHOST, 'cm5.utk.edu', 32, TIDS, NUMT )
ERRORS
These error conditions can be returned by pvm_spawn either in numt or in
the tids array.
PvmBadParam giving an invalid argument value.
PvmNoHost Specified host is not in the virtual machine.
PvmNoFile Specified executable cannot be found. The default
location PVM looks in is ~/pvm3/bin/ARCH,
where ARCH is a PVM architecture name.
PvmNoMem Malloc failed. Not enough memory on host.
PvmSysErr pvmd not responding.
PvmOutOfRes out of resources.
Back to the alphabetical listing
Back to the listing of routines
for controling the virtual machine