#include #include #include "mpi.h" int main(int argc, char *argv[]) { int rank, size; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); int n = 10; int a[10] = {1,2,3,4,5,6,7,8,9,10}; int b[n]; int myN; int k[10]; if (rank == 0) { int br = 0; for (int i = 0; i < size; i++) { k[i] = i < n/size ? n/size + 1 : n/size; MPI_Send(k + i, 1, MPI_INT, i, 100, MPI_COMM_WORLD); MPI_Send(a + br, k[i], MPI_INT, i, 200, MPI_COMM_WORLD); br += k[i]; } } MPI_Recv(&myN, 1, MPI_INT, 0, 100, MPI_COMM_WORLD, NULL); MPI_Recv(b, myN, MPI_INT, 0, 200, MPI_COMM_WORLD, NULL); int sum = 0, ukupno = 0; for (int i = 0; i < myN; i++) { sum += b[i]; } MPI_Reduce(&sum, &ukupno, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); if (rank == 0) { printf("sum: %d\n", ukupno); } MPI_Finalize(); return 0; }