2
0
Fork 0
mirror of https://github.com/MartinThoma/LaTeX-examples.git synced 2025-04-25 14:28:05 +02:00
LaTeX-examples/documents/Programmierparadigmen/scripts/mpi/mpi-sum-reduce.c
2014-03-30 12:20:01 +02:00

35 lines
No EOL
976 B
C

// Quelle: Klausur vom SS 2013 am KIT bei
// Prof. Dr.-Ing. Gregor Snelting
void my_int_sum_reduce(int *sendbuf,
int *recvbuf, int count,
int root, MPI_Comm comm)
{
int size, rank;
MPI_Comm_size(comm, &size);
MPI_Comm_rank(comm, &rank);
if (rank == root) {
/* Initialize recvbuf with our own values. */
for (int i = 0; i < count; ++i) {
recvbuf[i] = sendbuf[i];
}
/* Receive values from every other node
and accumulate. */
for (int i = 0; i < size; ++i) {
if (i == root)
continue;
int other[count];
MPI_Recv(other, count, MPI_INT,
i, 0, comm, MPI_STATUS_IGNORE);
for (int j = 0; j < count; ++j) {
recvbuf[j] += other[j];
}
}
} else {
/* Send our values to root. */
MPI_Send(sendbuf, count, MPI_INT,
root, 0, comm);
}
}