#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <mpi.h>
#define ARRAY_SIZE 12 // Size of the array
int main(int argc, char *argv[]) {
int rank, size, i;
int array[ARRAY_SIZE];
int local_max, global_max = -1;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
// Initialize random seed based on current time and rank
srand(time(NULL
) + rank
* 100); // Add rank to ensure different seeds for different processes
// Generate random numbers for the array on process 0
if (rank == 0) {
for (i = 0; i < ARRAY_SIZE; i++) {
}
}
// Broadcast the array from process 0 to all other processes
MPI_Bcast(array, ARRAY_SIZE, MPI_INT, 0, MPI_COMM_WORLD);
// Calculate local maximum
int start_index = (ARRAY_SIZE / size) * rank;
int end_index = start_index + (ARRAY_SIZE / size);
local_max = array[start_index];
for (i = start_index + 1; i < end_index; i++) {
if (array[i] > local_max) {
local_max = array[i];
}
}
if (rank != 0) {
// Send local maximum to process 0
MPI_Send(&local_max, 1, MPI_INT, 0, 0, MPI_COMM_WORLD);
} else {
// Process 0 receives local maxima from all other processes
for (i = 1; i < size; i++) {
int received_max;
MPI_Recv(&received_max, 1, MPI_INT, i, 0, MPI_COMM_WORLD, MPI_STATUS_IGNORE);
if (received_max > global_max) {
global_max = received_max;
}
}
// Compare the local maximum of process 0 with the global maximum
if (local_max > global_max) {
global_max = local_max;
}
// Print the global maximum on process 0
printf("Global Maximum: %d\n", global_max
); }
MPI_Finalize();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHRpbWUuaD4KI2luY2x1ZGUgPG1waS5oPgoKI2RlZmluZSBBUlJBWV9TSVpFIDEyIC8vIFNpemUgb2YgdGhlIGFycmF5CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7CiAgICBpbnQgcmFuaywgc2l6ZSwgaTsKICAgIGludCBhcnJheVtBUlJBWV9TSVpFXTsKICAgIGludCBsb2NhbF9tYXgsIGdsb2JhbF9tYXggPSAtMTsKCiAgICBNUElfSW5pdCgmYXJnYywgJmFyZ3YpOwogICAgTVBJX0NvbW1fcmFuayhNUElfQ09NTV9XT1JMRCwgJnJhbmspOwogICAgTVBJX0NvbW1fc2l6ZShNUElfQ09NTV9XT1JMRCwgJnNpemUpOwoKICAgIC8vIEluaXRpYWxpemUgcmFuZG9tIHNlZWQgYmFzZWQgb24gY3VycmVudCB0aW1lIGFuZCByYW5rCiAgICBzcmFuZCh0aW1lKE5VTEwpICsgcmFuayAqIDEwMCk7IC8vIEFkZCByYW5rIHRvIGVuc3VyZSBkaWZmZXJlbnQgc2VlZHMgZm9yIGRpZmZlcmVudCBwcm9jZXNzZXMKCiAgICAvLyBHZW5lcmF0ZSByYW5kb20gbnVtYmVycyBmb3IgdGhlIGFycmF5IG9uIHByb2Nlc3MgMAogICAgaWYgKHJhbmsgPT0gMCkgewogICAgICAgIHByaW50ZigiQXJyYXk6XG4iKTsKICAgICAgICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRTsgaSsrKSB7CiAgICAgICAgICAgIGFycmF5W2ldID0gcmFuZCgpICUgMTAwOwogICAgICAgICAgICBwcmludGYoIiVkICIsIGFycmF5W2ldKTsKICAgICAgICB9CiAgICAgICAgcHJpbnRmKCJcbiIpOwogICAgfQoKICAgIC8vIEJyb2FkY2FzdCB0aGUgYXJyYXkgZnJvbSBwcm9jZXNzIDAgdG8gYWxsIG90aGVyIHByb2Nlc3NlcwogICAgTVBJX0JjYXN0KGFycmF5LCBBUlJBWV9TSVpFLCBNUElfSU5ULCAwLCBNUElfQ09NTV9XT1JMRCk7CgogICAgLy8gQ2FsY3VsYXRlIGxvY2FsIG1heGltdW0KICAgIGludCBzdGFydF9pbmRleCA9IChBUlJBWV9TSVpFIC8gc2l6ZSkgKiByYW5rOwogICAgaW50IGVuZF9pbmRleCA9IHN0YXJ0X2luZGV4ICsgKEFSUkFZX1NJWkUgLyBzaXplKTsKICAgIGxvY2FsX21heCA9IGFycmF5W3N0YXJ0X2luZGV4XTsKICAgIGZvciAoaSA9IHN0YXJ0X2luZGV4ICsgMTsgaSA8IGVuZF9pbmRleDsgaSsrKSB7CiAgICAgICAgaWYgKGFycmF5W2ldID4gbG9jYWxfbWF4KSB7CiAgICAgICAgICAgIGxvY2FsX21heCA9IGFycmF5W2ldOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAocmFuayAhPSAwKSB7CiAgICAgICAgLy8gU2VuZCBsb2NhbCBtYXhpbXVtIHRvIHByb2Nlc3MgMAogICAgICAgIE1QSV9TZW5kKCZsb2NhbF9tYXgsIDEsIE1QSV9JTlQsIDAsIDAsIE1QSV9DT01NX1dPUkxEKTsKICAgIH0gZWxzZSB7CiAgICAgICAgLy8gUHJvY2VzcyAwIHJlY2VpdmVzIGxvY2FsIG1heGltYSBmcm9tIGFsbCBvdGhlciBwcm9jZXNzZXMKICAgICAgICBmb3IgKGkgPSAxOyBpIDwgc2l6ZTsgaSsrKSB7CiAgICAgICAgICAgIGludCByZWNlaXZlZF9tYXg7CiAgICAgICAgICAgIE1QSV9SZWN2KCZyZWNlaXZlZF9tYXgsIDEsIE1QSV9JTlQsIGksIDAsIE1QSV9DT01NX1dPUkxELCBNUElfU1RBVFVTX0lHTk9SRSk7CiAgICAgICAgICAgIGlmIChyZWNlaXZlZF9tYXggPiBnbG9iYWxfbWF4KSB7CiAgICAgICAgICAgICAgICBnbG9iYWxfbWF4ID0gcmVjZWl2ZWRfbWF4OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBDb21wYXJlIHRoZSBsb2NhbCBtYXhpbXVtIG9mIHByb2Nlc3MgMCB3aXRoIHRoZSBnbG9iYWwgbWF4aW11bQogICAgICAgIGlmIChsb2NhbF9tYXggPiBnbG9iYWxfbWF4KSB7CiAgICAgICAgICAgIGdsb2JhbF9tYXggPSBsb2NhbF9tYXg7CiAgICAgICAgfQoKICAgICAgICAvLyBQcmludCB0aGUgZ2xvYmFsIG1heGltdW0gb24gcHJvY2VzcyAwCiAgICAgICAgcHJpbnRmKCJHbG9iYWwgTWF4aW11bTogJWRcbiIsIGdsb2JhbF9tYXgpOwogICAgfQoKICAgIE1QSV9GaW5hbGl6ZSgpOwoKICAgIHJldHVybiAwOwp9Cg==