everything fixed hopefully
authorAbhinav Bhatele <bhatele@illinois.edu>
Wed, 2 Apr 2008 03:39:51 +0000 (03:39 +0000)
committerAbhinav Bhatele <bhatele@illinois.edu>
Wed, 2 Apr 2008 03:39:51 +0000 (03:39 +0000)
examples/charm++/ckdirect/matmul3d-iter/Makefile
examples/charm++/ckdirect/matmul3d-iter/matmul3d.C
examples/charm++/ckdirect/matmul3d-iter/matmul3d.h

index 0a3820667d071151b9c0e46815eb4ee28e99c307..786abc89d6aa2112d71935b0397f0dac84bd283d 100644 (file)
@@ -5,13 +5,13 @@ OBJS = matmul3d.o
 all: matmul3d
 
 matmul3d: $(OBJS)
-       $(CHARMC) -O3 -language charm++ -o matmul3d $(OBJS)
+       $(CHARMC) -g -language charm++ -o matmul3d $(OBJS)
 
 projections: $(OBJS)
-       $(CHARMC) -O3 -language charm++ -tracemode projections -lz -o matmul3d.prj $(OBJS)
+       $(CHARMC) -g -language charm++ -tracemode projections -lz -o matmul3d.prj $(OBJS)
 
 summary: $(OBJS)
-       $(CHARMC) -O3 -language charm++ -tracemode summary -lz -o matmul3d.sum $(OBJS)
+       $(CHARMC) -g -language charm++ -tracemode summary -lz -o matmul3d.sum $(OBJS)
 
 matmul3d.decl.h: matmul3d.ci
        $(CHARMC)  matmul3d.ci
@@ -20,4 +20,4 @@ clean:
        rm -f *.decl.h *.def.h conv-host *.o matmul3d matmul3d.prj charmrun *~
 
 matmul3d.o: matmul3d.C matmul3d.h matmul3d.decl.h
