Thanks to visit codestin.com
Credit goes to www.scribd.com

0% found this document useful (0 votes)
7 views18 pages

MPI Communication Examples

The document contains multiple MPI (Message Passing Interface) C programs demonstrating various communication operations such as broadcasting, reducing, gathering, scattering, and all-to-all communication among processes. Each program initializes MPI, determines the number of processes and their ranks, and performs specific data operations based on the rank of each process. The examples illustrate how to share and manipulate data across different processes in a parallel computing environment.

Uploaded by

l215184
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
7 views18 pages

MPI Communication Examples

The document contains multiple MPI (Message Passing Interface) C programs demonstrating various communication operations such as broadcasting, reducing, gathering, scattering, and all-to-all communication among processes. Each program initializes MPI, determines the number of processes and their ranks, and performs specific data operations based on the rank of each process. The examples illustrate how to share and manipulate data across different processes in a parallel computing environment.

Uploaded by

l215184
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 18

#include<mpi.

h>
#include<stdio.h>

int main(int argc, char* argv[]){


MPI_Init(&argc,&argv);
int size;
MPI_Comm_size(MPI_COMM_WORLD,&size);
//printf("number of processes: %d\n",size); //this will be printed as many number of process
we have
int rank;
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
if(rank==0){
int data=5;
MPI_Bcast(&data,1,MPI_INT,0,MPI_COMM_WORLD);
printf("Process: %d is broadcasting %d\n",rank,data);

}
else if(rank == 1){
int data;
MPI_Bcast(&data,1,MPI_INT,0,MPI_COMM_WORLD);
printf("Process: %d recieved %d\n",rank,data);
}
else if (rank==3)
{
int data;
MPI_Bcast(&data,1,MPI_INT,0,MPI_COMM_WORLD);
printf("Process: %d recieved %d\n",rank,data);
}
else if (rank==2)
{
int data;
MPI_Bcast(&data,1,MPI_INT,0,MPI_COMM_WORLD);
printf("Process: %d recieved %d\n",rank,data);
}
MPI_Finalize();
return 0;
}

#include<mpi.h>
#include<stdio.h>
int main(int argc, char* argv[]){
MPI_Init(&argc,&argv);
int size;
MPI_Comm_size(MPI_COMM_WORLD,&size);
//printf("number of processes: %d\n",size); //this will be printed as many number of process
we have
int rank;
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
int data;
if(rank==0)
{
data=5;
printf("Process: %d is broadcasting %d\n",rank,data);
}
else
{
data=0;
}

MPI_Bcast(&data,1,MPI_INT,0,MPI_COMM_WORLD);
printf("Process: %d has data %d\n",rank,data);

MPI_Finalize();
return 0;
}

#include<mpi.h>
#include<stdio.h>

int main(int argc, char* argv[]){


MPI_Init(&argc,&argv);
int size;
MPI_Comm_size(MPI_COMM_WORLD,&size);
int rank;
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
int data;
int recv_data=-1;
if(rank==0)
{
data=5;
}
else if (rank==1)
{
data=5;
}
else if (rank==2)
{
data=10;
}
else if(rank==3)
{
data=10;
}

MPI_Reduce(&data,&recv_data,1,MPI_INT,MPI_MAX,0,MPI_COMM_WORLD);
printf("Process: %d has data %d\n",rank,recv_data);

MPI_Finalize();
return 0;
}

#include<mpi.h>
#include<stdio.h>

int main(int argc, char* argv[]){


MPI_Init(&argc,&argv);
int size;
MPI_Comm_size(MPI_COMM_WORLD,&size);
int rank;
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
int data;
int recv_data=-1;
if(rank==0)
{
data=5;
}
else if (rank==1)
{
data=5;
}
else if (rank==2)
{
data=10;
}
else if(rank==3)
{
data=10;
}

MPI_Allreduce(&data,&recv_data,1,MPI_INT,MPI_MAX,MPI_COMM_WORLD);
printf("Process: %d has data %d\n",rank,recv_data);

MPI_Finalize();
return 0;
}

#include<mpi.h>
#include<stdio.h>

int main(int argc, char* argv[]){


MPI_Init(&argc,&argv);
int size;
MPI_Comm_size(MPI_COMM_WORLD,&size);
int rank;
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
int data;
int recv_data=-1;
if(rank==0)
{
data=4;
}
else if (rank==1)
{
data=2;
}
else if (rank==2)
{
data=1;
}
else if(rank==3)
{
data=10;
}

MPI_Scan(&data,&recv_data,1,MPI_INT,MPI_SUM,MPI_COMM_WORLD);
printf("Process: %d has data %d\n",rank,recv_data);

MPI_Finalize();
return 0;
}

#include<mpi.h>
#include<stdio.h>

int main(int argc, char* argv[]){


MPI_Init(&argc,&argv);
int size;
MPI_Comm_size(MPI_COMM_WORLD,&size);
int rank;
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
int data;
int recv_data;
if(rank==0)
{
data=4;
}
else if (rank==1)
{
data=2;
}
else if (rank==2)
{
data=1;
}
else if(rank==3)
{
data=10;
}

MPI_Exscan(&data,&recv_data,1,MPI_INT,MPI_SUM,MPI_COMM_WORLD);
printf("Process: %d has data %d\n",rank,recv_data);

MPI_Finalize();
return 0;
}

