Sorry it's taken so long to reply; I see that you have posted a few times
about this question and related follow-up questions. I'm replying to this
one for the web archives, and will reply in detail to your last posting.
On Thu, 29 May 2003, Sherif Abd El-Momen wrote:
> Hi!
> I want a group of process to spawn one processes at a time an merge it
> into their comm. here is my program. but what happend is that every process
> in the main group creats a process. so how can I fix that so as all of them
> share in creating 1 process - or one group- so what I am doing wrong.
> another question:
> how can I merge two different intracomm in one intracomm, both have the same
> master.
> Please advise
> Best Regards
> Sherif
>
> #include <stdio.h>
> #include <string.h>
> /* manager */
> #include "mpi.h"
> #define CMDSIZE 80
>
> int main(int argc, char *argv[])
> {
> char * myargv[6];
> char processor_name[MPI_MAX_PROCESSOR_NAME],controlmsg[CMDSIZE];
> int namelen,rank, world_size, universe_size, *universe_sizep, flag;
> MPI_Comm everyone; /* intercommunicator */
> MPI_Comm Simulation;
> int size;
> char worker_program[100];
> MPI_Init(&argc, &argv);
>
> /*
> * Now spawn the workers. Note that there is a run-time determination
> * of what type of worker to spawn, and presumably this calculation must
> * be done at run time and cannot be calculated before starting
> * the program. If everything is known when the application is
> * first started, it is generally better to start them all at once
> * in a single MPI_COMM_WORLD.
> */
>
> /* choose_worker_program(worker_program);*/
> MPI_Comm_rank( MPI_COMM_WORLD, &rank );
>
> strcpy( worker_program, "/home/abdelmss/MPI/slave" );
>
> MPI_Comm_rank( MPI_COMM_WORLD, &rank );
>
> MPI_Comm_spawn(worker_program,MPI_ARGV_NULL, 3,
> MPI_INFO_NULL, 0, MPI_COMM_SELF, &everyone,
> MPI_ERRCODES_IGNORE);
> MPI_Barrier(MPI_COMM_WORLD);
> printf ("the process have been created\n");
> MPI_Intercomm_merge(everyone,0,&Simulation);
> MPI_Barrier(Simulation);
> MPI_Comm_size( Simulation, &size );
> printf ("size %d \n ",size);
> printf ("the master exit\n");
> MPI_Finalize();
> return 0;
> }
>
> /* worker */
>
> #include "mpi.h"
> #define CMDSIZE 80
> #include <lam_ksignal.h>
>
> int main(int argc, char *argv[])
> { int namelen,i;
> char processor_name[MPI_MAX_PROCESSOR_NAME];
> int size,rank;
> MPI_Comm parent;
> MPI_Comm Simulation;
> char worker_program[100];
> MPI_Init(&argc, &argv);
>
>
>
> MPI_Comm_get_parent(&parent);
> MPI_Intercomm_merge(parent,1,&Simulation);
> MPI_Barrier(Simulation);
> MPI_Comm_size(Simulation, &size);
> MPI_Comm_rank( Simulation, &rank );
>
>
> /*
> * Parallel code here.
> * The manager is represented as the process with rank 0 in (the remote
> * group of) MPI_COMM_PARENT. If the workers need to communicate among
> * themselves, they can use MPI_COMM_WORLD.
> */
>
>
> printf ("the slave are exiting, my rank %d \n",rank);
> MPI_Finalize();
> return 0;
> }
>
> _________________________________________________________________
> STOP MORE SPAM with the new MSN 8 and get 2 months FREE*
> http://join.msn.com/?page=features/junkmail
>
> _______________________________________________
> This list is archived at http://www.lam-mpi.org/MailArchives/lam/
>
--
{+} Jeff Squyres
{+} jsquyres_at_[hidden]
{+} http://www.lam-mpi.org/
|