Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'v3_8_x'
[simgrid.git] / teshsuite / smpi / mpich-test / pt2pt / fifth.c
1 #include <stdio.h>
2 #include "mpi.h"
3 #include "test.h"
4
5 int main( int argc, char **argv )
6 {
7     int rank, np, data = 777;
8     MPI_Request handle[4];
9     MPI_Status status[4];
10
11     MPI_Init( &argc, &argv );
12     MPI_Comm_rank( MPI_COMM_WORLD, &rank );
13     MPI_Comm_size( MPI_COMM_WORLD, &np );
14
15     if (np < 4) {
16       MPI_Finalize();
17       printf( "4 processors or more required, %d done\n", rank );
18       return(1);
19     }
20
21     if (rank == 0) {
22       MPI_Isend( &data, 1, MPI_INT, 1, 0, MPI_COMM_WORLD, &handle[0] );
23       MPI_Irecv( &data, 1, MPI_INT, 1, 0, MPI_COMM_WORLD, &handle[1] );
24       MPI_Isend( &data, 1, MPI_INT, 2, 0, MPI_COMM_WORLD, &handle[2] );
25       MPI_Irecv( &data, 1, MPI_INT, 2, 0, MPI_COMM_WORLD, &handle[3] );
26       MPI_Waitall ( 4, handle, status );
27     }
28     else if (rank == 1) {
29       MPI_Irecv( &data, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &handle[0] );
30       MPI_Isend( &data, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &handle[1] );
31       MPI_Isend( &data, 1, MPI_INT, 3, 0, MPI_COMM_WORLD, &handle[2] );
32       MPI_Irecv( &data, 1, MPI_INT, 3, 0, MPI_COMM_WORLD, &handle[3] );
33       MPI_Waitall ( 4, handle, status );
34     }
35     else if (rank == 2) {
36       MPI_Isend( &data, 1, MPI_INT, 3, 0, MPI_COMM_WORLD, &handle[0] );
37       MPI_Irecv( &data, 1, MPI_INT, 3, 0, MPI_COMM_WORLD, &handle[1] );
38       MPI_Irecv( &data, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &handle[2] );
39       MPI_Isend( &data, 1, MPI_INT, 0, 0, MPI_COMM_WORLD, &handle[3] );
40       MPI_Waitall ( 4, handle, status );
41     }
42     else if (rank == 3) {
43       MPI_Irecv( &data, 1, MPI_INT, 2, 0, MPI_COMM_WORLD, &handle[0] );
44       MPI_Isend( &data, 1, MPI_INT, 2, 0, MPI_COMM_WORLD, &handle[1] );
45       MPI_Irecv( &data, 1, MPI_INT, 1, 0, MPI_COMM_WORLD, &handle[2] );
46       MPI_Isend( &data, 1, MPI_INT, 1, 0, MPI_COMM_WORLD, &handle[3] );
47       MPI_Waitall ( 4, handle, status );
48     }
49     Test_Waitforall( );
50     MPI_Finalize();
51     return(0);
52 }
53
54