Dynamic Process comment: using MPI_Init() without mpirun

Gary Oberbrunner (garyo@avs.com)
Mon, 29 Apr 1996 18:08:08 -0400

I have to say the dynamic process stuff is really shaping up nicely.
I look forward to using it. There are too many functions, of course,
but that can't be helped except by collapsing them and adding extra
args, which I think had been rejected before. Of course MPI_Spawn is
just MPI_Spawn_Multiple with count=1, and all of the Spawns are really
spawn_independent with accept & connect, but I'd still keep them
because they're convenient (even though they're trivial to implement
using the other functions, right?)

My main comment is this: there are plenty of functions to start *more*
MPI processes given one, and connect up any number of existing MPI
processes; now all that's missing is a standard function to start
*one* MPI process, given none. In other words, a function to make a
random process into a singleton MPI application (with its own
COMM_WORLD, rank=0, MPI_Comm_size=1).

With such a function we could dispense with mpirun and friends
altogether, and any application could just use this function to
"become" the first process, and then spawn all the rest of the
processes.

I suggest that this function already exists: we just need to specify
that if a non-MPI process (not started from mpirun or via MPI_Spawn)
calls MPI_Init() it becomes a singleton MPI process. The resource
issues that mpirun normally handles to start the rest of the processes
would be turned over to MPI_Spawn (giving the initial process more
dynamic control than with mpirun now).

Does this make sense? It's *definitely* the configuration I would use
all the time if it were available, since my MPI applications are
currently started by fork/exec from a parent process (the visual
programming environment). Currently (with no spawn at all) I have to
do this with an intervening shell script which starts all the MPI
processes (with mpirun), and then make MPI process 0 the master and
all the rest the slaves. If I could start the visual programming
environment as usual and have it "become" an MPI process dynamically
when someone requests a parallel operation, I could just MPI_Spawn all
the slaves directly from the environment (which would be the master,
saving me a process and a bunch of IPC).

I realize this won't replace mpirun entirely, because sometimes you
have to start *all* the tasks at the same time because of the resource
manager, but I think on any system that can support spawning it should
work well, and go beyond what you can do now with mpirun.

thanks,

-- 
Gary Oberbrunner			garyo@avs.com
Advanced Visual Systems, Inc.		http://www.avs.com/~garyo
300 Fifth Avenue			(617)890-8192 x2133  TEL
Waltham, MA 02154			(617)890-8287	     FAX