Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
MPI_Iallreduce
[simgrid.git] / teshsuite / smpi / mpich3-test / coll / nonblocking2.c
index 4eb1ee0..f266f54 100644 (file)
@@ -47,8 +47,8 @@ int main(int argc, char **argv)
     int *recvcounts = NULL;
     int *sdispls = NULL;
     int *rdispls = NULL;
-    int *sendtypes = NULL;
-    int *recvtypes = NULL;
+    MPI_Datatype *sendtypes = NULL;
+    MPI_Datatype *recvtypes = NULL;
     signed char *buf_alias = NULL;
     MPI_Request req;
 
@@ -108,56 +108,55 @@ int main(int argc, char **argv)
     MPI_Wait(&req, MPI_STATUS_IGNORE);
 
     /* MPI_Ireduce */
-/*    for (i = 0; i < COUNT; ++i) {*/
-/*        buf[i] = rank + i;*/
-/*        recvbuf[i] = 0xdeadbeef;*/
-/*    }*/
-/*    MPI_Ireduce(buf, recvbuf, COUNT, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD, &req);*/
-/*    MPI_Wait(&req, MPI_STATUS_IGNORE);*/
-/*    if (rank == 0) {*/
-/*        for (i = 0; i < COUNT; ++i) {*/
-/*            if (recvbuf[i] != ((size * (size - 1) / 2) + (i * size)))*/
-/*                printf("got recvbuf[%d]=%d, expected %d\n", i, recvbuf[i],*/
-/*                       ((size * (size - 1) / 2) + (i * size)));*/
-/*            my_assert(recvbuf[i] == ((size * (size - 1) / 2) + (i * size)));*/
-/*        }*/
-/*    }*/
+    for (i = 0; i < COUNT; ++i) {
+        buf[i] = rank + i;
+        recvbuf[i] = 0xdeadbeef;
+    }
+    MPI_Ireduce(buf, recvbuf, COUNT, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD, &req);
+    MPI_Wait(&req, MPI_STATUS_IGNORE);
+    if (rank == 0) {
+        for (i = 0; i < COUNT; ++i) {
+            if (recvbuf[i] != ((size * (size - 1) / 2) + (i * size)))
+                printf("got recvbuf[%d]=%d, expected %d\n", i, recvbuf[i],
+                       ((size * (size - 1) / 2) + (i * size)));
+            my_assert(recvbuf[i] == ((size * (size - 1) / 2) + (i * size)));
+        }
+    }
 
     /* same again, use a user op and free it before the wait */
-/*    {*/
-/*        MPI_Op op = MPI_OP_NULL;*/
-/*        MPI_Op_create(sum_fn, 1, &op);*/
-
-/*        for (i = 0; i < COUNT; ++i) {*/
-/*            buf[i] = rank + i;*/
-/*            recvbuf[i] = 0xdeadbeef;*/
-/*        }*/
-/*        MPI_Ireduce(buf, recvbuf, COUNT, MPI_INT, op, 0, MPI_COMM_WORLD, &req);*/
-/*        MPI_Op_free(&op);*/
-/*        MPI_Wait(&req, MPI_STATUS_IGNORE);*/
-/*        if (rank == 0) {*/
-/*            for (i = 0; i < COUNT; ++i) {*/
-/*                if (recvbuf[i] != ((size * (size - 1) / 2) + (i * size)))*/
-/*                    printf("got recvbuf[%d]=%d, expected %d\n", i, recvbuf[i],*/
-/*                           ((size * (size - 1) / 2) + (i * size)));*/
-/*                my_assert(recvbuf[i] == ((size * (size - 1) / 2) + (i * size)));*/
-/*            }*/
-/*        }*/
-/*    }*/
+    {
+        MPI_Op op = MPI_OP_NULL;
+        MPI_Op_create(sum_fn, 1, &op);
+        for (i = 0; i < COUNT; ++i) {
+            buf[i] = rank + i;
+            recvbuf[i] = 0xdeadbeef;
+        }
+        MPI_Ireduce(buf, recvbuf, COUNT, MPI_INT, op, 0, MPI_COMM_WORLD, &req);
+        MPI_Op_free(&op);
+        MPI_Wait(&req, MPI_STATUS_IGNORE);
+        if (rank == 0) {
+            for (i = 0; i < COUNT; ++i) {
+                if (recvbuf[i] != ((size * (size - 1) / 2) + (i * size)))
+                    printf("got recvbuf[%d]=%d, expected %d\n", i, recvbuf[i],
+                           ((size * (size - 1) / 2) + (i * size)));
+                my_assert(recvbuf[i] == ((size * (size - 1) / 2) + (i * size)));
+            }
+        }
+    }
 
     /* MPI_Iallreduce */
