#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
#define ARRAY_SIZE 1000
int main(int argc, char *argv[]) {
int rank, size;
int numbers[ARRAY_SIZE];
int min_local, min_global;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
// Each process generates random numbers
for (int i = 0; i < ARRAY_SIZE; i++) {
numbers
[i
] = rand() % 1000; }
// Find local minimum
min_local = numbers[0];
for (int i = 1; i < ARRAY_SIZE; i++) {
if (numbers[i] < min_local) {
min_local = numbers[i];
}
}
// Reduce to find global minimum
MPI_Reduce(&min_local, &min_global, 1, MPI_INT, MPI_MIN, 0, MPI_COMM_WORLD);
// Process 0 prints the result
if (rank == 0) {
printf("Minimum number: %d\n", min_global
); }
MPI_Finalize();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPG1waS5oPgoKI2RlZmluZSBBUlJBWV9TSVpFIDEwMDAKCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKICAgIGludCByYW5rLCBzaXplOwogICAgaW50IG51bWJlcnNbQVJSQVlfU0laRV07CiAgICBpbnQgbWluX2xvY2FsLCBtaW5fZ2xvYmFsOwoKICAgIE1QSV9Jbml0KCZhcmdjLCAmYXJndik7CiAgICBNUElfQ29tbV9yYW5rKE1QSV9DT01NX1dPUkxELCAmcmFuayk7CiAgICBNUElfQ29tbV9zaXplKE1QSV9DT01NX1dPUkxELCAmc2l6ZSk7CgogICAgLy8gRWFjaCBwcm9jZXNzIGdlbmVyYXRlcyByYW5kb20gbnVtYmVycwogICAgc3JhbmQocmFuayk7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IEFSUkFZX1NJWkU7IGkrKykgewogICAgICAgIG51bWJlcnNbaV0gPSByYW5kKCkgJSAxMDAwOwogICAgfQoKICAgIC8vIEZpbmQgbG9jYWwgbWluaW11bQogICAgbWluX2xvY2FsID0gbnVtYmVyc1swXTsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgQVJSQVlfU0laRTsgaSsrKSB7CiAgICAgICAgaWYgKG51bWJlcnNbaV0gPCBtaW5fbG9jYWwpIHsKICAgICAgICAgICAgbWluX2xvY2FsID0gbnVtYmVyc1tpXTsKICAgICAgICB9CiAgICB9CgogICAgLy8gUmVkdWNlIHRvIGZpbmQgZ2xvYmFsIG1pbmltdW0KICAgIE1QSV9SZWR1Y2UoJm1pbl9sb2NhbCwgJm1pbl9nbG9iYWwsIDEsIE1QSV9JTlQsIE1QSV9NSU4sIDAsIE1QSV9DT01NX1dPUkxEKTsKCiAgICAvLyBQcm9jZXNzIDAgcHJpbnRzIHRoZSByZXN1bHQKICAgIGlmIChyYW5rID09IDApIHsKICAgICAgICBwcmludGYoIk1pbmltdW0gbnVtYmVyOiAlZFxuIiwgbWluX2dsb2JhbCk7CiAgICB9CgogICAgTVBJX0ZpbmFsaXplKCk7CgogICAgcmV0dXJuIDA7Cn0K