#include <stdio.h>
#include <mpi.h>
int main(int argc, char *argv[])
{
int node, value, numProcs, size,i, p, tag, start_row, sum1, sum2;
int chunk_size;
int Myarray1[20],Myarray2[10];
MPI_Status status;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD, &node);
MPI_Comm_size(MPI_COMM_WORLD, &numProcs);
size = 12;
sum1 = 0;
sum2 = 0;
chunk_size=3;
if(node == 0)
{
printf("The Original Array Myarray1 has: \n"); for(i
=0; i
<size
; i
++)
{
Myarray1[i] = (i*2);
printf("Myarray1[%d] = %d\n",i
,Myarray1
[i
]); }
for(i=0; i<chunk_size; i++)
Myarray2[i] = Myarray1[i];
for(p=1; p<numProcs; p++)
{
start_row = p*chunk_size;
MPI_Send(&Myarray1 [start_row], chunk_size,MPI_INT, p, tag, MPI_COMM_WORLD);
}
} /*end if*/
else
MPI_Recv(&Myarray2, chunk_size, MPI_INT,0, tag, MPI_COMM_WORLD, &status);
for(i=0; i<chunk_size; i++)
sum1 = sum1+ Myarray2[i];
MPI_Reduce(&sum1, &sum2, 1, MPI_INT, MPI_SUM, 0,MPI_COMM_WORLD);
printf("I am node: %d My Sum = %d\n",node
, sum1
);
if(node == 0)
printf("My Rank is: %d The Total = %d\n",node
,sum2
);
MPI_Finalize();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+IAojaW5jbHVkZSA8bXBpLmg+CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQp7CmludCBub2RlLCB2YWx1ZSwgbnVtUHJvY3MsIHNpemUsaSwgcCwgdGFnLCBzdGFydF9yb3csIHN1bTEsIHN1bTI7CgppbnQgY2h1bmtfc2l6ZTsKCmludCBNeWFycmF5MVsyMF0sTXlhcnJheTJbMTBdOyAKTVBJX1N0YXR1cyBzdGF0dXM7CgpNUElfSW5pdCgmYXJnYywmYXJndik7CgpNUElfQ29tbV9yYW5rKE1QSV9DT01NX1dPUkxELCAmbm9kZSk7CiBNUElfQ29tbV9zaXplKE1QSV9DT01NX1dPUkxELCAmbnVtUHJvY3MpOwoKc2l6ZSA9IDEyOwpzdW0xID0gMDsgCnN1bTIgPSAwOwpjaHVua19zaXplPTM7CgppZihub2RlID09IDApCgp7CgpwcmludGYoIlRoZSBPcmlnaW5hbCBBcnJheSBNeWFycmF5MSBoYXM6IFxuIik7IGZvcihpPTA7IGk8c2l6ZTsgaSsrKQoKewoKTXlhcnJheTFbaV0gPSAoaSoyKTsgCnByaW50ZigiTXlhcnJheTFbJWRdID0gJWRcbiIsaSxNeWFycmF5MVtpXSk7Cn0KZm9yKGk9MDsgaTxjaHVua19zaXplOyBpKyspIApNeWFycmF5MltpXSA9IE15YXJyYXkxW2ldOyAKZm9yKHA9MTsgcDxudW1Qcm9jczsgcCsrKQoKewoKc3RhcnRfcm93ID0gcCpjaHVua19zaXplOwoKTVBJX1NlbmQoJk15YXJyYXkxIFtzdGFydF9yb3ddLCBjaHVua19zaXplLE1QSV9JTlQsIHAsIHRhZywgTVBJX0NPTU1fV09STEQpOwoKfQogfSAvKmVuZCBpZiovCgplbHNlCgpNUElfUmVjdigmTXlhcnJheTIsIGNodW5rX3NpemUsIE1QSV9JTlQsMCwgdGFnLCBNUElfQ09NTV9XT1JMRCwgJnN0YXR1cyk7Cgpmb3IoaT0wOyBpPGNodW5rX3NpemU7IGkrKykKIHN1bTEgPSBzdW0xKyBNeWFycmF5MltpXTsKCk1QSV9SZWR1Y2UoJnN1bTEsICZzdW0yLCAxLCBNUElfSU5ULCBNUElfU1VNLCAwLE1QSV9DT01NX1dPUkxEKTsgCnByaW50ZigiSSBhbSBub2RlOiAlZCBNeSBTdW0gPSAlZFxuIixub2RlLCBzdW0xKTsKCmlmKG5vZGUgPT0gMCkKCnByaW50ZigiTXkgUmFuayBpczogJWQgVGhlIFRvdGFsID0gJWRcbiIsbm9kZSxzdW0yKTsKCk1QSV9GaW5hbGl6ZSgpOwogcmV0dXJuIDA7CgoKfQ==