[mpich2-commits] r5608 - mpich2/trunk/test/mpi/coll

balaji at mcs.anl.gov balaji at mcs.anl.gov
Wed Oct 28 21:17:44 CDT 2009


Author: balaji
Date: 2009-10-28 21:17:44 -0500 (Wed, 28 Oct 2009)
New Revision: 5608

Modified:
   mpich2/trunk/test/mpi/coll/allgatherv4.c
Log:
Incoming data was being overwritten in this test, which is not MPI
compliant.


Modified: mpich2/trunk/test/mpi/coll/allgatherv4.c
===================================================================
--- mpich2/trunk/test/mpi/coll/allgatherv4.c	2009-10-28 23:24:46 UTC (rev 5607)
+++ mpich2/trunk/test/mpi/coll/allgatherv4.c	2009-10-29 02:17:44 UTC (rev 5608)
@@ -16,6 +16,7 @@
 
 #define START_BUF (1)
 #define LARGE_BUF (256 * 1024)
+
 /* FIXME: MAX_BUF is too large */
 #define MAX_BUF   (128 * 1024 * 1024)
 #define LOOPS 10
@@ -49,6 +50,9 @@
     MPI_Comm_size(MPI_COMM_WORLD, &comm_size);
     MPI_Comm_rank(MPI_COMM_WORLD, &comm_rank);
 
+    if (LARGE_BUF * comm_size > MAX_BUF)
+        goto fn_exit;
+
     sbuf = (void *) malloc(MAX_BUF);
     rbuf = (void *) malloc(MAX_BUF);
 
@@ -106,6 +110,7 @@
     free(recvcounts);
     free(displs);
 
+fn_exit:
     MTest_Finalize(errs);
     MPI_Finalize();
 
@@ -175,42 +180,24 @@
     MPI_Comm_size(comm, &comm_size);
     MPI_Comm_rank(comm, &comm_rank);
 
-    if (test_type == REGULAR) {
-        for (i = 0; i < comm_size; i++) {
+    displs[0] = 0;
+    for (i = 0; i < comm_size; i++) {
+        if (test_type == REGULAR)
             recvcounts[i] = msg_size;
-            displs[i] = 0;
-        }
-    }
-    else if (test_type == BCAST) {
-        for (i = 0; i < comm_size; i++) {
+        else if (test_type == BCAST)
             recvcounts[i] = (!i) ? msg_size : 0;
-            displs[i] = 0;
-        }
-    }
-    else if (test_type == SPIKE) {
-        for (i = 0; i < comm_size; i++) {
+        else if (test_type == SPIKE)
             recvcounts[i] = (!i) ? (msg_size / 2) : (msg_size / (2 * (comm_size - 1)));
-            displs[i] = 0;
-        }
-    }
-    else if (test_type == HALF_FULL) {
-        for (i = 0; i < comm_size; i++) {
+        else if (test_type == HALF_FULL)
             recvcounts[i] = (i < (comm_size / 2)) ? (2 * msg_size) : 0;
-            displs[i] = 0;
-        }
-    }
-    else if (test_type == LINEAR_DECREASE) {
-        for (i = 0; i < comm_size; i++) {
+        else if (test_type == LINEAR_DECREASE) {
             tmp = 2 * msg_size * (comm_size - 1 - i) / (comm_size - 1);
             recvcounts[i] = (int) tmp;
-            displs[i] = 0;
 
             /* If the maximum message size is too large, don't run */
             if (tmp > MAX_BUF) return 0;
         }
-    }
-    else if (test_type == BELL_CURVE) {
-        for (i = 1; i <= comm_size; i *= 2) {
+        else if (test_type == BELL_CURVE) {
             for (j = 0; j < i; j++) {
                 if (i - 1 + j >= comm_size) continue;
                 tmp = msg_size * comm_size / (log(comm_size) * i);
@@ -221,6 +208,9 @@
                 if (tmp > MAX_BUF) return 0;
             }
         }
+
+        if (i < comm_size - 1)
+            displs[i+1] = displs[i] + recvcounts[i];
     }
 
     MPI_Barrier(comm);



More information about the mpich2-commits mailing list