communicator_mpi


communicator_mpi, a Fortran90 code which creates new communicators involving a subset of initial set of MPI processes in the default communicator MPI_COMM_WORLD.

To understand this code, let's assume we run it under MPI with 4 processes. Within the default communicator, the processes will have ID's of 0, 1, 2 and 3.

We can call MPI_Comm_group() to request that a "group id" be created from MPI_COMM_WORLD. Then we call MPI_Group_incl(), passing a list of a subset of the legal process ID's in MPI_COMM_WORLD, to be identified as a new group. In particular, we'll pass the even ID's, creating an even group, and later create an odd group in the same way.

A group ID can be used to create a new communicator, calling MPI_Comm_create(). Once we have this new communicator, we can use functions like MPI_Comm_Rank() and MPI_Comm_Size(), specifying the name of the new communicator. We then can use a function like MPI_Reduce() to sum up data associated exclusively with the processes in that communicator.

One complicating factor is that a process that is not part of the new communicator cannot make an MPI call that invokes that communicator. For instance, an odd process could not call MPI_Comm_rank() asking for its rank in the even communicator. If you look at the code, you will see that we have to be careful to determine what group we are in before we make calls to the MPI routines.

Thus, in the example, we could begin with 4 processes, whose global ID's are 0, 1, 2 and 3. We create an even communicator containing processes 0 and 2, and an odd communicator with 1 and 3. Notice that, within the even communicator, the processes with global ID's 0 and 2 have even communicator ID's of 0 and 1.

We can call MPI_Reduce() to sum the global ID's of the processes in the even communicator, getting a result of 2; the same sum, over the odd communicator, results in 4.

Licensing:

The information on this web page is distributed under the MIT license.

Languages:

communicator_mpi is available in a C version and a C++ version and a Fortran90 version.

Related Data and codes:

communicator_mpi_test

mpi_test, a Fortran90 code which use the message passing interface (MPI) for parallel computations in a distributed memory environment.

Reference:

  1. Michael Quinn,
    Parallel codeming in C with MPI and OpenMP,
    McGraw-Hill, 2004,
    ISBN13: 978-0071232654,
    LC: QA76.73.C15.Q55.

Source Code:


Last revised on 11 June 2020.