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;
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) {
}
/* 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) {
}
/* 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");