Revert "Drop requirement for user code to call CBase_foo::pup(p)"
[charm.git] / tests / charm++ / commtest / comlib / benchsectionmulti.C
index a7a3de92c99f3ca7bce327de9f905aa374cd3c99..13c26f6c1b3266822d5161ecbb2983e7d873b253 100644 (file)
@@ -1,4 +1,26 @@
 
+/*******************************************
+        This benchmark tests section multicast feature of the
+        Communication library with a many to many multicast benchmark.
+        Section multicasts are traditionally used for one-to-many
+        multicast operations, but this benchmark tests them in an
+        many-to-many fashion.
+
+         To Run
+             benchsectionmulti <message_size> <array_elements>
+
+         Defaults
+           message size = 128b
+           array elements = CkNumPes
+
+         Performance tips
+            - Use a maxpass of 1000
+            - Use +LBOff to remove loadbalancing statistics 
+              collection overheads
+
+Sameer Kumar 03/17/05      
+**************************************************/
+
 #include <stdio.h>
 #include <string.h>
 
@@ -12,7 +34,7 @@
 #include "bench.decl.h"
 
 #define USELIB
-#define MAXPASS 100
+#define MAXPASS 10
 
 int MESSAGESIZE=128;
 /*readonly*/ CkChareID mid;
@@ -44,7 +66,7 @@ public:
 };
 
 /*mainchare*/
-class Main : public Chare
+class Main : public CBase_Main
 {
     int pass, superpass;
     double curTime;
@@ -69,17 +91,18 @@ public:
        arr = CProxy_Bench::ckNew();
                 
         int count = 0;
-        CkArrayIndexMax *elem_array = new CkArrayIndexMax[nElements];
+        CkArrayIndex *elem_array = new CkArrayIndex[nElements];
         for(count = 0; count < nElements; count ++) {
             elem_array[count] = CkArrayIndex1D(count);
         }
 
+        //Different section multicast strategies
         DirectMulticastStrategy *dstrat = new DirectMulticastStrategy
             (arr.ckGetArrayID());
 
        RingMulticastStrategy *rstrat = new RingMulticastStrategy(arr.ckGetArrayID());
 
-        CkPrintf("After creating array\n");
+        //        CkPrintf("After creating array\n");
        CkArrayID aid = arr.ckGetArrayID();
 
         ComlibInstanceHandle cinst = CkGetComlibInstance();        
@@ -92,7 +115,7 @@ public:
         
        curTime = CkWallTimer();
        arr.sendMessage();
-        CkPrintf("After Main\n");
+        //        CkPrintf("After Main\n");
     };
     
     void send(void) {
@@ -107,6 +130,7 @@ public:
         }
     }
     
+    //Phase done, initiate next phase with larger message sizes
     void done()
     {
         static int count = 0;
@@ -146,16 +170,19 @@ class Bench : public CBase_Bench
     int mcount;
     double time, startTime;
     int firstEntryFlag, sendFinishedFlag;
-    CProxySection_Bench sproxy;
+
+    CProxySection_Bench sproxy;  //Section proxy, which decides who
+                                 //all this array element is sending
+                                 //to
     ComlibInstanceHandle myinst;
 
 public:
 
     void pup(PUP::er &p) {
-        if(p.isPacking())
-            CkPrintf("Migrating from %d\n", CkMyPe());
+        //if(p.isPacking())
+        //            CkPrintf("Migrating from %d\n", CkMyPe());
 
-        ArrayElement1D::pup(p);
+        CBase_Bench::pup(p);
         p | pass ;
         p | mcount ;
         p | time;
@@ -175,10 +202,12 @@ public:
         firstEntryFlag = 0;
         sendFinishedFlag = 0;
 
-        CkArrayIndexMax *elem_array = new CkArrayIndexMax[nElements];
+        CkArrayIndex *elem_array = new CkArrayIndex[nElements];
         for(int count = 0; count < nElements; count ++) 
             elem_array[count] = CkArrayIndex1D(count);
         
+        //Create the section proxy on all array elements
+        //Later subset test should be added to this benchmark 
         sproxy = CProxySection_Bench::ckNew
             (thisProxy.ckGetArrayID(), elem_array, nElements); 
         ComlibResetSectionProxy(&sproxy);
@@ -190,9 +219,10 @@ public:
     }
     
     Bench(CkMigrateMessage *m) {
-        CkPrintf(" Migrated to %d\n", CkMyPe());
+        //CkPrintf(" Migrated to %d\n", CkMyPe());
     }
-    
+
+    //Send messages through the section proxy
     void sendMessage()
     {
         if(thisIndex >= nElements) {
@@ -210,7 +240,6 @@ public:
 #else
        arr[count].receiveMessage(new (&size, 0) BenchMessage);
 #endif
-
         sendFinishedFlag = 1;  
     }
     
@@ -234,12 +263,13 @@ public:
         }
     }
 
+    //All messages received, loadbalance or start next phase
     void start(int messagesize){
         //CkPrintf("In Start\n");
        MESSAGESIZE = messagesize;
         
         if(firstEntryFlag) {
-            CkPrintf("Calling AtSync\n");
+            //            CkPrintf("Calling AtSync\n");
             AtSync();
         }
         else
@@ -248,7 +278,7 @@ public:
 
     void ResumeFromSync() {
         ComlibResetSectionProxy(&sproxy);
-        myinst.setSourcePe();
+        //myinst.setSourcePe();
         sendMessage();
     }