In addition to the development of parallel libraries, communicators are also useful in organizing communication within an application. We have been describing communicators that include all processes in the application. But the programmer can also define a subset of processes, called a process group, and attach one or more communicators to the process group. Communication specifying that communicator will now be restricted to those processes.
In the example below, the communication pattern is a 2-D mesh. Each of the six boxes represents a process. Each process must exchange data with its upper and lower, and right and left neighbors. Coding this communication is simpler if the processes are grouped by column (for up/down communication) and row (for right/left communication). So, each process belongs to three communicators, which are indicated by the words in that process's box: one communicator for all processes (the default world communicator), one communicator for its row, and one communicator for its column. The communicators are as follows:
| world |
communicator for |
all processes |
uncolored |
in diagram |
| comm1 |
communicator for |
row 1 |
yellow |
in diagram |
| comm2 |
communicator for |
row 2 |
purple |
in diagram |
| comm3 |
communicator for |
column 1 |
pink |
in diagram |
| comm4 |
communicator for |
column 2 |
green |
in diagram |
| comm5 |
communicator for |
column 3 |
blue |
in diagram |
This also ties directly into use of collective communications (covered in MPI Collective Communication I).
|
world, rank0 |
world, rank1 |
world, rank2 |
|
comm1, rank0 |
comm1, rank1 |
comm1, rank2 |
|
comm3, rank0 |
comm4, rank0 |
comm5, rank0 |
|
world, rank3 |
world, rank4 |
world, rank5 |
|
comm2, rank0 |
comm2, rank1 |
comm2, rank2 |
|
comm3, rank1 |
comm4, rank1 |
comm5, rank1 |
To revisit the bill collection analogy: one person may have an account with the electric and phone companies (2 communicators) but not with the water company. The electric communicator may contain different people than the phone communicator. A person's ID number (rank) may vary with the utility (communicator). So, it is critical to note that the rank given as message source or destination is the rank in the specified communicator.