1234567891011121314151617181920212223242526272829303132333435 |
- // 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);
- }
- }
|