0 for sum, -infinity for Max, infinity for Min, 1 for multiplication, and upto so on.

#include<mpi.h>
#include<stdio.h>

int main(int argc, char* argv[]){


MPI_Init(&argc,&argv);
int size;
MPI_Comm_size(MPI_COMM_WORLD,&size);
int rank;
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
int data;
int recv_data=-1;
if(rank==0)
{
data=4;
}
else if (rank==1)
{
data=2;
}
else if (rank==2)
{
data=1;
}
else if(rank==3)
{
data=10;
}

MPI_Exscan(&data,&recv_data,1,MPI_INT,MPI_SUM,MPI_COMM_WORLD);
printf("Process: %d has data %d\n",rank,recv_data);

MPI_Finalize();
return 0;
}

#include<mpi.h>
#include<stdio.h>

int main(int argc, char* argv[]){


MPI_Init(&argc,&argv);
int size;
MPI_Comm_size(MPI_COMM_WORLD,&size);
int rank;
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
int data;
int recv_data[4];
if(rank==0)
{
data=4;
}
else if (rank==1)
{
data=2;
}
else if (rank==2)
{
data=1;
}
else if(rank==3)
{
data=10;
}

MPI_Gather(&data,1,MPI_INT,recv_data,1,MPI_INT,0,MPI_COMM_WORLD);
printf("Process: %d has data: \n",rank);
int i=0;
for(i=0;i<4;i++)
printf(" %d ",recv_data[i]);
printf("\n");

MPI_Finalize();
return 0;
}

#include<mpi.h>
#include<stdio.h>

