jacobi3d-sdag: this code need not be complicated
authorAbhinav S Bhatele <bhatele@illinois.edu>
Sun, 19 Dec 2010 05:15:11 +0000 (23:15 -0600)
committerAbhinav S Bhatele <bhatele@illinois.edu>
Sun, 19 Dec 2010 05:15:11 +0000 (23:15 -0600)
with user defined mapping

examples/charm++/jacobi3d-sdag/Makefile
examples/charm++/jacobi3d-sdag/jacobi3d.C
examples/charm++/jacobi3d-sdag/jacobi3d.ci

index 090067512b634ce63cfd29e71728cf9c06b3b0ee..f98bc642f59ffab9200686f98dd1b2a2bcf08ee7 100644 (file)
@@ -1,4 +1,4 @@
-OPTS   = -O3 -DUSE_TOPOMAP=0
+OPTS   = -O3
 CHARMC = ../../../bin/charmc $(OPTS)
 
 OBJS = jacobi3d.o
index 2320b74d8b610f623706d531399c3cce249520ca..f1ebc9586a839af2ef4ebbf46d6b7bcfd53a3375 100644 (file)
@@ -2,8 +2,6 @@
  *  Author: Abhinav S Bhatele
  *  Date Created: June 01st, 2009
  *
- *  This does a topological placement for a 3d jacobi.
- *
  *     
  *           *****************
  *        *               *  *
@@ -26,8 +24,6 @@
 #include "jacobi3d.decl.h"
 #include "TopoManager.h"
 
-// See README for documentation
-
 /*readonly*/ CProxy_Main mainProxy;
 /*readonly*/ int arrayDimX;
 /*readonly*/ int arrayDimY;
