#include #include #include #define TAG 0 int main(int argc, char* argv[]) { int size, rank; _Bool tStart = $false; $proc threads[2]; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); MPI_Comm_size(MPI_COMM_WORLD, &size); void Thread(int tid) { int x = 2*rank + tid, y; $when(tStart); for (int j=0; j<2; j++) { if (rank == 1) { for (int i=0; i<2; i++) MPI_Send(&x, 1, MPI_INT, 1, TAG, MPI_COMM_WORLD); for (int i=0; i<2; i++) MPI_Recv(&y, 1, MPI_INT, 1, TAG, MPI_COMM_WORLD, MPI_STATUS_IGNORE); } else { for (int i=0; i<2; i++) MPI_Recv(&y, 1, MPI_INT, 0, TAG, MPI_COMM_WORLD, MPI_STATUS_IGNORE); for (int i=0; i<2; i++) MPI_Send(&x, 1, MPI_INT, 0, TAG, MPI_COMM_WORLD); } } } for(int i=0; i<2; i++) threads[i] = $spawn Thread(i); tStart = $true; for (int i=0; i<2; i++) $wait(threads[i]); MPI_Finalize(); return 0; }