Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
MPI_INFO_ENV ... Still does nothing for now
[simgrid.git] / teshsuite / smpi / mpich3-test / comm / comm_idup_nb.c
1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil ; -*- */
2 /*
3  *  (C) 2015 by Argonne National Laboratory.
4  *      See COPYRIGHT in top-level directory.
5  */
6
7 #include <stdio.h>
8 #include <stdlib.h>
9 #include <string.h>
10 #include "mpi.h"
11 #include "mpitest.h"
12
13 #define ITERS 5
14
15 int main(int argc, char **argv)
16 {
17     int errs = 0;
18     int i, isleft;
19     MPI_Comm test_comm, new_comm[ITERS];
20     int in[ITERS], out[ITERS], sol;
21     int rank, size, rsize, rrank;
22     MPI_Request sreq[ITERS * 2];
23     int root;
24
25     MTest_Init(&argc, &argv);
26     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
27     MPI_Comm_size(MPI_COMM_WORLD, &size);
28
29     if (size < 2) {
30         printf("this test requires at least 2 processes\n");
31         MPI_Abort(MPI_COMM_WORLD, 1);
32     }
33
34     while (MTestGetIntracommGeneral(&test_comm, 1, 1)) {
35         if (test_comm == MPI_COMM_NULL)
36             continue;
37         MPI_Comm_size(test_comm, &size);
38         MPI_Comm_rank(test_comm, &rank);
39
40         /* Ibarrier */
41         for (i = 0; i < ITERS; i++) {
42             MPI_Ibarrier(test_comm, &sreq[i]);
43             MPI_Comm_idup(test_comm, &new_comm[i], &sreq[i + ITERS]);
44         }
45         MPI_Waitall(ITERS * 2, sreq, MPI_STATUS_IGNORE);
46
47         for (i = 0; i < ITERS; i++) {
48             errs += MTestTestComm(new_comm[i]);
49             MPI_Comm_free(&new_comm[i]);
50         }
51         /*Ibcast */
52         for (i = 0; i < ITERS; i++) {
53             if (rank == 0)
54                 in[i] = 815;
55             else
56                 in[i] = 10;
57             MPI_Ibcast(&in[i], 1, MPI_INT, 0, test_comm, &sreq[i]);
58             MPI_Comm_idup(test_comm, &new_comm[i], &sreq[i + ITERS]);
59         }
60         sol = 815;
61         MPI_Waitall(ITERS * 2, sreq, MPI_STATUS_IGNORE);
62
63         for (i = 0; i < ITERS; i++) {
64             if (in[i] != sol)
65                 errs++;
66             errs += MTestTestComm(new_comm[i]);
67             MPI_Comm_free(&new_comm[i]);
68         }
69         /* Iallreduce */
70         for (i = 0; i < ITERS; i++) {
71             in[i] = 1;
72             MPI_Iallreduce(&in[i], &out[i], 1, MPI_INT, MPI_SUM, test_comm, &sreq[i]);
73             MPI_Comm_idup(test_comm, &new_comm[i], &sreq[i + ITERS]);
74         }
75         sol = size;
76         MPI_Waitall(ITERS * 2, sreq, MPI_STATUS_IGNORE);
77
78         for (i = 0; i < ITERS; i++) {
79             if (out[i] != sol)
80                 errs++;
81             errs += MTestTestComm(new_comm[i]);
82             MPI_Comm_free(&new_comm[i]);
83         }
84         /* Isann */
85         for (i = 0; i < ITERS; i++) {
86             MPI_Iscan(&rank, &out[i], 1, MPI_INT, MPI_SUM, test_comm, &sreq[i]);
87             MPI_Comm_idup(test_comm, &new_comm[i], &sreq[i + ITERS]);
88         }
89         sol = rank * (rank + 1) / 2;
90         MPI_Waitall(ITERS * 2, sreq, MPI_STATUS_IGNORE);
91
92         for (i = 0; i < ITERS; i++) {
93             if (out[i] != sol)
94                 errs++;
95             errs += MTestTestComm(new_comm[i]);
96             MPI_Comm_free(&new_comm[i]);
97         }
98         /*Ibcast */
99         for (i = 0; i < ITERS; i++) {
100             if (rank == 0)
101                 in[i] = 815;
102             else
103                 in[i] = 10;
104             MPI_Ibcast(&in[i], 1, MPI_INT, 0, test_comm, &sreq[i]);
105             MPI_Comm_idup(test_comm, &new_comm[i], &sreq[i + ITERS]);
106         }
107         MPI_Waitall(ITERS * 2, sreq, MPI_STATUS_IGNORE);
108         sol = 815;
109         for (i = 0; i < ITERS; i++) {
110             if (in[i] != sol)
111                 errs++;
112             errs += MTestTestComm(new_comm[i]);
113             MPI_Comm_free(&new_comm[i]);
114         }
115         MTestFreeComm(&test_comm);
116     }
117 /* Now the test for inter-communicators */
118     while (MTestGetIntercomm(&test_comm, &isleft, 1)) {
119         if (test_comm == MPI_COMM_NULL)
120             continue;
121
122         MPI_Comm_size(test_comm, &size);
123         MPI_Comm_rank(test_comm, &rank);
124
125         MPI_Comm_remote_size(test_comm, &rsize);
126         /* Ibarrier */
127         for (i = 0; i < ITERS; i++) {
128             MPI_Ibarrier(test_comm, &sreq[i]);
129             MPI_Comm_idup(test_comm, &new_comm[i], &sreq[i + ITERS]);
130         }
131         MPI_Waitall(ITERS * 2, sreq, MPI_STATUS_IGNORE);
132         for (i = 0; i < ITERS; i++) {
133             errs += MTestTestComm(new_comm[i]);
134             MPI_Comm_free(&new_comm[i]);
135         }
136         /*Ibcast */
137         for (i = 0; i < ITERS; i++) {
138             if (isleft) {
139                 if (rank == 0) {
140                     root = MPI_ROOT;
141                     in[i] = 815;
142                 }
143                 else {
144                     root = MPI_PROC_NULL;
145                     in[i] = 815;        /* not needed, just to make correctness checking easier */
146                 }
147             }
148             else {
149                 root = 0;
150                 in[i] = 213;    /* garbage value */
151             }
152             MPI_Ibcast(&in[i], 1, MPI_INT, root, test_comm, &sreq[i]);
153             MPI_Comm_idup(test_comm, &new_comm[i], &sreq[i + ITERS]);
154         }
155         sol = 815;
156         MPI_Waitall(ITERS * 2, sreq, MPI_STATUS_IGNORE);
157
158         for (i = 0; i < ITERS; i++) {
159             if (in[i] != sol)
160                 errs++;
161             errs += MTestTestComm(new_comm[i]);
162             MPI_Comm_free(&new_comm[i]);
163         }
164         /* Iallreduce */
165         for (i = 0; i < ITERS; i++) {
166             in[i] = 1;
167             MPI_Iallreduce(&in[i], &out[i], 1, MPI_INT, MPI_SUM, test_comm, &sreq[i]);
168             MPI_Comm_idup(test_comm, &new_comm[i], &sreq[i + ITERS]);
169         }
170         sol = rsize;
171         MPI_Waitall(ITERS * 2, sreq, MPI_STATUS_IGNORE);
172
173         for (i = 0; i < ITERS; i++) {
174             if (out[i] != sol)
175                 errs++;
176             errs += MTestTestComm(new_comm[i]);
177             MPI_Comm_free(&new_comm[i]);
178         }
179         MTestFreeComm(&test_comm);
180     }
181     MTest_Finalize(errs);
182     MPI_Finalize();
183     return 0;
184 }