[MPICH] Disconnecting spawned processes after MPI_Intercomm_merge
Rajeev Thakur
thakur at mcs.anl.gov
Tue Sep 26 13:12:46 CDT 2006
> The problem occurs when I create an intracommunicator with
> MPI_Intercomm_merge(). I've tried freeing and disconnecting
> from the new
> intracomm but the child processes seem to be waiting for the
> parent to MPI_Finalize().
It's a bug in the current release of MPICH2 that the finalize on the client
synchronizes with the finalize on the server. It happens even without the
intercomm_merge I think.
Rajeev
> -----Original Message-----
> From: owner-mpich-discuss at mcs.anl.gov
> [mailto:owner-mpich-discuss at mcs.anl.gov] On Behalf Of James S Perrin
> Sent: Tuesday, September 26, 2006 12:03 PM
> To: mpich
> Subject: [MPICH] Disconnecting spawned processes after
> MPI_Intercomm_merge
>
> Hi,
> I'm following up to my earlier query about using forked
> processes in MPI . As
> this was considered a no-no I've being trying to put together
> the appropiate
> framework using spawned processes. Simply I want to start a
> set of spawned
> processes and then end them (due to a 3rd party API forcing
> an exit) and keep
> the parent processes running.
>
> After searching online and looking at the MPI-2 spec it
> seems the use of
> MPI_Comm_disconnect is not well documented. However I've got
> a simple example to
> work, which just launches and closes the spawned processes once.
>
> The problem occurs when I create an intracommunicator with
> MPI_Intercomm_merge(). I've tried freeing and disconnecting
> from the new
> intracomm but the child processes seem to be waiting for the
> parent to
> MPI_Finalize(). How do I release the intracomm? Is this a bug
> or feature?
>
> "Using MPI" implies that I might be better off using
> intercommunicators for my
> "parallel-server, parallel-client" application so I guess I
> should explore this.
>
> spawn_master.c
> int main (int argc, char * argv[])
> {
> int no_exit = 1;
> MPI_Comm inter_comm, new_world;
>
> MPI_Init (&argc, &argv);
> MPI_Comm_spawn("./spawn_worker", &argv[1], 1, MPI_INFO_NULL, 0,
> MPI_COMM_WORLD, &inter_comm, errs);
> MPI_Intercomm_merge(inter_comm, 0, &new_world);
>
> // Let worker do its thing
>
> MPI_Comm_free(&new_world);
> MPI_Comm_disconnect(&inter_comm);
>
> while(no_exit)
> {
> // go and do something else
> }
>
> MPI_Finalize();
> return EXIT_SUCCESS;
> }
>
>
> spawn_worker.c
> int main (int argc, char * argv[])
> {
> MPI_Comm parent, new_world;
>
> MPI_Init (&argc, &argv);
> MPI_Comm_get_parent(&parent);
> MPI_Intercomm_merge(parent, 1, &new_world);
>
> // Do something useful
>
> MPI_Comm_free(&new_world);
> MPI_Comm_disconnect(&parent);
> MPI_Finalize();
> return EXIT_SUCCESS;
> }
>
>
> Appologies for rambling but I kept coming across new bits of
> info as I was
> writing this.
>
> Regards
> James
> --
> --------------------------------------------------------------
> ---------------
> James S. Perrin, | email:
> james.perrin at manchester.ac.uk
> Manchester Visualization Centre, |
> www.sve.man.ac.uk/General/Staff/perrin
> Kilburn Building, The University, | tel: +44 161 275 6945
> Manchester, England. M13 9PL. | fax: +44 161 275 6800/6040
> --------------------------------------------------------------
> ---------------
> "The test of intellect is the refusal to belabour the
> obvious" -Alfred Bester
> --------------------------------------------------------------
> ---------------
>
>
More information about the mpich-discuss
mailing list