Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
change the behavior of mpi_testall to loop over mpi_test and no longer mpi_testany.
authorAugustin Degomme <degomme@idpann.imag.fr>
Fri, 21 Sep 2012 10:34:55 +0000 (12:34 +0200)
committerAugustin Degomme <degomme@idpann.imag.fr>
Fri, 21 Sep 2012 16:07:44 +0000 (18:07 +0200)
src/smpi/smpi_base.c

index c9443f0..458eb84 100644 (file)
@@ -302,7 +302,7 @@ int flag;
    else 
     flag = simcall_comm_test((*request)->action);
    if(flag) {
-        smpi_mpi_wait(request, status);
+       finish_wait(request, status);
     }
     return flag;
 }
@@ -346,36 +346,12 @@ int smpi_mpi_testany(int count, MPI_Request requests[], int *index,
 int smpi_mpi_testall(int count, MPI_Request requests[],
                      MPI_Status status[])
 {
-  xbt_dynar_t comms;
-  int i, flag, size;
-  int* map;
+  int flag=1;
+  int i;
+  for(i=0; i<count; i++)
+   if (smpi_mpi_test(&requests[i], &status[i])!=1)
+       flag=0;
 
-  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<size) {
-      i = simcall_comm_testany(comms);
-      if(i != MPI_UNDEFINED) {
-        smpi_mpi_wait(&requests[i], &status[i]);
-      }
-      n_finished++;
-      XBT_DEBUG("TestAll, n finished %d on %d to test", n_finished, size);
-    }
-    flag = 1;
-    xbt_free(map);
-    xbt_dynar_free(&comms);
-  }
   return flag;
 }