@@ -56,7 +52,6 @@ int myrand(int numpes) {
 #define wrap_y(a)      (((a)+num_chare_y)%num_chare_y)
 #define wrap_z(a)      (((a)+num_chare_z)%num_chare_z)
 
-//#define USE_3D_ARRAYS                0
 #define index(a, b, c) ( (a)*(blockDimY+2)*(blockDimZ+2) + (b)*(blockDimZ+2) + (c) )
 
 #define MAX_ITER               26
@@ -124,39 +119,7 @@ class Main : public CBase_Main {
       CkPrintf("Block Dimensions: %d %d %d\n", blockDimX, blockDimY, blockDimZ);
 
       // Create new array of worker chares
-#if USE_TOPOMAP
-      CProxy_JacobiMap map = CProxy_JacobiMap::ckNew(num_chare_x, num_chare_y, num_chare_z);
-      CkPrintf("Topology Mapping is being done ... \n");
-      CkArrayOptions opts(num_chare_x, num_chare_y, num_chare_z);
-      opts.setMap(map);
-      array = CProxy_Jacobi::ckNew(opts);
-#else
       array = CProxy_Jacobi::ckNew(num_chare_x, num_chare_y, num_chare_z);
-#endif
-
-      TopoManager tmgr;
-      CkArray *jarr = array.ckLocalBranch();
-      int jmap[num_chare_x][num_chare_y][num_chare_z];
-
-      int hops=0, p;
-      for(int i=0; i<num_chare_x; i++)
-       for(int j=0; j<num_chare_y; j++)
-         for(int k=0; k<num_chare_z; k++) {
-           jmap[i][j][k] = jarr->procNum(CkArrayIndex3D(i, j, k));
-         }
-
-      for(int i=0; i<num_chare_x; i++)
-       for(int j=0; j<num_chare_y; j++)
-         for(int k=0; k<num_chare_z; k++) {
-           p = jmap[i][j][k];
-           hops += tmgr.getHopsBetweenRanks(p, jmap[wrap_x(i+1)][j][k]);
-           hops += tmgr.getHopsBetweenRanks(p, jmap[wrap_x(i-1)][j][k]);
-           hops += tmgr.getHopsBetweenRanks(p, jmap[i][wrap_y(j+1)][k]);
-           hops += tmgr.getHopsBetweenRanks(p, jmap[i][wrap_y(j-1)][k]);
-           hops += tmgr.getHopsBetweenRanks(p, jmap[i][j][wrap_z(k+1)]);
-           hops += tmgr.getHopsBetweenRanks(p, jmap[i][j][wrap_z(k-1)]);
-         }
-      CkPrintf("Total Hops: %d\n", hops);
 
       //Start the computation
       array.doStep();
@@ -393,98 +356,4 @@ class Jacobi: public CBase_Jacobi {
 
 };
 
-/** \class JacobiMap
- *
- */
-
-class JacobiMap : public CkArrayMap {
-  public:
-    int X, Y, Z;
-    int *mapping;
-
-    JacobiMap(int x, int y, int z) {
-      X = x; Y = y; Z = z;
-      mapping = new int[X*Y*Z];
-
-      // we are assuming that the no. of chares in each dimension is a 
-      // multiple of the torus dimension
-
-      TopoManager tmgr;
-      int dimNX, dimNY, dimNZ, dimNT;
-
-      dimNX = tmgr.getDimNX();
-      dimNY = tmgr.getDimNY();
-      dimNZ = tmgr.getDimNZ();
-      dimNT = tmgr.getDimNT();
-
-      // we are assuming that the no. of chares in each dimension is a 
-      // multiple of the torus dimension
-      int numCharesPerPe = X*Y*Z/CkNumPes();
-
-      int numCharesPerPeX = X / dimNX;
-      int numCharesPerPeY = Y / dimNY;
-      int numCharesPerPeZ = Z / dimNZ;
-      int pe = 0, pes = CkNumPes();
-
-#if USE_BLOCK_RNDMAP
-      int used[pes];
-      for(int i=0; i<pes; i++)
-       used[i] = 0;
-#endif
-
-      if(dimNT < 2) {  // one core per node
-       if(CkMyPe()==0) CkPrintf("%d %d %d %d : %d %d %d \n", dimNX, dimNY, dimNZ, dimNT, numCharesPerPeX, numCharesPerPeY, numCharesPerPeZ); 
-       for(int i=0; i<dimNX; i++)
-         for(int j=0; j<dimNY; j++)
-           for(int k=0; k<dimNZ; k++)
-           {
-#if USE_BLOCK_RNDMAP
-             pe = myrand(pes); 
-             while(used[pe]!=0) {
-               pe = myrand(pes); 
-             }
-             used[pe] = 1;
-#endif
-
-             for(int ci=i*numCharesPerPeX; ci<(i+1)*numCharesPerPeX; ci++)
-               for(int cj=j*numCharesPerPeY; cj<(j+1)*numCharesPerPeY; cj++)
-                 for(int ck=k*numCharesPerPeZ; ck<(k+1)*numCharesPerPeZ; ck++) {
-#if USE_TOPOMAP
-                   mapping[ci*Y*Z + cj*Z + ck] = tmgr.coordinatesToRank(i, j, k);
-#elif USE_BLOCK_RNDMAP
-                   mapping[ci*Y*Z + cj*Z + ck] = pe;
-#endif
-                 }
-           }
-      } else {         // multiple cores per node
-       // In this case, we split the chares in the X dimension among the
-       // cores on the same node. The strange thing I figured out is that
-       // doing this in the Z dimension is not as good.
-       numCharesPerPeX /= dimNT;
-       if(CkMyPe()==0) CkPrintf("%d %d %d %d : %d %d %d \n", dimNX, dimNY, dimNZ, dimNT, numCharesPerPeX, numCharesPerPeY, numCharesPerPeZ);
-
-       for(int i=0; i<dimNX; i++)
-         for(int j=0; j<dimNY; j++)
-           for(int k=0; k<dimNZ; k++)
-             for(int l=0; l<dimNT; l++)
-               for(int ci=(dimNT*i+l)*numCharesPerPeX; ci<(dimNT*i+l+1)*numCharesPerPeX; ci++)
-                 for(int cj=j*numCharesPerPeY; cj<(j+1)*numCharesPerPeY; cj++)
-                   for(int ck=k*numCharesPerPeZ; ck<(k+1)*numCharesPerPeZ; ck++) {
-                     mapping[ci*Y*Z + cj*Z + ck] = tmgr.coordinatesToRank(i, j, k, l);
-                   }
-      } // end of if
-
-      if(CkMyPe() == 0) CkPrintf("Map generated ... \n");
-    }
-
-    ~JacobiMap() { 
-      delete [] mapping;
-    }
-
-    int procNum(int, const CkArrayIndex &idx) {
-      int *index = (int *)idx.data();
-      return mapping[index[0]*Y*Z + index[1]*Z + index[2]]; 
-    }
-};
-
 #include "jacobi3d.def.h"
index d42422ef406bd360b8fd3d0bd423a9c113151d83..3c70fe20d059091393bcae7d9bb0d20955caa815 100644 (file)
@@ -44,8 +44,4 @@ mainmodule jacobi3d {
     };
   };
 
-  group JacobiMap : CkArrayMap {
-    entry JacobiMap(int x, int y, int z);
-  };
-
 };