Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
mpich allgatherv was using wrong size value
authorAugustin Degomme <degomme@idpann.imag.fr>
Tue, 25 Jun 2013 11:17:49 +0000 (13:17 +0200)
committerAugustin Degomme <degomme@idpann.imag.fr>
Tue, 25 Jun 2013 14:29:22 +0000 (16:29 +0200)
src/smpi/colls/smpi_mpich_selector.c

index c81e2f2..3781e34 100644 (file)
@@ -595,7 +595,7 @@ int smpi_coll_tuned_allgatherv_mpich(void *sbuf, int scount,
                                                MPI_Comm  comm
                                                )
 {
                                                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);
     size_t dsize, total_dsize;
 
     communicator_size = smpi_comm_size(comm);
@@ -603,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;   
     /* 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)) {
     for (pow2_size  = 1; pow2_size < communicator_size; pow2_size <<=1); 
 
     if ((pow2_size == communicator_size) && (total_dsize < 524288)) {