#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
int main(int argc, char **argv)
{
int provided;
MPI_Init_thread(&argc, &argv, MPI_THREAD_SERIALIZED, &provided);
if (provided < MPI_THREAD_SERIALIZED)
{
printf("Thread level insufficient, exiting\n"); }
int rank, procs;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &procs);
int bufSize = 4;
int size = bufSize*procs+1;
int sendBuf[size];
int recvBuf[size];
memset(&recvBuf
, 0, size
- 1);
int exampleData[bufSize];
for (int i = 0; i < bufSize; i++)
{
exampleData[i] = rank + i;
}
printf("Process %i of %i, local value: %d\n", rank
, procs
, exampleData[0], exampleData[1], exampleData[2], exampleData[3]);
MPI_Reduce(&exampleData, &recvBuf, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); //send to process 0
printf("Hello Collectives! I'm, process %i of %i and my recv buffer is %d, %d, %d, %d, %d, %d\n", rank, procs, recvBuf[0], recvBuf[1], recvBuf[2], recvBuf[3], recvBuf[4], recvBuf[5]);
MPI_Finalize();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPG1waS5oPgoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQp7CiAgICBpbnQgcHJvdmlkZWQ7CiAgICBNUElfSW5pdF90aHJlYWQoJmFyZ2MsICZhcmd2LCBNUElfVEhSRUFEX1NFUklBTElaRUQsICZwcm92aWRlZCk7CiAgICBpZiAocHJvdmlkZWQgPCBNUElfVEhSRUFEX1NFUklBTElaRUQpCiAgICB7CiAgICAgICAgcHJpbnRmKCJUaHJlYWQgbGV2ZWwgaW5zdWZmaWNpZW50LCBleGl0aW5nXG4iKTsKICAgICAgICBhYm9ydCgpOwogICAgfQoKICAgIGludCByYW5rLCBwcm9jczsKICAgIE1QSV9Db21tX3JhbmsoTVBJX0NPTU1fV09STEQsICZyYW5rKTsKICAgIE1QSV9Db21tX3NpemUoTVBJX0NPTU1fV09STEQsICZwcm9jcyk7CgogICAgaW50IGJ1ZlNpemUgPSA0OwogICAgaW50IHNpemUgPSBidWZTaXplKnByb2NzKzE7CiAgICBpbnQgc2VuZEJ1ZltzaXplXTsKICAgIGludCByZWN2QnVmW3NpemVdOwogICAgbWVtc2V0KCZyZWN2QnVmLCAwLCBzaXplIC0gMSk7CgogICAgaW50IGV4YW1wbGVEYXRhW2J1ZlNpemVdOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBidWZTaXplOyBpKyspCiAgICB7CiAgICAgICAgZXhhbXBsZURhdGFbaV0gPSByYW5rICsgaTsKICAgIH0KCiAgICBwcmludGYoIlByb2Nlc3MgJWkgb2YgJWksIGxvY2FsIHZhbHVlOiAlZFxuIiwgcmFuaywgcHJvY3MsCiAgICAgICAgICAgIGV4YW1wbGVEYXRhWzBdLCBleGFtcGxlRGF0YVsxXSwgZXhhbXBsZURhdGFbMl0sIGV4YW1wbGVEYXRhWzNdKTsKCiAgICBNUElfUmVkdWNlKCZleGFtcGxlRGF0YSwgJnJlY3ZCdWYsIDEsIE1QSV9JTlQsIE1QSV9TVU0sIDAsIE1QSV9DT01NX1dPUkxEKTsgLy9zZW5kIHRvIHByb2Nlc3MgMAogICAgCiAgICBwcmludGYoIkhlbGxvIENvbGxlY3RpdmVzISBJJ20sIHByb2Nlc3MgJWkgb2YgJWkgYW5kIG15IHJlY3YgYnVmZmVyIGlzICVkLCAlZCwgJWQsICVkLCAlZCwgJWRcbiIsCiAgICAgICAgICAgIHJhbmssIHByb2NzLCByZWN2QnVmWzBdLCByZWN2QnVmWzFdLCByZWN2QnVmWzJdLCByZWN2QnVmWzNdLCByZWN2QnVmWzRdLCByZWN2QnVmWzVdKTsKCiAgICBNUElfRmluYWxpemUoKTsKCiAgICByZXR1cm4gMDsKfQo=