#include <stdio.h> // Standard I/O header file
#include <mpi.h> // MPI header file
#define N 1000 // Size of array
int main() {
int i, rank, size; // Loop variable, MPI rank, MPI size
int array[N], local_max, global_max = 0; // Array, local max, global max
MPI_Init(NULL, NULL); // Initialize MPI environment
MPI_Comm_rank(MPI_COMM_WORLD, &rank); // Get rank of current process
MPI_Comm_size(MPI_COMM_WORLD, &size); // Get total number of processes
// Initialize array with rank
for (i = 0; i < N; i++) {
array[i] = rank * N + i; // Each process fills its portion of the array
}
// Calculate local max
local_max = array[0]; // Initialize local max with first element
for (i = 1; i < N; i++) {
if (array[i] > local_max) {
local_max = array[i]; // Update local max if current element is greater
}
}
// Reduce local max values to find global max
MPI_Reduce(&local_max, &global_max, 1, MPI_INT, MPI_MAX, 0, MPI_COMM_WORLD);
// Print global max from root process
if (rank == 0) {
printf("Global max: %d\n", global_max
); }
MPI_Finalize(); // Finalize MPI environment
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+ICAvLyBTdGFuZGFyZCBJL08gaGVhZGVyIGZpbGUKI2luY2x1ZGUgPG1waS5oPiAgICAvLyBNUEkgaGVhZGVyIGZpbGUKCiNkZWZpbmUgTiAxMDAwICAvLyBTaXplIG9mIGFycmF5CgppbnQgbWFpbigpIHsKICAgIGludCBpLCByYW5rLCBzaXplOyAgLy8gTG9vcCB2YXJpYWJsZSwgTVBJIHJhbmssIE1QSSBzaXplCiAgICBpbnQgYXJyYXlbTl0sIGxvY2FsX21heCwgZ2xvYmFsX21heCA9IDA7ICAvLyBBcnJheSwgbG9jYWwgbWF4LCBnbG9iYWwgbWF4CgogICAgTVBJX0luaXQoTlVMTCwgTlVMTCk7ICAvLyBJbml0aWFsaXplIE1QSSBlbnZpcm9ubWVudAogICAgTVBJX0NvbW1fcmFuayhNUElfQ09NTV9XT1JMRCwgJnJhbmspOyAgLy8gR2V0IHJhbmsgb2YgY3VycmVudCBwcm9jZXNzCiAgICBNUElfQ29tbV9zaXplKE1QSV9DT01NX1dPUkxELCAmc2l6ZSk7ICAvLyBHZXQgdG90YWwgbnVtYmVyIG9mIHByb2Nlc3NlcwoKICAgIC8vIEluaXRpYWxpemUgYXJyYXkgd2l0aCByYW5rCiAgICBmb3IgKGkgPSAwOyBpIDwgTjsgaSsrKSB7CiAgICAgICAgYXJyYXlbaV0gPSByYW5rICogTiArIGk7ICAvLyBFYWNoIHByb2Nlc3MgZmlsbHMgaXRzIHBvcnRpb24gb2YgdGhlIGFycmF5CiAgICB9CgogICAgLy8gQ2FsY3VsYXRlIGxvY2FsIG1heAogICAgbG9jYWxfbWF4ID0gYXJyYXlbMF07ICAvLyBJbml0aWFsaXplIGxvY2FsIG1heCB3aXRoIGZpcnN0IGVsZW1lbnQKICAgIGZvciAoaSA9IDE7IGkgPCBOOyBpKyspIHsKICAgICAgICBpZiAoYXJyYXlbaV0gPiBsb2NhbF9tYXgpIHsKICAgICAgICAgICAgbG9jYWxfbWF4ID0gYXJyYXlbaV07ICAvLyBVcGRhdGUgbG9jYWwgbWF4IGlmIGN1cnJlbnQgZWxlbWVudCBpcyBncmVhdGVyCiAgICAgICAgfQogICAgfQoKICAgIC8vIFJlZHVjZSBsb2NhbCBtYXggdmFsdWVzIHRvIGZpbmQgZ2xvYmFsIG1heAogICAgTVBJX1JlZHVjZSgmbG9jYWxfbWF4LCAmZ2xvYmFsX21heCwgMSwgTVBJX0lOVCwgTVBJX01BWCwgMCwgTVBJX0NPTU1fV09STEQpOwoKICAgIC8vIFByaW50IGdsb2JhbCBtYXggZnJvbSByb290IHByb2Nlc3MKICAgIGlmIChyYW5rID09IDApIHsKICAgICAgICBwcmludGYoIkdsb2JhbCBtYXg6ICVkXG4iLCBnbG9iYWxfbWF4KTsKICAgIH0KCiAgICBNUElfRmluYWxpemUoKTsgIC8vIEZpbmFsaXplIE1QSSBlbnZpcm9ubWVudAogICAgcmV0dXJuIDA7Cn0K