#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
#define ARRAY_SIZE 1000
int main(int argc, char *argv[]) {
int rank, size;
int partial_sum = 0;
int global_sum = 0;
int numbers[ARRAY_SIZE];
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
// Generate some numbers to sum
if (rank == 0) {
for (int i = 0; i < ARRAY_SIZE; i++) {
numbers[i] = i + 1;
}
}
// Scatter the numbers to all processes
MPI_Scatter(numbers, ARRAY_SIZE/size, MPI_INT, numbers, ARRAY_SIZE/size, MPI_INT, 0, MPI_COMM_WORLD);
// Each process calculates its partial sum
for (int i = 0; i < ARRAY_SIZE/size; i++) {
partial_sum += numbers[i];
}
// Sum up the partial sums from each process
MPI_Reduce(&partial_sum, &global_sum, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
// Print the global sum
if (rank == 0) {
printf("Global sum: %d\n", global_sum
); }
MPI_Finalize();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPG1waS5oPgoKI2RlZmluZSBBUlJBWV9TSVpFIDEwMDAKCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKICAgIGludCByYW5rLCBzaXplOwogICAgaW50IHBhcnRpYWxfc3VtID0gMDsKICAgIGludCBnbG9iYWxfc3VtID0gMDsKICAgIGludCBudW1iZXJzW0FSUkFZX1NJWkVdOwogICAgCiAgICBNUElfSW5pdCgmYXJnYywgJmFyZ3YpOwogICAgTVBJX0NvbW1fcmFuayhNUElfQ09NTV9XT1JMRCwgJnJhbmspOwogICAgTVBJX0NvbW1fc2l6ZShNUElfQ09NTV9XT1JMRCwgJnNpemUpOwogICAgCiAgICAvLyBHZW5lcmF0ZSBzb21lIG51bWJlcnMgdG8gc3VtCiAgICBpZiAocmFuayA9PSAwKSB7CiAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBBUlJBWV9TSVpFOyBpKyspIHsKICAgICAgICAgICAgbnVtYmVyc1tpXSA9IGkgKyAxOwogICAgICAgIH0KICAgIH0KICAgIAogICAgLy8gU2NhdHRlciB0aGUgbnVtYmVycyB0byBhbGwgcHJvY2Vzc2VzCiAgICBNUElfU2NhdHRlcihudW1iZXJzLCBBUlJBWV9TSVpFL3NpemUsIE1QSV9JTlQsIG51bWJlcnMsIEFSUkFZX1NJWkUvc2l6ZSwgTVBJX0lOVCwgMCwgTVBJX0NPTU1fV09STEQpOwogICAgCiAgICAvLyBFYWNoIHByb2Nlc3MgY2FsY3VsYXRlcyBpdHMgcGFydGlhbCBzdW0KICAgIGZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRS9zaXplOyBpKyspIHsKICAgICAgICBwYXJ0aWFsX3N1bSArPSBudW1iZXJzW2ldOwogICAgfQogICAgCiAgICAvLyBTdW0gdXAgdGhlIHBhcnRpYWwgc3VtcyBmcm9tIGVhY2ggcHJvY2VzcwogICAgTVBJX1JlZHVjZSgmcGFydGlhbF9zdW0sICZnbG9iYWxfc3VtLCAxLCBNUElfSU5ULCBNUElfU1VNLCAwLCBNUElfQ09NTV9XT1JMRCk7CiAgICAKICAgIC8vIFByaW50IHRoZSBnbG9iYWwgc3VtCiAgICBpZiAocmFuayA9PSAwKSB7CiAgICAgICAgcHJpbnRmKCJHbG9iYWwgc3VtOiAlZFxuIiwgZ2xvYmFsX3N1bSk7CiAgICB9CiAgICAKICAgIE1QSV9GaW5hbGl6ZSgpOwogICAgcmV0dXJuIDA7Cn0K