On Sep 1, 2009, at 4:57 AM, Ashika Umanga Umagiliya wrote:
It worked fine.But I have small issue.Following code demonstrates how I use mpi::intercommunicator.But in the spawned child processes, the intercommunicator size is same as number of spawned processes.But it should be 1 ,right? Because,I execute the manager process (manager.cpp) as "mpirun -np 1 manager" .So there should be only one process.
I'm not familiar with the details of Boost.MPI, but when you call MPI_COMM_SPAWN, the resulting intercommunicator will have a remote group size of the number of processes that were spawned and the local group size of the number of processes that invoked MPI_COMM_SPAWN. Hence, in your case (mpirun -np 1 manager), the local group size will be 1 and the remote group size will be 5.
manager.cpp (manager process which spawns child processes) - rank 0 ------------------------------------------------------------ int main(int argc,char *argv[]) { mpi::environment evn(argc,argv); mpi::communicator world; MPI_Comm everyone; //spawn 5 child processes. MPI_Comm_spawn("./worker", MPI_ARGV_NULL, 5, MPI_INFO_NULL, 0, MPI_COMM_SELF, &everyone, MPI_ERRCODES_IGNORE); intercommunicator intcomm(everyone,comm_duplicate); if(rank==0){ GPSPosition *obj=new GPSPosition(100,200,300); shared_ptr<Position> pos(new Position); pos->setVals(); obj->addP(pos); intcomm.send(0,100,obj); } return 0; }
-- Jeff Squyres jsquy...@cisco.com