# Communicator in MPI

To understand various message passing routines we need to begin with what a communicator in MPI is.

In the introduction to MPI in the first week we already saw the simple exercise of Hello world. Yet, in order to actually write some useful applications, we will need to learn some basic routines.

To start, we need to understand what a communicator in MPI is. As we launch MPI, the entire environment puts all the processes and the cores that are involved in this application and binds them together in what is referred to as a communicator. A communicator is like a set that binds all the processes together and corroborates that only the processes that are together in an application can communicate with each other. The default communicator that we will use most often is

MPI_COMM_WORLD

mpi.h

Image courtesy: Rolf Rabenseifner (HLRS)

### Ranks and Size

As mentioned earlier, we frequently use the MPI_COMM_WORLD when we will need to use a communicator. Once we actually initialize the MPI environment, all the processes would then be in the communicator. As we can predict, it would be nice to be able to distinguish between different processes and this is where the ranks come in. When we initialize the environment, the MPI communicator will dedicate a number to each process. This is known as the rank. It is a number that is starting from zero and ends with the size minus one. In this example, as you can see, we have launched the application with seven cores and each of them is given a rank. So, in this application we have different processes that have been given ranks from zero to six.

This helps us in identifying and using a specific processor. For instance, if we would want the processor number two to perform a certain task, we can command execution of the task with the condition: if the rank is 2. In the following subsections, when we progress further to learn about sending messages between specific processors, we will see how rank is useful. It is useful to say, e.g., if rank is equal to 2, send a message to rank 6. This is how we do the sending and receiving of the messages between different processes in MPI.

In order to actually get these numbers, we have two basic routines in MPI. We know now that when we initialize the MPI environment, rank is the number that each of the processor is given and is the number by which you can identify a process. The size tells us the number of processes that are contained within a communicator or simply how many processes are in our application. For instance, when the size is 10, rank goes from zero to nine and so on.

There are two basic routines for the rank

MPI_Comm_rank(MPI_Comm comm, int *rank)

and for the size

MPI_Comm_size(MPI_Comm comm, int *size);

Image courtesy: Rolf Rabenseifner (HLRS)