#include <mpi.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) {
int errs = 0;
int rank, size;
long long int N, local_sum = 0, global_sum = 0;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
if (argc < 2) {
printf("Usage: %s <N>\n", argv
[0]); MPI_Abort(MPI_COMM_WORLD, 1);
}
N = atoll(argv[1]);
// Calculate local sum
long long int start = (N / size) * rank;
long long int end = start + N / size;
if (rank == size - 1) {
end = N;
}
for (long long int i = start; i < end; i++) {
local_sum += i;
}
// Perform reduction to compute global sum
MPI_Reduce(&local_sum, &global_sum, 1, MPI_LONG_LONG, MPI_SUM, 0, MPI_COMM_WORLD);
// Print result
if (rank == 0) {
printf("Sum from 0 to %lld is %lld\n", N
, global_sum
); }
MPI_Finalize();
return errs;
}
I2luY2x1ZGUgPG1waS5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgewogICAgaW50IGVycnMgPSAwOwogICAgaW50IHJhbmssIHNpemU7CiAgICBsb25nIGxvbmcgaW50IE4sIGxvY2FsX3N1bSA9IDAsIGdsb2JhbF9zdW0gPSAwOwoKICAgIE1QSV9Jbml0KCZhcmdjLCAmYXJndik7CiAgICBNUElfQ29tbV9yYW5rKE1QSV9DT01NX1dPUkxELCAmcmFuayk7CiAgICBNUElfQ29tbV9zaXplKE1QSV9DT01NX1dPUkxELCAmc2l6ZSk7CgogICAgaWYgKGFyZ2MgPCAyKSB7CiAgICAgICAgcHJpbnRmKCJVc2FnZTogJXMgPE4+XG4iLCBhcmd2WzBdKTsKICAgICAgICBNUElfQWJvcnQoTVBJX0NPTU1fV09STEQsIDEpOwogICAgfQoKICAgIE4gPSBhdG9sbChhcmd2WzFdKTsKCiAgICAvLyBDYWxjdWxhdGUgbG9jYWwgc3VtCiAgICBsb25nIGxvbmcgaW50IHN0YXJ0ID0gKE4gLyBzaXplKSAqIHJhbms7CiAgICBsb25nIGxvbmcgaW50IGVuZCA9IHN0YXJ0ICsgTiAvIHNpemU7CiAgICBpZiAocmFuayA9PSBzaXplIC0gMSkgewogICAgICAgIGVuZCA9IE47CiAgICB9CiAgICBmb3IgKGxvbmcgbG9uZyBpbnQgaSA9IHN0YXJ0OyBpIDwgZW5kOyBpKyspIHsKICAgICAgICBsb2NhbF9zdW0gKz0gaTsKICAgIH0KCiAgICAvLyBQZXJmb3JtIHJlZHVjdGlvbiB0byBjb21wdXRlIGdsb2JhbCBzdW0KICAgIE1QSV9SZWR1Y2UoJmxvY2FsX3N1bSwgJmdsb2JhbF9zdW0sIDEsIE1QSV9MT05HX0xPTkcsIE1QSV9TVU0sIDAsIE1QSV9DT01NX1dPUkxEKTsKCiAgICAvLyBQcmludCByZXN1bHQKICAgIGlmIChyYW5rID09IDApIHsKICAgICAgICBwcmludGYoIlN1bSBmcm9tIDAgdG8gJWxsZCBpcyAlbGxkXG4iLCBOLCBnbG9iYWxfc3VtKTsKICAgIH0KCiAgICBNUElfRmluYWxpemUoKTsKICAgIHJldHVybiBlcnJzOwp9Cg==