-/*    for (i = 0; i < COUNT; ++i) {*/
-/*        buf[i] = rank + i;*/
-/*        recvbuf[i] = 0xdeadbeef;*/
-/*    }*/
-/*    MPI_Iallreduce(buf, recvbuf, COUNT, MPI_INT, MPI_SUM, MPI_COMM_WORLD, &req);*/
-/*    MPI_Wait(&req, MPI_STATUS_IGNORE);*/
-/*    for (i = 0; i < COUNT; ++i) {*/
-/*        if (recvbuf[i] != ((size * (size - 1) / 2) + (i * size)))*/
-/*            printf("got recvbuf[%d]=%d, expected %d\n", i, recvbuf[i],*/
-/*                   ((size * (size - 1) / 2) + (i * size)));*/
-/*        my_assert(recvbuf[i] == ((size * (size - 1) / 2) + (i * size)));*/
-/*    }*/
+    for (i = 0; i < COUNT; ++i) {
+        buf[i] = rank + i;
+        recvbuf[i] = 0xdeadbeef;
+    }
+    MPI_Iallreduce(buf, recvbuf, COUNT, MPI_INT, MPI_SUM, MPI_COMM_WORLD, &req);
+    MPI_Wait(&req, MPI_STATUS_IGNORE);
+    for (i = 0; i < COUNT; ++i) {
+        if (recvbuf[i] != ((size * (size - 1) / 2) + (i * size)))
+            printf("got recvbuf[%d]=%d, expected %d\n", i, recvbuf[i],
+                   ((size * (size - 1) / 2) + (i * size)));
+        my_assert(recvbuf[i] == ((size * (size - 1) / 2) + (i * size)));
+    }
 
     /* MPI_Ialltoallv (a weak test, neither irregular nor sparse) */
     for (i = 0; i < size; ++i) {
@@ -422,27 +421,27 @@ int main(int argc, char **argv)
 /*    }*/
 
     /* MPI_Ialltoallw (a weak test, neither irregular nor sparse) */
-/*    for (i = 0; i < size; ++i) {*/
-/*        sendcounts[i] = COUNT;*/
-/*        recvcounts[i] = COUNT;*/
-/*        sdispls[i] = COUNT * i * sizeof(int);*/
-/*        rdispls[i] = COUNT * i * sizeof(int);*/
-/*        sendtypes[i] = MPI_INT;*/
-/*        recvtypes[i] = MPI_INT;*/
-/*        for (j = 0; j < COUNT; ++j) {*/
-/*            buf[i * COUNT + j] = rank + (i * j);*/
-/*            recvbuf[i * COUNT + j] = 0xdeadbeef;*/
-/*        }*/
-/*    }*/
-/*    MPI_Ialltoallw(buf, sendcounts, sdispls, sendtypes, recvbuf, recvcounts, rdispls, recvtypes,*/
-/*                   MPI_COMM_WORLD, &req);*/
-/*    MPI_Wait(&req, MPI_STATUS_IGNORE);*/
-/*    for (i = 0; i < size; ++i) {*/
-/*        for (j = 0; j < COUNT; ++j) {*/
-            /*printf("recvbuf[%d*COUNT+%d]=%d, expecting %d\n", i, j, recvbuf[i*COUNT+j], (i + (rank * j))); */
-/*            my_assert(recvbuf[i * COUNT + j] == (i + (rank * j)));*/
-/*        }*/
-/*    }*/
+    for (i = 0; i < size; ++i) {
+        sendcounts[i] = COUNT;
+        recvcounts[i] = COUNT;
+        sdispls[i] = COUNT * i * sizeof(int);
+        rdispls[i] = COUNT * i * sizeof(int);
+        sendtypes[i] = MPI_INT;
+        recvtypes[i] = MPI_INT;
+        for (j = 0; j < COUNT; ++j) {
+            buf[i * COUNT + j] = rank + (i * j);
+            recvbuf[i * COUNT + j] = 0xdeadbeef;
+        }
+    }
+    MPI_Ialltoallw(buf, sendcounts, sdispls, sendtypes, recvbuf, recvcounts, rdispls, recvtypes,
+                   MPI_COMM_WORLD, &req);
+    MPI_Wait(&req, MPI_STATUS_IGNORE);
+    for (i = 0; i < size; ++i) {
+        for (j = 0; j < COUNT; ++j) {
+/*            printf("recvbuf[%d*COUNT+%d]=%d, expecting %d\n", i, j, recvbuf[i*COUNT+j], (i + (rank * j))); */
+            my_assert(recvbuf[i * COUNT + j] == (i + (rank * j)));
+        }
+    }
 
     if (rank == 0)
         printf(" No Errors\n");