Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Add new entry in Release_Notes.
[simgrid.git] / teshsuite / smpi / mpich3-test / pt2pt / many_isend.c
1 /* -*- Mode: C; c-basic-offset:4 ; -*- */
2 /*
3  * (C) 2015 by Argonne National Laboratory.
4  *     See COPYRIGHT in top-level directory.
5  */
6 #include <stdio.h>
7 #include <stdlib.h>
8 #include <string.h>
9 #include <mpi.h>
10
11 #define ITER 5
12 #define BUF_COUNT (16*1024)
13
14 int main(int argc, char *argv[])
15 {
16
17     int rank, nprocs;
18     char recvbuf[BUF_COUNT], sendbuf[BUF_COUNT];
19     int x, i;
20     MPI_Status *sendstats = NULL;
21     MPI_Request *sendreqs = NULL;
22
23     MPI_Init(&argc, &argv);
24
25     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
26     MPI_Comm_size(MPI_COMM_WORLD, &nprocs);
27
28     sendreqs = (MPI_Request *) malloc(nprocs * sizeof(MPI_Request));
29     sendstats = (MPI_Status *) malloc(nprocs * sizeof(MPI_Status));
30
31     for (x = 0; x < ITER; x++) {
32         MPI_Barrier(MPI_COMM_WORLD);
33
34         /* all to all send */
35         for (i = 0; i < nprocs; i++) {
36             MPI_Isend(sendbuf, BUF_COUNT, MPI_CHAR, i, 0, MPI_COMM_WORLD, &sendreqs[i]);
37         }
38
39         /* receive one by one */
40         for (i = 0; i < nprocs; i++) {
41             MPI_Recv(recvbuf, BUF_COUNT, MPI_CHAR, MPI_ANY_SOURCE, MPI_ANY_TAG, MPI_COMM_WORLD,
42                      MPI_STATUS_IGNORE);
43         }
44
45         /* ensure all send request completed */
46         MPI_Waitall(nprocs, sendreqs, sendstats);
47     }
48
49     MPI_Barrier(MPI_COMM_WORLD);
50     if (rank == 0)
51         printf(" No Errors\n");
52
53     free(sendreqs);
54     free(sendstats);
55
56     MPI_Finalize();
57
58     return 0;
59 }