stencil3d ldb example: moved barrier from main to the array
[charm.git] / examples / charm++ / load_balancing / stencil3d / stencil3d.C
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();
     }