-       $(CHARMC) -c -O3 matmul3d.C
+       $(CHARMC) -c -g matmul3d.C
index c735cdb7fb4ca465bf5a3c945b497527d702de60..3eb87c13d24e8b4850eb8484dbdb6b0a4cd8c140 100644 (file)
@@ -94,7 +94,6 @@ Main::Main(CkArgMsg* m) {
 
   // Start the computation
   numIterations = 0;
-  doneCount = 0;
   startTime = CmiWallTimer();
 #if USE_CKDIRECT
   compute.setupChannels();
@@ -104,8 +103,6 @@ Main::Main(CkArgMsg* m) {
 }
 
 void Main::done() {
-  // doneCount++;
-  // if(doneCount == num_chares) {
   numIterations++;
   if(numIterations == 1) {
     firstTime = CmiWallTimer();
@@ -130,13 +127,9 @@ void Main::done() {
 }
 
 void Main::setupDone() {
-  // doneCount++;
-  // if(doneCount == num_chares) {
-    setupTime = CmiWallTimer();
-    CkPrintf("SETUP TIME %f secs\n", setupTime - startTime);
-    doneCount = 0;
-    compute.beginCopying();
-  // }
+  setupTime = CmiWallTimer();
+  CkPrintf("SETUP TIME %f secs\n", setupTime - startTime);
+  compute.beginCopying();
 }
 
 // Constructor, initialize values
@@ -172,7 +165,7 @@ Compute::Compute() {
     for(int k=0; k<blockDimZ; k++) {
       C[i*blockDimZ + k] = 0.0;
 #if USE_CKDIRECT
-      C[i*blockDimZ + k] = 0.0;
+      tmpC[i*blockDimZ + k] = 0.0;
 #endif
     }
 
@@ -180,6 +173,7 @@ Compute::Compute() {
   countA = 0;
   countB = 0;
   countC = 0;
+  numIterations = 0;
 
 #if USE_CKDIRECT
   sHandles = new infiDirectUserHandle[num_chare_x + num_chare_y + num_chare_z];
@@ -215,7 +209,7 @@ void Compute::resetArrays() {
        tmp = (float)drand48();
       
       A[i*blockDimY + j] = tmp;
-  }
+    }
 
   for(int j=0; j<blockDimY; j++)
     for(int k=0; k<blockDimZ; k++) {
@@ -224,16 +218,16 @@ void Compute::resetArrays() {
        tmp = (float)drand48();
       
       B[j*blockDimZ + k] = tmp;
-  }
+    }
 
   for(int i=0; i<blockDimX; i++)
     for(int k=0; k<blockDimZ; k++) {
       C[i*blockDimZ + k] = 0.0;
 #if USE_CKDIRECT
-      C[i*blockDimZ + k] = 0.0;
+      tmpC[i*blockDimZ + k] = 0.0;
 #endif
     }
-
+  
   sendA();
   sendB();
 }
@@ -313,7 +307,7 @@ void Compute::receiveA(int indexZ, float *data, int size) {
     for(int j=0; j<blockDimY; j++)
       A[indexZ*subBlockDimXz*blockDimY + i*blockDimY + j] = data[i*blockDimY + j];
   countA++;
-  if(countA == num_chare_z-1)
+  if(countA == num_chare_z-1 && countB == num_chare_x-1)
     doWork();
 }
 
@@ -322,7 +316,7 @@ void Compute::receiveB(int indexX, float *data, int size) {
     for(int k=0; k<blockDimZ; k++)
       B[indexX*subBlockDimYx*blockDimZ + j*blockDimZ + k] = data[j*blockDimZ + k];
   countB++;
-  if(countB == num_chare_x-1)
+  if(countA == num_chare_z-1 && countB == num_chare_x-1)
     doWork();
 }
 
@@ -397,6 +391,12 @@ void Compute::receiveC() {
     if(k != indexZ)
       CkDirect_ready(&rHandles[num_chare_x + num_chare_y + k]);
 
+  // counters to keep track of how many messages have been received
+  countA = 0;
+  countB = 0;
+  countC = 0;
+
+  numIterations++;
   contribute(0, 0, CkReduction::concat, CkCallback(CkIndex_Main::done(), mainProxy));
   // mainProxy.done();
 }
@@ -476,7 +476,9 @@ void Compute::recvHandle(infiDirectUserHandle shdl, int index, int arr) {
   }
 
   if(countA == num_chare_z-1 && countB == num_chare_x-1 && countC == num_chare_y-1) {
-    countA = countB = countC = 0;
+    countA = 0;
+    countB = 0;
+    countC = 0;
     contribute(0, 0, CkReduction::concat, CkCallback(CkIndex_Main::setupDone(), mainProxy));
     // mainProxy.setupDone();
   }
@@ -486,14 +488,14 @@ void Compute::recvHandle(infiDirectUserHandle shdl, int index, int arr) {
 void Compute::callBackRcvdA(void *arg) {
   Compute *obj = (Compute *)arg;
   obj->countA++;
-  if(obj->countA == num_chare_z-1)
+  if(obj->countA == num_chare_z-1 && obj->countB == num_chare_x-1)
     obj->thisProxy(obj->thisIndex.x, obj->thisIndex.y, obj->thisIndex.z).doWork();
 }
 
 void Compute::callBackRcvdB(void *arg) {
   Compute *obj = (Compute *)arg;
   obj->countB++;
-  if(obj->countB == num_chare_x-1)
+  if(obj->countA == num_chare_z-1 && obj->countB == num_chare_x-1)
     obj->thisProxy(obj->thisIndex.x, obj->thisIndex.y, obj->thisIndex.z).doWork();
 }
 
index 8385c1034d7212749a1c40f772c80c9ba356637c..aeba11337944515bd402ddb702be0b3fb925759d 100644 (file)
@@ -51,13 +51,12 @@ int myrand(int numpes) {
 
 #define USE_CKDIRECT   0
 
-#define OOB            -1111111111.0
+#define OOB            -111111111111.0
 
 #define NUM_ITER       101
 
 #define MAX_LIMIT      9999999999.0
 
-int numIterations;
 double startTime;
 double setupTime;
 double firstTime;
@@ -68,7 +67,7 @@ double endTime;
  */
 class Main : public CBase_Main {
   public:
-    int doneCount;
+    int numIterations;
 
     Main(CkArgMsg* m);
     void done();
@@ -84,6 +83,7 @@ class Compute: public CBase_Compute {
     int countA, countB, countC;
     infiDirectUserHandle *sHandles;
     infiDirectUserHandle *rHandles;
+    int numIterations;
     
     Compute();
     Compute(CkMigrateMessage* m);