Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
have persistent communications use a PREPARED flag to implement the fact that they...
[simgrid.git] / src / smpi / colls / smpi_mpich_selector.c
index c956135..3781e34 100644 (file)
@@ -424,20 +424,15 @@ int smpi_coll_tuned_reduce_scatter_mpich( void *sbuf, void *rbuf,
                                                     )
 {
     int comm_size, i;
-    size_t total_message_size, dsize;
-    int zerocounts = 0;
+    size_t total_message_size;
 
     XBT_DEBUG("smpi_coll_tuned_reduce_scatter_mpich");
     
     comm_size = smpi_comm_size(comm);
     // We need data size for decision function 
-    dsize=smpi_datatype_size(dtype);
     total_message_size = 0;
     for (i = 0; i < comm_size; i++) { 
         total_message_size += rcounts[i];
-        if (0 == rcounts[i]) {
-            zerocounts = 1;
-        }
     }
 
     if( smpi_op_is_commute(op) &&  total_message_size > 524288) { 
@@ -600,7 +595,7 @@ int smpi_coll_tuned_allgatherv_mpich(void *sbuf, int scount,
                                                MPI_Comm  comm
                                                )
 {
-    int communicator_size, pow2_size;
+    int communicator_size, pow2_size,i;
     size_t dsize, total_dsize;
 
     communicator_size = smpi_comm_size(comm);
@@ -608,7 +603,12 @@ int smpi_coll_tuned_allgatherv_mpich(void *sbuf, int scount,
     /* Determine complete data size */
     dsize=smpi_datatype_size(sdtype);
     total_dsize = dsize * scount * communicator_size;   
-   
+
+    total_dsize = 0;
+    for (i=0; i<communicator_size; i++)
+        total_dsize += rcounts[i];
+    if (total_dsize == 0) return MPI_SUCCESS;
+    
     for (pow2_size  = 1; pow2_size < communicator_size; pow2_size <<=1); 
 
     if ((pow2_size == communicator_size) && (total_dsize < 524288)) {