library(Rmpi)
mpi.spawn.Rslaves(needlog = FALSE)
mpi.bcast.cmd( id <- mpi.comm.rank() )
mpi.bcast.cmd( np <- mpi.comm.size() )
mpi.bcast.cmd( host <- mpi.get.processor.name() )
result <- mpi.remote.exec(paste("I am", id, "of", np, "running on", host))
print(unlist(result))
mpi.close.Rslaves(dellog = FALSE)
#include <stdio.h>
#include <stdlib.h>
#include <mpi.h>
int main(int argc, char *argv[]) {
MPI_Init(&argc, &argv);
int rank, size;
MPI_Comm_rank(MPI_COMM_WORLD, &rank);
MPI_Comm_size(MPI_COMM_WORLD, &size);
if (size < 2) {
fprintf(stderr
, "This program requires at least 2 processes.\n"); MPI_Abort(MPI_COMM_WORLD, 1);
}
const int n = 1000;
int numbers[n];
int localMin = INT_MAX;
int localMax = INT_MIN;
int globalMin, globalMax;
if (rank == 0) {
for (int i = 0; i < n; i++) {
numbers
[i
] = rand() % 100;}}
MPI_Bcast(numbers, n, MPI_INT, 0, MPI_COMM_WORLD);
for (int i = rank; i < n; i += size) {
if (numbers[i] < localMin) {
localMin = numbers[i];
}
if (numbers[i] > localMax) {
localMax = numbers[i];
}
}
MPI_Reduce(&localMin, &globalMin, 1, MPI_INT, MPI_MIN, 0, MPI_COMM_WORLD);
MPI_Reduce(&localMax, &globalMax, 1, MPI_INT, MPI_MAX, 0, MPI_COMM_WORLD);
if (rank == 0) {
printf("Global Min: %d\n", globalMin
); printf("Global Max: %d\n", globalMax
); }
MPI_Finalize();
return 0;
}
bGlicmFyeShSbXBpKQptcGkuc3Bhd24uUnNsYXZlcyhuZWVkbG9nID0gRkFMU0UpCgptcGkuYmNhc3QuY21kKCBpZCA8LSBtcGkuY29tbS5yYW5rKCkgKQptcGkuYmNhc3QuY21kKCBucCA8LSBtcGkuY29tbS5zaXplKCkgKQptcGkuYmNhc3QuY21kKCBob3N0IDwtIG1waS5nZXQucHJvY2Vzc29yLm5hbWUoKSApCnJlc3VsdCA8LSBtcGkucmVtb3RlLmV4ZWMocGFzdGUoIkkgYW0iLCBpZCwgIm9mIiwgbnAsICJydW5uaW5nIG9uIiwgaG9zdCkpIAoKcHJpbnQodW5saXN0KHJlc3VsdCkpCgptcGkuY2xvc2UuUnNsYXZlcyhkZWxsb2cgPSBGQUxTRSkKbXBpLmV4aXQoKQoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPG1waS5oPgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKSB7Ck1QSV9Jbml0KCZhcmdjLCAmYXJndik7CmludCByYW5rLCBzaXplOwpNUElfQ29tbV9yYW5rKE1QSV9DT01NX1dPUkxELCAmcmFuayk7Ck1QSV9Db21tX3NpemUoTVBJX0NPTU1fV09STEQsICZzaXplKTsKaWYgKHNpemUgPCAyKSB7CmZwcmludGYoc3RkZXJyLCAiVGhpcyBwcm9ncmFtIHJlcXVpcmVzIGF0IGxlYXN0IDIgcHJvY2Vzc2VzLlxuIik7Ck1QSV9BYm9ydChNUElfQ09NTV9XT1JMRCwgMSk7Cn0KY29uc3QgaW50IG4gPSAxMDAwOwppbnQgbnVtYmVyc1tuXTsKaW50IGxvY2FsTWluID0gSU5UX01BWDsKaW50IGxvY2FsTWF4ID0gSU5UX01JTjsKaW50IGdsb2JhbE1pbiwgZ2xvYmFsTWF4OwppZiAocmFuayA9PSAwKSB7CmZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKSB7Cm51bWJlcnNbaV0gPSByYW5kKCkgJSAxMDA7Cn19Ck1QSV9CY2FzdChudW1iZXJzLCBuLCBNUElfSU5ULCAwLCBNUElfQ09NTV9XT1JMRCk7CmZvciAoaW50IGkgPSByYW5rOyBpIDwgbjsgaSArPSBzaXplKSB7CmlmIChudW1iZXJzW2ldIDwgbG9jYWxNaW4pIHsKbG9jYWxNaW4gPSBudW1iZXJzW2ldOwp9CmlmIChudW1iZXJzW2ldID4gbG9jYWxNYXgpIHsKbG9jYWxNYXggPSBudW1iZXJzW2ldOwp9Cn0KTVBJX1JlZHVjZSgmbG9jYWxNaW4sICZnbG9iYWxNaW4sIDEsIE1QSV9JTlQsIE1QSV9NSU4sIDAsIE1QSV9DT01NX1dPUkxEKTsKTVBJX1JlZHVjZSgmbG9jYWxNYXgsICZnbG9iYWxNYXgsIDEsIE1QSV9JTlQsIE1QSV9NQVgsIDAsIE1QSV9DT01NX1dPUkxEKTsKaWYgKHJhbmsgPT0gMCkgewpwcmludGYoIkdsb2JhbCBNaW46ICVkXG4iLCBnbG9iYWxNaW4pOwpwcmludGYoIkdsb2JhbCBNYXg6ICVkXG4iLCBnbG9iYWxNYXgpOwp9Ck1QSV9GaW5hbGl6ZSgpOwpyZXR1cm4gMDsKfQ==