[petsc-dev] mpi_comm_create_group()

Jed Brown jed at jedbrown.org
Thu Dec 2 17:09:34 CST 2021

Adrian Croucher <a.croucher at auckland.ac.nz> writes:

> hi
> This question is not strictly PETSc-related but I figure you guys are 
> probably most likely to know the answer.
> I need to do some simple computations involving only a small subset of 
> the parallel processes in my simulation.
>  From reading the MPI documentation and a few tutorials it looks like 
> mpi_comm_create_group() is probably the thing to use for creating the 
> MPI communicator in this case. Since there are only a few processes in 
> the group, from what I can gather this function should be more efficient 
> than mpi_comm_create(), as it's only collective on the group, not the 
> whole parent communicator (MPI_COMM_WORLD).
> 1) Is it correct that mpi_comm_create_group() should be a better option 
> in this case than mpi_comm_create()? I had a grep through the PETSc 
> source code and there are some calls to mpi_comm_create() but none to 
> mpi_comm_create_group(). But maybe the use case is different.

Sure, but this is probably premature optimization.

Many find MPI_Comm_split() to be a more convenient interface.

> 2) If mpi_comm_create_group() is the better option, is it necessary to 
> call it on all processes, or only the ones in the group? The tutorial at 
> https://mpitutorial.com/tutorials/introduction-to-groups-and-communicators/ 
> calls it on all processes, but other stuff I've read suggests you only 
> need to call it on processes in the group. It seems to work either way, 
> but you have to use the communicator a little differently.

I think the man page is fairly clear.

| MPI_Comm_create_group is similar to MPI_Comm_create; however, MPI_Comm_create must be called by all processes in the group of comm, whereas MPI_Comm_create_group must be called by all processes in group, which is a subgroup of the group of comm.

More information about the petsc-dev mailing list