Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
reduce some tests duration as comm_create takes longer now (comms)
[simgrid.git] / teshsuite / smpi / mpich3-test / comm / comm_idup_overlap.c
1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
2 /*
3  *  (C) 2013 by Argonne National Laboratory.
4  *      See COPYRIGHT in top-level directory.
5  */
6
7 #include <stdio.h>
8 #include <mpi.h>
9
10 int main(int argc, char **argv)
11 {
12     int i, rank, size, color;
13     MPI_Group group;
14     MPI_Comm primary[2], secondary[2], tmp;
15     MPI_Request req[2];
16
17     MPI_Init(&argc, &argv);
18     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
19     MPI_Comm_size(MPI_COMM_WORLD, &size);
20
21     /* Each pair of processes creates a communicator */
22     for (i = 0; i < size; i++) {
23         if (rank == i)
24             MPI_Comm_split(MPI_COMM_WORLD, 0, 0, &primary[0]);
25         else if (rank == (i + 1) % size)
26             MPI_Comm_split(MPI_COMM_WORLD, 0, 0, &secondary[0]);
27         else {
28             MPI_Comm_split(MPI_COMM_WORLD, 1, 0, &tmp);
29             MPI_Comm_free(&tmp);
30         }
31         MPI_Barrier(MPI_COMM_WORLD);
32     }
33
34     /* Each pair dups the communicator such that the dups are
35      * overlapping.  If this were done with MPI_Comm_dup, this should
36      * deadlock. */
37     MPI_Comm_idup(primary[0], &primary[1], &req[0]);
38     MPI_Comm_idup(secondary[0], &secondary[1], &req[1]);
39     MPI_Waitall(2, req, MPI_STATUSES_IGNORE);
40
41     for (i = 0; i < 2; i++) {
42         MPI_Comm_free(&primary[i]);
43         MPI_Comm_free(&secondary[i]);
44     }
45
46     if (rank == 0)
47         printf(" No Errors\n");
48
49     MPI_Finalize();
50
51     return 0;
52 }