#include <stdio.h>
#include <mpi.h>
int main(int argc, char **argv) {
// Initialize MPI
MPI_Init(&argc, &argv);
// Get the total number of processes and the rank of the current process
int world_size, world_rank;
MPI_Comm_size(MPI_COMM_WORLD, &world_size);
MPI_Comm_rank(MPI_COMM_WORLD, &world_rank);
// Define the range of numbers to sum
int N = 100;
int local_sum = 0;
int global_sum;
// Calculate the local sum for each process
for (int i = world_rank + 1; i <= N; i += world_size) {
local_sum += i;
}
// Perform a global sum using MPI_Reduce
MPI_Reduce(&local_sum, &global_sum, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD);
// Output the result
if (world_rank == 0) {
printf("The sum of numbers from 1 to %d is: %d\n", N
, global_sum
); }
// Finalize MPI
MPI_Finalize();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxtcGkuaD4KaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CiAgICAvLyBJbml0aWFsaXplIE1QSQogICAgTVBJX0luaXQoJmFyZ2MsICZhcmd2KTsKICAgIC8vIEdldCB0aGUgdG90YWwgbnVtYmVyIG9mIHByb2Nlc3NlcyBhbmQgdGhlIHJhbmsgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcwogICAgaW50IHdvcmxkX3NpemUsIHdvcmxkX3Jhbms7CiAgICBNUElfQ29tbV9zaXplKE1QSV9DT01NX1dPUkxELCAmd29ybGRfc2l6ZSk7CiAgICBNUElfQ29tbV9yYW5rKE1QSV9DT01NX1dPUkxELCAmd29ybGRfcmFuayk7CiAgICAvLyBEZWZpbmUgdGhlIHJhbmdlIG9mIG51bWJlcnMgdG8gc3VtCiAgICBpbnQgTiA9IDEwMDsKICAgIGludCBsb2NhbF9zdW0gPSAwOwogICAgaW50IGdsb2JhbF9zdW07CiAgICAvLyBDYWxjdWxhdGUgdGhlIGxvY2FsIHN1bSBmb3IgZWFjaCBwcm9jZXNzCiAgICBmb3IgKGludCBpID0gd29ybGRfcmFuayArIDE7IGkgPD0gTjsgaSArPSB3b3JsZF9zaXplKSB7CiAgICAgICAgbG9jYWxfc3VtICs9IGk7CiAgICB9CiAvLyBQZXJmb3JtIGEgZ2xvYmFsIHN1bSB1c2luZyBNUElfUmVkdWNlCiAgICBNUElfUmVkdWNlKCZsb2NhbF9zdW0sICZnbG9iYWxfc3VtLCAxLCBNUElfSU5ULCBNUElfU1VNLCAwLCBNUElfQ09NTV9XT1JMRCk7CiAgICAvLyBPdXRwdXQgdGhlIHJlc3VsdAogICAgaWYgKHdvcmxkX3JhbmsgPT0gMCkgewogICAgICAgIHByaW50ZigiVGhlIHN1bSBvZiBudW1iZXJzIGZyb20gMSB0byAlZCBpczogJWRcbiIsIE4sIGdsb2JhbF9zdW0pOwogICAgfQogICAgLy8gRmluYWxpemUgTVBJCiAgICBNUElfRmluYWxpemUoKTsKICAgIHJldHVybiAwOwp9CgoK