Adding comments to the comlib benchmarks.
authorSameer Kumar <skumar2@uiuc.edu>
Mon, 9 May 2005 21:41:35 +0000 (21:41 +0000)
committerSameer Kumar <skumar2@uiuc.edu>
Mon, 9 May 2005 21:41:35 +0000 (21:41 +0000)
tests/charm++/commtest/comlib/bench.C
tests/charm++/commtest/comlib/benchmulti.C
tests/charm++/commtest/comlib/benchsectionmulti.C

index 3806625ab2ee4579f804a200cb39ae39e02b25d0..e65530caab650d1e9df7eeb895da93bed1463591 100644 (file)
@@ -1,3 +1,22 @@
+
+/***********************
+        This benchmark tests all to all personalized communication
+   in Charm++ using the communication library.
+
+         To Run
+             bench <message_size> <array_elements>
+
+         Defaults
+           message size = 128b
+           array elements = CkNumPes
+
+         Performance tips
+            - Use a maxiter of 1000
+            - Use +LBOff to remove loadbalancing overheads
+
+Sameer Kumar 10/28/04      
+***********************/
+
 #include <stdio.h>
 #include <string.h>
 
 #include "DummyStrategy.h"
 #include "bench.decl.h"
 
-#define USELIB  1
-#define MAXITER 10
-#define NUMPASS 1
+#define USELIB  1           // Use comlib or default charm++
+#define MAXITER 10          // Number of iterations to run For
+                            // benchmark runs this should be atleast a
+                            // 1000
+
+#define NUMPASS 1           // Number of all-to-all phases with the
+                            // same message size. After NUMPASS phases
+                            // the message size will be
+                            // increased. Useful while using the
+                            // learning framework.
 
 /*readonly*/ CkChareID mid;
 /*readonly*/ CProxy_Bench arr;
 /*readonly*/ int nElements;
 
+//Old way of creating messages in Charm++
 class BenchMessage : public CMessage_BenchMessage {
 public:
     char *data;
@@ -83,6 +110,7 @@ public:
             elem_array[count] = CkArrayIndex1D(count);
         }
 
+        //Create strategy
         EachToManyMulticastStrategy *strat = new 
             EachToManyMulticastStrategy(USE_MESH, arr.ckGetArrayID(), 
                                         arr.ckGetArrayID(), 
@@ -152,10 +180,11 @@ public:
     }
 };
 
+/******** The all to all benchmar array *************/
 /*array [1D]*/
 class Bench : public ArrayElement1D
 {
-  int pass;
+    int pass;
     int mcount;
     int ite;
     int msize;
@@ -188,6 +217,9 @@ public:
         //myInst = cinst;
     }
     
+    //Send all to all messages
+    //proxy arr is the charm++ proxy
+    //proxy arrd is the comlib delegated proxy
     void sendMessage()
     {
 #ifdef USELIB
@@ -208,7 +240,9 @@ public:
         myInst.endIteration();
 #endif        
     }
