X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/59a1dfe76a80ea4facc6231d05b861e6966954d2..244ffce80a9e2390e24b9788114de037e4ccc0ae:/teshsuite/smpi/coll-alltoallv/coll-alltoallv.c diff --git a/teshsuite/smpi/coll-alltoallv/coll-alltoallv.c b/teshsuite/smpi/coll-alltoallv/coll-alltoallv.c index aa777e0795..db5fe0b385 100644 --- a/teshsuite/smpi/coll-alltoallv/coll-alltoallv.c +++ b/teshsuite/smpi/coll-alltoallv/coll-alltoallv.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2013-2019. The SimGrid Team. +/* Copyright (c) 2013-2023. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -66,6 +66,8 @@ int main(int argc, char **argv) /* Create the buffer */ MPI_Comm_size(comm, &size); + MPI_Comm_set_errhandler(MPI_COMM_WORLD, MPI_ERRORS_RETURN); + if(size<=0){ printf("error : comm size <= 0, run with mpirun\n"); return -1; @@ -99,20 +101,23 @@ int main(int argc, char **argv) if(status!=MPI_ERR_BUFFER) printf("MPI_Alltoallv did not return MPI_ERR_BUFFER for empty sendbuf\n"); status = MPI_Alltoallv(sbuf, NULL, sdispls, MPI_INT, rbuf, recvcounts, rdispls, MPI_INT, MPI_COMM_WORLD); - if(status!=MPI_ERR_ARG) - printf("MPI_Alltoallv did not return MPI_ERR_ARG for NULL sendcounts\n"); + if(status!=MPI_ERR_COUNT) + printf("MPI_Alltoallv did not return MPI_ERR_COUNT for NULL sendcounts\n"); status = MPI_Alltoallv(sbuf, sendcounts, NULL, MPI_INT, rbuf, recvcounts, rdispls, MPI_INT, MPI_COMM_WORLD); if(status!=MPI_ERR_ARG) printf("MPI_Alltoallv did not return MPI_ERR_ARG for NULL senddispl\n"); status = MPI_Alltoallv(sbuf, sendcounts, sdispls, MPI_DATATYPE_NULL, rbuf, recvcounts, rdispls, MPI_INT, MPI_COMM_WORLD); if(status!=MPI_ERR_TYPE) printf("MPI_Alltoallv did not return MPI_ERR_TYPE for MPI_DATATYPE_NULL sendtype\n"); - status = MPI_Alltoallv(sbuf, sendcounts, sdispls, MPI_INT, NULL, recvcounts, rdispls, MPI_INT, MPI_COMM_WORLD); + if (rank == 0)//if total recvcounts == 0 the call is not illegal, so be sure to fail for rank 0 to avoid deadlocks + status = MPI_Alltoallv(NULL, sendcounts, sdispls, MPI_INT, NULL, recvcounts, rdispls, MPI_INT, MPI_COMM_WORLD); + else + status = MPI_Alltoallv(sbuf, sendcounts, sdispls, MPI_INT, NULL, recvcounts, rdispls, MPI_INT, MPI_COMM_WORLD); if(status!=MPI_ERR_BUFFER) printf("MPI_Alltoallv did not return MPI_ERR_BUFFER for empty recvbuf\n"); status = MPI_Alltoallv(sbuf, sendcounts, sdispls, MPI_INT, rbuf, NULL, rdispls, MPI_INT, MPI_COMM_WORLD); - if(status!=MPI_ERR_ARG) - printf("MPI_Alltoallv did not return MPI_ERR_ARG for NULL recvcounts\n"); + if(status!=MPI_ERR_COUNT) + printf("MPI_Alltoallv did not return MPI_ERR_COUNT for NULL recvcounts\n"); status = MPI_Alltoallv(sbuf, sendcounts, sdispls, MPI_INT, rbuf, recvcounts, NULL, MPI_INT, MPI_COMM_WORLD); if(status!=MPI_ERR_ARG) printf("MPI_Alltoallv did not return MPI_ERR_ARG for NULL recvdispl\n"); @@ -129,20 +134,23 @@ int main(int argc, char **argv) print_buffer_int(sdispls, size, "sdisp:", rank); print_buffer_int(rdispls, size, "rdisp:", rank); - MPI_Alltoallv(sbuf, sendcounts, sdispls, MPI_INT, rbuf, recvcounts, rdispls, MPI_INT, comm); + status = MPI_Alltoallv(sbuf, sendcounts, sdispls, MPI_INT, rbuf, recvcounts, rdispls, MPI_INT, comm); + if (status != MPI_SUCCESS) + printf("MPI_Alltoallv did not return MPI_SUCCESS\n"); print_buffer_int(rbuf, size2, "rbuf:", rank); MPI_Barrier(MPI_COMM_WORLD); if (0 == rank) { printf("Alltoallv TEST COMPLETE.\n"); + fflush(stdout); } - free(sdispls); - free(rdispls); - free(recvcounts); - free(sendcounts); - free(rbuf); - free(sbuf); + xbt_free(sdispls); + xbt_free(rdispls); + xbt_free(recvcounts); + xbt_free(sendcounts); + xbt_free(rbuf); + xbt_free(sbuf); MPI_Finalize(); return 0;