Message Passing Interface (MPI) : MPI_Recv example

This post talks about a simple MPI sending and receiving operation.

#include"stdio.h"
#include"mpi.h"

int main(int argc, char **argv)
{
	int myid, size;
	int data_arr[2];
	MPI_Status status;
	
	//Initialize MPI environment 
	MPI_Init(&argc,&argv);
	
	//Get total number of processes
	MPI_Comm_size(MPI_COMM_WORLD, &size);
	
	//Get my unique ID among all processes
	MPI_Comm_rank(MPI_COMM_WORLD, &myid);
	
	// Process with ID exactly equal to 0
	if(myid==0)
	{
		//Initialize data to be sent
		data_arr[0] = 159;
		data_arr[1] = 357;
		
		//Print the data to be sent
		printf("\nmyid: %d \t data_arr[0] = %d", myid, data_arr[0]);
		printf("\nmyid: %d \t data_arr[1] = %d", myid, data_arr[1]);
		
		//Send data
		MPI_Send(data_arr, 2, MPI_INT, 1, 0, MPI_COMM_WORLD);
		printf("\nmyid: %d \t Data sent.\n", myid);	
	}
	else if(myid==1)	// Process with ID exactly equal to 1
	{
		//Initialize receive array to some other data
		data_arr[0] = 10;
		data_arr[1] = 20;
		
		MPI_Recv(data_arr, 2, MPI_INT, 0, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
		
		printf("\nmyid: %d \t Data received.", myid);
		
		//Print received data
		printf("\nmyid: %d \t data_arr[0] = %d", myid, data_arr[0]);
		printf("\nmyid: %d \t data_arr[1] = %d", myid, data_arr[1]);
		
		printf("\n\nProgram exit!\n");	
	}
	
	//End MPI environment        
	MPI_Finalize();
}

To compile this code, use following command –

mpicc mpi_recv_example.c

To execute this code, run following command –

mpiexec -n 2 ./a.out

Output of this code will be something similar to the following –

myid: 0 	 data_arr[0] = 159
myid: 0 	 data_arr[1] = 357
myid: 0 	 Data sent.

myid: 1 	 Data received.
myid: 1 	 data_arr[0] = 159
myid: 1 	 data_arr[1] = 357

Program exit!