| | 193 | |
| | 194 | {{{#include <mpi.h> |
| | 195 | #include <stdio.h> |
| | 196 | #include <civlc.cvh> |
| | 197 | |
| | 198 | #define FROMRIGHT 0 |
| | 199 | #define FROMLEFT 1 |
| | 200 | |
| | 201 | $input int _mpi_nprocs = 3; |
| | 202 | int main(int argc, char * argv[]) { |
| | 203 | int rank, size; |
| | 204 | int recv; |
| | 205 | int left, right; |
| | 206 | |
| | 207 | MPI_Init(&argc, &argv); |
| | 208 | MPI_Comm_rank(MPI_COMM_WORLD, &rank); |
| | 209 | MPI_Comm_size(MPI_COMM_WORLD, &size); |
| | 210 | left = (rank == 0) ? size - 1 : rank - 1; |
| | 211 | right = (rank == (size - 1)) ? 0 : rank + 1; |
| | 212 | MPI_Sendrecv(&rank, 1, MPI_INT, left, FROMRIGHT, &recv, 1, MPI_INT, |
| | 213 | right, FROMRIGHT, MPI_COMM_WORLD, MPI_STATUS_IGNORE); |
| | 214 | $assert(recv == right); |
| | 215 | MPI_Sendrecv(&rank, 1, MPI_INT, right, FROMLEFT, &recv, 1, |
| | 216 | MPI_INT, left, FROMLEFT, MPI_COMM_WORLD, MPI_STATUS_IGNORE); |
| | 217 | $assert(recv == left); |
| | 218 | MPI_Finalize(); |
| | 219 | return 0; |
| | 220 | } |
| | 221 | }}} |
| | 222 | |