I2luY2x1ZGUgJmx0O3N0ZGlvLmgmZ3Q7ICNpbmNsdWRlICZsdDttcGkuaCZndDsKCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCgppbnQgbm9kZSwgdmFsdWUsIG51bVByb2NzLCBzaXplLGksIHAsIHRhZywgc3RhcnRfcm93LCBzdW0xLCBzdW0yOwoKaW50IGNodW5rX3NpemU7CgppbnQgTXlhcnJheTFbMjBdLE15YXJyYXkyWzEwXTsgTVBJX1N0YXR1cyBzdGF0dXM7CgpNUElfSW5pdCgmYW1wO2FyZ2MsJmFtcDthcmd2KTsKCk1QSV9Db21tX3JhbmsoTVBJX0NPTU1fV09STEQsICZhbXA7bm9kZSk7IE1QSV9Db21tX3NpemUoTVBJX0NPTU1fV09STEQsICZhbXA7bnVtUHJvY3MpOwoKc2l6ZSA9IDEyOwoKc3VtMSA9IDA7IHN1bTIgPSAwOwoKY2h1bmtfc2l6ZT0zOwoKaWYobm9kZSA9PSAwKQoKewoKcHJpbnRmKCZxdW90O1RoZSBPcmlnaW5hbCBBcnJheSBNeWFycmF5MSBoYXM6IFxuJnF1b3Q7KTsgZm9yKGk9MDsgaSZsdDtzaXplOyBpKyspCgp7Cgp9CgpNeWFycmF5MVtpXSA9IChpKjIpOyBwcmludGYoJnF1b3Q7TXlhcnJheTFbJWRdID0gJWRcbiZxdW90OyxpLE15YXJyYXkxW2ldKTsKCmZvcihpPTA7IGkmbHQ7Y2h1bmtfc2l6ZTsgaSsrKSBNeWFycmF5MltpXSA9IE15YXJyYXkxW2ldOyBmb3IocD0xOyBwJmx0O251bVByb2NzOyBwKyspCgp7CgpzdGFydF9yb3cgPSBwKmNodW5rX3NpemU7CgpNUElfU2VuZCgmYW1wO015YXJyYXkxIFtzdGFydF9yb3ddLCBjaHVua19zaXplLE1QSV9JTlQsIHAsIHRhZywgTVBJX0NPTU1fV09STEQpOwoKfSB9IC8qZW5kIGlmKi8KCmVsc2UKCk1QSV9SZWN2KCZhbXA7TXlhcnJheTIsIGNodW5rX3NpemUsIE1QSV9JTlQsMCwgdGFnLCBNUElfQ09NTV9XT1JMRCwgJmFtcDtzdGF0dXMpOwoKZm9yKGk9MDsgaSZsdDtjaHVua19zaXplOyBpKyspIHN1bTEgPSBzdW0xKyBNeWFycmF5MltpXTsKCk1QSV9SZWR1Y2UoJmFtcDtzdW0xLCAmYW1wO3N1bTIsIDEsIE1QSV9JTlQsIE1QSV9TVU0sIDAsTVBJX0NPTU1fV09STEQpOyBwcmludGYoJnF1b3Q7SSBhbSBub2RlOiAlZCBNeSBTdW0gPSAlZFxuJnF1b3Q7LG5vZGUsIHN1bTEpOwoKaWYobm9kZSA9PSAwKQoKcHJpbnRmKCZxdW90O015IFJhbmsgaXM6ICVkIFRoZSBUb3RhbCA9ICVkXG4mcXVvdDssbm9kZSxzdW0yKTsKCk1QSV9GaW5hbGl6ZSgpOyByZXR1cm4gMDsKCn0KCn0=
#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;
}
}