#include "mpi.h" #include int main(argc,argv) int argc; char *argv[]; { int i,numtasks, rank, count, source; MPI_Status stat; float sendbuf,sum ; float recvbuf; MPI_Init(&argc,&argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD,&numtasks); count = 1; /* recv ranks from all the tasks */ if(rank==0){ sum=0.0; for(i=1; i< numtasks;i++){ MPI_Recv(&recvbuf,count,MPI_FLOAT,i,i,MPI_COMM_WORLD,&stat); sum=sum+recvbuf; } } else { sendbuf=(float)rank; MPI_Send(&sendbuf,count,MPI_FLOAT,0,rank,MPI_COMM_WORLD); } /* send the sum to all the tasks */ if(rank==0){ for(i=1; i< numtasks;i++){ MPI_Send(&sum,count,MPI_FLOAT,i,i,MPI_COMM_WORLD); } } else { MPI_Recv(&sum,count,MPI_FLOAT,0,rank,MPI_COMM_WORLD,&stat); } printf("rank= %d SUM:%f\n ",rank,sum); MPI_Finalize(); }