Question: /** * You are required to modify the MPI code so that, instead of using MPI_Allgather, it uses the non-blocking send and receive messages. *
/**
* You are required to modify the MPI code so that, instead of using MPI_Allgather, it uses the non-blocking send and receive messages.
* This must be done without affecting correctness.
* */
//============================================================================
#include
#include
#include
#define N 16
int main(int argc, char *argv[]){
int rank, P;
int i, j;
int sbuff[N];
int* rbuff;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &P);
for(i=0; i sbuff[i] = (i+rank+rand()) % 100; // random integer chosen from 0-99 if(rank==6) for(i=0; i printf("rank=%d,sbuff[%d]=%d ",rank,i,sbuff[i]); rbuff = (int*) malloc(N*P*sizeof(int)); // You need to replace the MPI_Allgather with non-blocking MPI send and receive routines MPI_Allgather(sbuff, N, MPI_INT, rbuff, N, MPI_INT, MPI_COMM_WORLD); if(rank==0) // your solution is correct only if printed values are the same as above for(i=N*6; i printf("rank=%d,rbuff[%d]=%d ",rank,i,rbuff[i]); MPI_Finalize(); return 0; }
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