-    
+
+    //receive the all to all messages Once I have everyones message I
+    //initiate the next iteration, or call loadbalancing.
     void receiveMessage(BenchMessage *bmsg){
         
         delete bmsg;
@@ -221,6 +255,9 @@ public:
             mcount = 0;            
             pass ++;            
             CProxy_Main mainProxy(mid);
+
+            //If I have finished all iterations for this message size,
+            //Go back to main and start with a larger message size.
             if(pass == MAXITER){
                pass = 0;                
                mainProxy.send();
@@ -233,6 +270,8 @@ public:
     void start(int messagesize){
         msize = messagesize;
 
+        //Initiate loadbalance at the phases 1 and NUMPASS/2
+        //So if NUMPASS = 1, loadbalancing will not be called 
        if(ite % NUMPASS == NUMPASS/2 || ite % NUMPASS == 1) {
             //Call atsync in the middle and in the end
             ComlibPrintf("[%d] Calling Atsync\n", CkMyPe());
@@ -245,12 +284,14 @@ public:
         ite ++;
     }
 
+    //Finished loadbalancing
     void ResumeFromSync() {
         //        CkPrintf("%d: resuming\n", CkMyPe());
         myInst.setSourcePe();
        sendMessage();
     }
 
+    //Pack the data for migration
     void pup(PUP::er &p) {
         //if(p.isPacking())
         //  CkPrintf("Migrating from %d\n", CkMyPe());
index 72726bc508c79826c5cf0972372d78d5f8208354..fc5e4c44384c3f2833d77de59226709d856832df 100644 (file)
@@ -1,4 +1,22 @@
 
+/*******************************************
+        This benchmark tests all to all multicast in Charm++ using the
+        communication library.
+
+         To Run
+             benchmulti <message_size> <array_elements>
+
+         Defaults
+           message size = 128b
+           array elements = CkNumPes
+
+         Performance tips
+            - Use a maxpass of 1000
+            - Use +LBOff to remove loadbalancing overheads
+
+Sameer Kumar 10/28/04      
+**************************************************/
+
 #include <stdio.h>
 #include <string.h>
 
@@ -19,13 +37,7 @@ int MESSAGESIZE=128;
 /*readonly*/ CProxy_Bench arr;
 /*readonly*/ int nElements;
 
-void callbackhandler(void *message){
-    //CkPrintf("[%d]In callback function\n", CkMyPe());
-    
-    BenchMessage *bm = (BenchMessage *)EnvToUsr((envelope *)message);
-    arr[CkMyPe()].receiveMessage(bm);
-}
-
+//Old stupid way of creating messages
 class BenchMessage : public CMessage_BenchMessage {
 public:
     int size;
@@ -81,14 +93,18 @@ public:
             elem_array[count] = CkArrayIndex1D(count);
         }
 
+        //Create strategy
         EachToManyMulticastStrategy *strat = new 
             EachToManyMulticastStrategy(USE_MESH, arr.ckGetArrayID(), 
                                         arr.ckGetArrayID(),
                                         nElements, elem_array,
                                         nElements, elem_array);
 
+        //Use the multicast learner
         strat->setMulticast();
 
+        //Alltoall multicast is effectively an all-to-all broadcast.
+        //So we can try the broadcast strategy here too
         BroadcastStrategy *bstrat = new BroadcastStrategy
             (arr.ckGetArrayID(), USE_HYPERCUBE);
         
@@ -120,6 +136,7 @@ public:
         }
     }
     
+    //Finished a phase, increase message size and start next phase
     void done()
     {
         static int count = 0;
@@ -152,6 +169,8 @@ public:
     }
 };
 
+
+//Charm++ array to do all-to-all multicast
 /*array [1D]*/
 class Bench : public CBase_Bench 
 {
@@ -164,6 +183,7 @@ class Bench : public CBase_Bench
 
 public:
 
+    //A pup to migrate elements, because we always need one 
     void pup(PUP::er &p) {
         //if(p.isPacking())
         //  CkPrintf("Migrating from %d\n", CkMyPe());
@@ -179,6 +199,7 @@ public:
         p | arrd;
     }
   
+    //Constructor
     Bench(ComlibInstanceHandle cinst)
     {   
         pass = 0;
@@ -200,10 +221,12 @@ public:
         myinst = cinst;
     }
     
+    //Migrate constrctor
     Bench(CkMigrateMessage *m) {
         //        CkPrintf(" Migrated to %d\n", CkMyPe());
     }
     
+    //Send the multicast message, notice only one is sent.
     void sendMessage()
     {
         if(thisIndex >= nElements) {
@@ -230,7 +253,9 @@ public:
 
         sendFinishedFlag = 1;  
     }
-    
+
+    //Receive messages. Once all are received, initiate next step with
+    //larger message size
     void receiveMessage(BenchMessage *bmsg){
         
         ComlibPrintf("[%d][%d] In Receive Message \n", CkMyPe(), thisIndex);
@@ -261,6 +286,7 @@ public:
             sendMessage();
     }
 
+    //Resume from loadbalancing
     void ResumeFromSync() {
         myinst.setSourcePe();
         sendMessage();
index 47bbbe087446fa1378b9c3e448e5ceb3cc4d35ea..608c1bf39e073c147601cda36f7daa1f126589d4 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>
 
@@ -74,6 +96,7 @@ public:
             elem_array[count] = CkArrayIndex1D(count);
         }
 
+        //Different section multicast strategies
         DirectMulticastStrategy *dstrat = new DirectMulticastStrategy
             (arr.ckGetArrayID());
 
@@ -107,6 +130,7 @@ public:
         }
     }
     
+    //Phase done, initiate next phase with larger message sizes
     void done()
     {
         static int count = 0;
@@ -146,7 +170,10 @@ 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:
@@ -179,6 +206,8 @@ public:
         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);
@@ -192,7 +221,8 @@ public:
     Bench(CkMigrateMessage *m) {
         //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,6 +263,7 @@ public:
         }
     }
 
+    //All messages received, loadbalance or start next phase
     void start(int messagesize){
         //CkPrintf("In Start\n");
        MESSAGESIZE = messagesize;