From: Augustin Degomme Date: Thu, 20 Sep 2012 17:54:24 +0000 (+0200) Subject: add support of MPI_Testall X-Git-Tag: v3_8~146^2~37 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/7377f33250a1b07ca6b0883d53d10442dd533a06 add support of MPI_Testall --- diff --git a/src/smpi/private.h b/src/smpi/private.h index f32ddc6834..b0a8f5f5c9 100644 --- a/src/smpi/private.h +++ b/src/smpi/private.h @@ -118,6 +118,8 @@ void smpi_mpi_sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype, int smpi_mpi_test(MPI_Request * request, MPI_Status * status); int smpi_mpi_testany(int count, MPI_Request requests[], int *index, MPI_Status * status); +int smpi_mpi_testall(int count, MPI_Request requests[], + MPI_Status status[]); void smpi_mpi_probe(int source, int tag, MPI_Comm comm, MPI_Status* status); MPI_Request smpi_mpi_iprobe(int source, int tag, MPI_Comm comm, int* flag, MPI_Status* status); diff --git a/src/smpi/smpi_base.c b/src/smpi/smpi_base.c index 28566f5b11..c9443f0b79 100644 --- a/src/smpi/smpi_base.c +++ b/src/smpi/smpi_base.c @@ -342,6 +342,43 @@ int smpi_mpi_testany(int count, MPI_Request requests[], int *index, return flag; } + +int smpi_mpi_testall(int count, MPI_Request requests[], + MPI_Status status[]) +{ + xbt_dynar_t comms; + int i, flag, size; + int* map; + + flag = 0; + if(count > 0) { + comms = xbt_dynar_new(sizeof(smx_action_t), NULL); + map = xbt_new(int, count); + size = 0; + for(i = 0; i < count; i++) { + if(requests[i]->action) { + xbt_dynar_push(comms, &requests[i]->action); + map[size] = i; + size++; + } + } + + int n_finished=0; + while(n_finished