int main(int argc, char* argv[]){


MPI_Init(&argc,&argv);
int size;
MPI_Comm_size(MPI_COMM_WORLD,&size);
int rank;
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
int recvcount[4]={3,4,1,5};
int displs[4]={0,3,7,8};
int recv_data[15];
if(rank==0)
{
int data[3];
data[0]=4;
data[1]=6;
data[2]=2;

MPI_Gatherv(data,3,MPI_INT,recv_data,recvcount,displs,MPI_INT,0,MPI_COMM_WORLD);

}
else if (rank==1)
{
int data[4];
data[0]=9;
data[1]=7;
data[2]=33;
data[3]=50;

MPI_Gatherv(data,4,MPI_INT,recv_data,recvcount,displs,MPI_INT,0,MPI_COMM_WORLD);
}
else if (rank==2)
{
int data[1];
data[0]=90;

MPI_Gatherv(data,1,MPI_INT,recv_data,recvcount,displs,MPI_INT,0,MPI_COMM_WORLD);
}
else if(rank==3)
{
int data[5];
data[0]=75;
data[1]=37;
data[2]=73;
data[3]=52;
data[4]=0;

MPI_Gatherv(data,5,MPI_INT,recv_data,recvcount,displs,MPI_INT,0,MPI_COMM_WORLD);

if (rank==0)
{
printf("Process: %d has data: \n",rank);
int i=0,j=0;

for(i=0;i<15;i++)
{
printf("%d\n",recv_data[i]);
}
printf("\n");

for(i=0;i<size;i++)
{
printf("Sent by %d: ",i);
for(j=displs[i];j<displs[i]+recvcount[i];j++)
{
printf(" %d ",recv_data[j]);
}
printf("\n");
}
}

MPI_Finalize();
return 0;
}

#include<mpi.h>
#include<stdio.h>

int main(int argc, char* argv[]){


MPI_Init(&argc,&argv);
int size;
MPI_Comm_size(MPI_COMM_WORLD,&size);
int rank;
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
int data;
int recv_data[4];
if(rank==0)
{
data=4;
}
else if (rank==1)
{
data=2;
}
else if (rank==2)
{
data=1;
}
else if(rank==3)
{
data=10;
}

MPI_Allgather(&data,1,MPI_INT,recv_data,1,MPI_INT,MPI_COMM_WORLD);
printf("Process: %d has data: \n",rank);
int i=0;
for(i=0;i<4;i++)
printf(" %d ",recv_data[i]);
printf("\n");

MPI_Finalize();
return 0;
}

#include<mpi.h>
#include<stdio.h>

int main(int argc, char* argv[]){


MPI_Init(&argc,&argv);
int size;
MPI_Comm_size(MPI_COMM_WORLD,&size);
int rank;
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
int recvcount[4]={3,4,1,5};
int displs[4]={0,3,7,8};
int recv_data[13];
if(rank==0)
{
int data[3];
data[0]=4;
data[1]=6;
data[2]=2;

MPI_Allgatherv(data,3,MPI_INT,recv_data,recvcount,displs,MPI_INT,MPI_COMM_WORLD);

}
else if (rank==1)
{
int data[4];
data[0]=9;
data[1]=7;
data[2]=33;
data[3]=50;

MPI_Allgatherv(data,4,MPI_INT,recv_data,recvcount,displs,MPI_INT,MPI_COMM_WORLD);
}
else if (rank==2)
{
int data[1];
data[0]=90;

MPI_Allgatherv(data,1,MPI_INT,recv_data,recvcount,displs,MPI_INT,MPI_COMM_WORLD);
}
else if(rank==3)
{
int data[5];
data[0]=75;
data[1]=37;
data[2]=73;
data[3]=52;
data[4]=0;

MPI_Allgatherv(data,5,MPI_INT,recv_data,recvcount,displs,MPI_INT,MPI_COMM_WORLD);

}
printf("Process: %d has data: \n",rank);
int i=0,j=0;

for(i=0;i<13;i++)
{
printf("%d\n",recv_data[i]);
}
printf("\n");

for(i=0;i<size;i++)
{
printf("Sent by %d: ",i);
for(j=displs[i];j<displs[i]+recvcount[i];j++)
{
printf(" %d ",recv_data[j]);
}
printf("\n");
}

MPI_Finalize();
return 0;
}

#include<mpi.h>
#include<stdio.h>

int main(int argc, char* argv[]){


MPI_Init(&argc,&argv);
int size;
MPI_Comm_size(MPI_COMM_WORLD,&size);
int rank;
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
int data[4];
int recv_data;
if(rank==0)
{
data[0]=4;
data[1]=6;
data[2]=1;
data[3]=7;
}
else if (rank==1)
{

}
else if (rank==2)
{
}
else if(rank==3)
{

MPI_Scatter(&data,1,MPI_INT,&recv_data,1,MPI_INT,0,MPI_COMM_WORLD);
printf("Process: %d has data: %d \n",rank,recv_data);

MPI_Finalize();
return 0;
}

#include<mpi.h>
#include<stdio.h>

int main(int argc, char* argv[]){


MPI_Init(&argc,&argv);
int size;
MPI_Comm_size(MPI_COMM_WORLD,&size);
int rank;
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
int sendcount[4]={3,4,1,5};
int displs[4]={0,3,7,8};
int i=0;
int data[13];
if(rank==0)
{

data[0]=4;
data[1]=6;
data[2]=2;
data[3]=9;
data[4]=7;
data[5]=33;
data[6]=50;
data[7]=90;
data[8]=75;
data[9]=37;
data[10]=73;
data[11]=52;
data[12]=0;
int recv_data[3];

MPI_Scatterv(data,sendcount,displs,MPI_INT,recv_data,3,MPI_INT,0,MPI_COMM_WORLD);

for(i=0;i<3;i++)
{
printf("Process %d data:%d\n",rank,recv_data[i]);
}
printf("\n");
}
else if (rank==1)
{
int recv_data[4];

MPI_Scatterv(data,sendcount,displs,MPI_INT,recv_data,4,MPI_INT,0,MPI_COMM_WORLD);

for(i=0;i<4;i++)
{
printf("Process %d data:%d\n",rank,recv_data[i]);
}
printf("\n");
}
else if (rank==2)
{

int recv_data[1];

MPI_Scatterv(data,sendcount,displs,MPI_INT,recv_data,1,MPI_INT,0,MPI_COMM_WORLD);

for(i=0;i<1;i++)
{
printf("Process %d data:%d\n",rank,recv_data[i]);
}
printf("\n");
}
else if(rank==3)
{

int recv_data[5];

MPI_Scatterv(data,sendcount,displs,MPI_INT,recv_data,5,MPI_INT,0,MPI_COMM_WORLD);

for(i=0;i<5;i++)
{
printf("Process %d data:%d\n",rank,recv_data[i]);
}
printf("\n");

MPI_Finalize();
return 0;
}

#include<mpi.h>
#include<stdio.h>

int main(int argc, char* argv[]){


MPI_Init(&argc,&argv);
int size;
MPI_Comm_size(MPI_COMM_WORLD,&size);
int rank;
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
int data[8];
int recv_data[8];
if(rank==0)
{
data[0]=0;
data[1]=0;
data[2]=0;
data[3]=0;
data[4]=0;
data[5]=0;
data[6]=0;
data[7]=0;

}
else if (rank==1)
{
data[0]=5;
data[1]=4;
data[2]=2;
data[3]=9;
data[4]=1;
data[5]=1;
data[6]=1;
data[7]=1;

}
else if (rank==2)
{
data[0]=2;
data[1]=2;
data[2]=2;
data[3]=2;
data[4]=2;
data[5]=2;
data[6]=2;
data[7]=2;
}
else if(rank==3)
{
data[0]=3;
data[1]=3;
data[2]=3;
data[3]=3;
data[4]=3;
data[5]=3;
data[6]=3;
data[7]=3;
}

MPI_Alltoall(data,2,MPI_INT,recv_data,2,MPI_INT,MPI_COMM_WORLD);
printf("Process: %d has data:\n",rank);
int i=0;
for (i=0;i<8;i++)
printf(" %d ",recv_data[i]);
printf("\n");

MPI_Finalize();
return 0;
}

You might also like