On Thu, 12 Nov 2009, tomasz jankowski wrote:
ello group,
i think I know how to split communicators & how it works in pure c mpi. but I have problems with boost::mpi.
assume that we want divide world communicator into 3 groups. please look here:
mpi::environment env(argc, argv); mpi::communicator world; mpi::communicator elloa; mpi::communicator elloc; mpi::communicator ellob;
if(world.rank() == 0){ elloa = world.split(0); } if(world.rank() == 1){ elloa = world.split(0); } if(world.rank() == 2){ elloa = world.split(0); } if(world.rank() == 3){ ellob = world.split(1); } if(world.rank() == 4){ ellob = world.split(1); } if(world.rank() == 5){ ellob = world.split(1); } if(world.rank() == 6){ elloc = world.split(2); } if(world.rank() == 7){ elloc = world.split(2); }
if(world.rank() == 0){ std::cout<<"elloa " << elloa.size()<<std::endl; std::cout<<"ellob " << ellob.size()<<std::endl; std::cout<<"elloc " << elloc.size()<<std::endl; }
the code above gives me such results:
elloa 3 ellob 8 elloc 8
my question is why ellob and alloc communicators counts 8 members not 3 and 2 respetively?
what I'm doing incorrect?
Does similar code work in C? MPI_Comm_split must be called on all ranks in the input communicator, not just those that will be in some particular output communicator. See the top of http://www.mpi-forum.org/docs/mpi22-report/node134.htm for this restriction; the documentation for MPI_Comm_split is later on that page. -- Jeremiah Willcock