stencil3d ldb example: moved barrier from main to the array
authorAbhinav S Bhatele <bhatele@illinois.edu>
Wed, 29 Dec 2010 09:04:13 +0000 (03:04 -0600)
committerAbhinav S Bhatele <bhatele@illinois.edu>
Wed, 29 Dec 2010 09:04:13 +0000 (03:04 -0600)
examples/charm++/load_balancing/stencil3d/stencil3d.C
examples/charm++/load_balancing/stencil3d/stencil3d.ci

index 28da4eff96995ab83b02eb1d7944256e0eac4ba8..42db9e71fc0dba5926a987a7e32b6916a2ab2963 100644 (file)
@@ -75,7 +75,6 @@ double endTime;
 class Main : public CBase_Main {
   public:
     CProxy_Stencil array;
-    int iterations;
 
     Main(CkArgMsg* m) {
       if ( (m->argc != 3) && (m->argc != 7) ) {
@@ -84,9 +83,6 @@ class Main : public CBase_Main {
         CkAbort("Abort");
       }
 
-      // set iteration counter to zero
-      iterations = 0;
-
       // store the main proxy
       mainProxy = thisProxy;
        
@@ -130,20 +126,7 @@ class Main : public CBase_Main {
 
     // Each worker reports back to here when it completes an iteration
     void report() {
-      iterations++;
-      endTime = CmiWallTimer();
-      CkPrintf("[%d] Time per iteration: %f %f\n", iterations, (endTime - startTime), endTime);
-
-      if(iterations % LBPERIOD == 0)
-       array.startBalancing();
-      else {
-       if(iterations == MAX_ITER) {
-         CkExit();
-       } else {
-         startTime = CmiWallTimer();
-         array.doStep();
-       }
-      }
+      CkExit();
     }
 };
 
@@ -318,7 +301,20 @@ class Stencil: public CBase_Stencil {
 
       constrainBC();
 
-      contribute(0, 0, CkReduction::concat, CkCallback(CkIndex_Main::report(), mainProxy));
+      if(thisIndex.x == 0 && thisIndex.y == 0 && thisIndex.z == 0) {
+       endTime = CmiWallTimer();
+       CkPrintf("[%d] Time per iteration: %f %f\n", iterations, (endTime - startTime), endTime);
+      }
+
+      if(iterations == MAX_ITER)
+       contribute(0, 0, CkReduction::concat, CkCallback(CkIndex_Main::report(), mainProxy));
+      else {
+       startTime = CmiWallTimer();
+       if(iterations % LBPERIOD == 0)
+         AtSync();
+       else
+         contribute(0, 0, CkReduction::concat, CkCallback(CkIndex_Stencil::doStep(), thisProxy));
+      }
     }
 
     // Check to see if we have received all neighbor values yet
@@ -353,10 +349,6 @@ class Stencil: public CBase_Stencil {
          temperature[index(i, j, 1)] = 255.0;
     }
 
-    void startBalancing() {
-      AtSync();
-    }
-
     void ResumeFromSync() {
       doStep();
     }
index 2b19ff971a0c12c1d98fd96b0d4b6a5631259120..4af3a05190b21bc1d87782921d645a67906a063e 100644 (file)
@@ -39,8 +39,6 @@ mainmodule stencil3d {
        check_and_compute();
       }
     };
-
-    entry void startBalancing();
   };
 
 };