X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/43dba0e529d63cb716d36dd381b77ce99642d3a2..4d648ebbbe5705878080b9cbf1ca61497323c592:/teshsuite/smpi/mpich3-test/coll/nonblocking2.c diff --git a/teshsuite/smpi/mpich3-test/coll/nonblocking2.c b/teshsuite/smpi/mpich3-test/coll/nonblocking2.c index 4eb1ee0836..187b2889ad 100644 --- a/teshsuite/smpi/mpich3-test/coll/nonblocking2.c +++ b/teshsuite/smpi/mpich3-test/coll/nonblocking2.c @@ -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) { @@ -282,43 +281,43 @@ int main(int argc, char **argv) } /* MPI_Ireduce_scatter */ -/* for (i = 0; i < size; ++i) {*/ -/* recvcounts[i] = COUNT;*/ -/* for (j = 0; j < COUNT; ++j) {*/ -/* buf[i * COUNT + j] = rank + i;*/ -/* recvbuf[i * COUNT + j] = 0xdeadbeef;*/ -/* }*/ -/* }*/ -/* MPI_Ireduce_scatter(buf, recvbuf, recvcounts, MPI_INT, MPI_SUM, MPI_COMM_WORLD, &req);*/ -/* MPI_Wait(&req, MPI_STATUS_IGNORE);*/ -/* for (j = 0; j < COUNT; ++j) {*/ -/* my_assert(recvbuf[j] == (size * rank + ((size - 1) * size) / 2));*/ -/* }*/ -/* for (i = 1; i < size; ++i) {*/ -/* for (j = 0; j < COUNT; ++j) {*/ - /* check we didn't corrupt the rest of the recvbuf */ -/* my_assert(recvbuf[i * COUNT + j] == 0xdeadbeef);*/ -/* }*/ -/* }*/ + for (i = 0; i < size; ++i) { + recvcounts[i] = COUNT; + for (j = 0; j < COUNT; ++j) { + buf[i * COUNT + j] = rank + i; + recvbuf[i * COUNT + j] = 0xdeadbeef; + } + } + MPI_Ireduce_scatter(buf, recvbuf, recvcounts, MPI_INT, MPI_SUM, MPI_COMM_WORLD, &req); + MPI_Wait(&req, MPI_STATUS_IGNORE); + for (j = 0; j < COUNT; ++j) { + my_assert(recvbuf[j] == (size * rank + ((size - 1) * size) / 2)); + } + for (i = 1; i < size; ++i) { + for (j = 0; j < COUNT; ++j) { +/* check we didn't corrupt the rest of the recvbuf */ + my_assert(recvbuf[i * COUNT + j] == 0xdeadbeef); + } + } /* MPI_Ireduce_scatter_block */ -/* for (i = 0; i < size; ++i) {*/ -/* for (j = 0; j < COUNT; ++j) {*/ -/* buf[i * COUNT + j] = rank + i;*/ -/* recvbuf[i * COUNT + j] = 0xdeadbeef;*/ -/* }*/ -/* }*/ -/* MPI_Ireduce_scatter_block(buf, recvbuf, COUNT, MPI_INT, MPI_SUM, MPI_COMM_WORLD, &req);*/ -/* MPI_Wait(&req, MPI_STATUS_IGNORE);*/ -/* for (j = 0; j < COUNT; ++j) {*/ -/* my_assert(recvbuf[j] == (size * rank + ((size - 1) * size) / 2));*/ -/* }*/ -/* for (i = 1; i < size; ++i) {*/ -/* for (j = 0; j < COUNT; ++j) {*/ + for (i = 0; i < size; ++i) { + for (j = 0; j < COUNT; ++j) { + buf[i * COUNT + j] = rank + i; + recvbuf[i * COUNT + j] = 0xdeadbeef; + } + } + MPI_Ireduce_scatter_block(buf, recvbuf, COUNT, MPI_INT, MPI_SUM, MPI_COMM_WORLD, &req); + MPI_Wait(&req, MPI_STATUS_IGNORE); + for (j = 0; j < COUNT; ++j) { + my_assert(recvbuf[j] == (size * rank + ((size - 1) * size) / 2)); + } + for (i = 1; i < size; ++i) { + for (j = 0; j < COUNT; ++j) { /* check we didn't corrupt the rest of the recvbuf */ -/* my_assert(recvbuf[i * COUNT + j] == 0xdeadbeef);*/ -/* }*/ -/* }*/ + my_assert(recvbuf[i * COUNT + j] == 0xdeadbeef); + } + } /* MPI_Igatherv */ for (i = 0; i < size * COUNT; ++i) { @@ -397,52 +396,52 @@ int main(int argc, char **argv) } /* MPI_Iscan */ -/* for (i = 0; i < COUNT; ++i) {*/ -/* buf[i] = rank + i;*/ -/* recvbuf[i] = 0xdeadbeef;*/ -/* }*/ -/* MPI_Iscan(buf, recvbuf, COUNT, MPI_INT, MPI_SUM, MPI_COMM_WORLD, &req);*/ -/* MPI_Wait(&req, MPI_STATUS_IGNORE);*/ -/* for (i = 0; i < COUNT; ++i) {*/ -/* my_assert(recvbuf[i] == ((rank * (rank + 1) / 2) + (i * (rank + 1))));*/ -/* }*/ + for (i = 0; i < COUNT; ++i) { + buf[i] = rank + i; + recvbuf[i] = 0xdeadbeef; + } + MPI_Iscan(buf, recvbuf, COUNT, MPI_INT, MPI_SUM, MPI_COMM_WORLD, &req); + MPI_Wait(&req, MPI_STATUS_IGNORE); + for (i = 0; i < COUNT; ++i) { + my_assert(recvbuf[i] == ((rank * (rank + 1) / 2) + (i * (rank + 1)))); + } /* MPI_Iexscan */ -/* for (i = 0; i < COUNT; ++i) {*/ -/* buf[i] = rank + i;*/ -/* recvbuf[i] = 0xdeadbeef;*/ -/* }*/ -/* MPI_Iexscan(buf, recvbuf, COUNT, MPI_INT, MPI_SUM, MPI_COMM_WORLD, &req);*/ -/* MPI_Wait(&req, MPI_STATUS_IGNORE);*/ -/* for (i = 0; i < COUNT; ++i) {*/ -/* if (rank == 0)*/ -/* my_assert(recvbuf[i] == 0xdeadbeef);*/ -/* else*/ -/* my_assert(recvbuf[i] == ((rank * (rank + 1) / 2) + (i * (rank + 1)) - (rank + i)));*/ -/* }*/ + for (i = 0; i < COUNT; ++i) { + buf[i] = rank + i; + recvbuf[i] = 0xdeadbeef; + } + MPI_Iexscan(buf, recvbuf, COUNT, MPI_INT, MPI_SUM, MPI_COMM_WORLD, &req); + MPI_Wait(&req, MPI_STATUS_IGNORE); + for (i = 0; i < COUNT; ++i) { + if (rank == 0) + my_assert(recvbuf[i] == 0xdeadbeef); + else + my_assert(recvbuf[i] == ((rank * (rank + 1) / 2) + (i * (rank + 1)) - (rank + i))); + } /* 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");