Remove need for user code to call __sdag_init() by doing that in generated code
authorPhil Miller <mille121@illinois.edu>
Mon, 16 Apr 2012 18:25:52 +0000 (13:25 -0500)
committerPhil Miller <mille121@illinois.edu>
Sun, 30 Sep 2012 21:43:10 +0000 (16:43 -0500)
26 files changed:
doc/charm++/sdag.tex
examples/bigsim/sdag/jacobi-no-redn/parallelJacobi.C
examples/bigsim/sdag/jacobi3d/jacobi3d.C
examples/charm++/allToAll/allToAll.C
examples/charm++/ckloop/fft-trans/fft1d.C
examples/charm++/fib/fib.cc
examples/charm++/gaussSeidel3D/gaussSeidel3d.C
examples/charm++/hello/sdag/hello.C
examples/charm++/jacobi2d-sdag/jacobi2d.C
examples/charm++/jacobi3d-sdag/jacobi3d.C
examples/charm++/leanmd/Cell.cc
examples/charm++/leanmd/Compute.cc
examples/charm++/leanmd/Main.cc
examples/charm++/load_balancing/stencil3d/stencil3d.C
examples/charm++/manyToMany/manyToMany.C
examples/charm++/matmul/matmul.C
src/langs/sdag/doc/example1/test.h.html
src/libs/ck-libs/completion/completion.C
src/libs/ck-libs/io/ckio.C
src/xlat-i/sdag/CParsedFile.C
src/xlat-i/sdag/CSdagConstruct.C
src/xlat-i/xi-symbol.C
tests/charm++/jacobi3d-sdag/jacobi3d.C
tests/charm++/megatest/completion_test.C
tests/charm++/sdag/migration/test1.C
tests/charm++/sdag/template/pgm.C

index 4f594af429d8441c595a2fb6d18d0d7a73f3a7c9..d369c2092e0d5dd39cf8467a169a3d0c9084b155 100644 (file)
@@ -110,7 +110,6 @@ class ComputeObject : public CBase\_ComputeObject \{
 
 public:
   ComputeObject() \{
-    __sdag_init();
     startStep();
   \}
   void startStep() \{
@@ -128,10 +127,9 @@ public:
 \};
 \end{alltt}
 \end{center}
-Note that chare classes containing SDAG code must make a few additional calls
-in addition to inheriting from their {\tt CBase\_Foo} class: incorporate the
-{\tt Foo\_SDAG\_CODE} generated-code macro in the class, and call {\tt
-  \_\_sdag\_init()} in the class's constructor(s).
+Note that chare classes containing SDAG code must include a few additional declarations
+in addition to inheriting from their {\tt CBase\_Foo} class, by incorporating the
+{\tt Foo\_SDAG\_CODE} generated-code macro in the class.
 
 Atomic blocks can also specify a textual `label' that will appear in traces, as
 follows:
@@ -185,7 +183,6 @@ class ComputeObject : public CBase_ComputeObject \{
 
 public:
   ComputeObject() \{
-    __sdag_init();
     startStep();
   \}
 
@@ -278,7 +275,6 @@ class ComputeObject : public CBase_ComputeObject \{
 
 public:
   ComputeObject() \{
-    __sdag_init();
     runForever();
   \}
 
@@ -318,7 +314,6 @@ class ComputeObject : public CBase_ComputeObject \{
 
 public:
   ComputeObject() \{
-    __sdag_init();
     n = 10;
     runForever();
   \}
@@ -383,7 +378,6 @@ class ComputeObject : public CBase_ComputeObject \{
 
 public:
   ComputeObject() \{
-    __sdag_init();
     startStep();
   \}
 
@@ -421,9 +415,6 @@ If you've added \sdag\ code to your class, you must link in the code by:
      in the .h file.  This macro defines the entry points and support
      code used by \sdag{}.  Forgetting this results in a compile error
      (undefined sdag entry methods referenced from the .def.h file).
-  \item Adding a call to the routine ``\_\_sdag\_init();'' from every constructor,
-     including the migration constructor.  Forgetting this results in
-     using uninitalized data, and a horrible runtime crash.
   \item Adding a call to the pup routine ``\_\_sdag\_pup(p);'' from your pup routine.
      Forgetting this results in failure after migration.
 \end{itemize}
@@ -434,12 +425,9 @@ class Foo : public CBase_Foo \{
 public:
     Foo_SDAG_CODE
     Foo(...) \{
-       __sdag_init();
        ...
     \}
-    Foo(CkMigrateMessage *m) \{
-       __sdag_init();
-    \}
+    Foo(CkMigrateMessage *m) \{ \}
     
     void pup(PUP::er &p) \{
        CBase_Foo::pup(p);
index 415c3352d3c97b83cee7f9a7d6c2574586a2118a..c5e77d42206c7cdb313f6ffef55920dbf70eae11 100644 (file)
@@ -23,7 +23,6 @@ int numFinished;
 Chunk::Chunk(int t, int x, int y){
 
   int xdim,ydim;
-  __sdag_init();
   xdim = x;
   ydim = y;
   total = t; 
index 82e06bad4677174608d90ae3e3008e6a90735076..94ad17c6b0b5149cf7a16feb7daf402808d1150e 100644 (file)
@@ -216,7 +216,6 @@ class Jacobi: public CBase_Jacobi {
 
     // Constructor, initialize values
     Jacobi() {
-      __sdag_init();
 
       int i, j, k;
       // allocate a three dimensional array
index a4234de3895107233dc6161af48732b59299ee11..d6970bb3d97d3684d53755d8c8a4bb9ab0736a35 100644 (file)
@@ -78,7 +78,6 @@ struct allToAll : public CBase_allToAll {
     int recvCnt;
 
        allToAll() {
-                __sdag_init();
         iter = 0;
         recvCnt = 0;
                msgs = new allToAllMsg*[numChares*msgCount];
index a5c71921ee39dd046dad05db5fb2dcdca585436f..6de593a37ea69ab7d7afa4aaa435318f0cad7dd9 100644 (file)
@@ -126,8 +126,6 @@ struct fft : public CBase_fft {
   bool validating;
   int nPerThread;
   fft() {
-    __sdag_init();
-
     validating = false;
 
     n = N*N/numChunks;
index 4ba3a0e944cd46c1a638e2171364e3ba27e78af4..aee316a0c14cff9bf6e54ae26ef607a283c8d672 100644 (file)
@@ -13,7 +13,6 @@ struct Fib : public CBase_Fib {
 
   Fib(int n, bool isRoot_, CProxy_Fib parent_)
     : parent(parent_), isRoot(isRoot_) {
-    __sdag_init();
     calc(n);
   }
 
index d07ef0175a745613c3debf319a077c7db7143674..566756048808ab5781bfe8880f6cf66523753bb7 100644 (file)
@@ -173,7 +173,6 @@ class GaussSeidel: public CBase_GaussSeidel {
 
   // Constructor, initialize values
   GaussSeidel() {
-    __sdag_init();
 
     int i, j, k;
     // allocate a three dimensional array
index 63edafefcbc6761fd9c48d2c06dc185c0ebc4bbd..c0471fc6f0b0f79252c5e5c6dcd50691e669e8b6 100644 (file)
@@ -46,7 +46,6 @@ public:
   int i,sum;
   Hello()
   {
-    __sdag_init();
     sum=0;
     CkPrintf("Hello %d created\n",thisIndex);
   }
index ebf209c36eae37958bba6f17a5d9d6fdd90f39a3..15d28c9eb81980926ea67963f543a7dffc6e53ae 100644 (file)
@@ -52,7 +52,6 @@ public:
   double maxdifference;
   Main_SDAG_CODE;
   Main(CkArgMsg* m) {
-    __sdag_init();
     if ( (m->argc < 3) || (m->argc > 6)) {
       CkPrintf("%s [array_size] [block_size]\n", m->argv[0]);
       CkPrintf("OR %s [array_size] [block_size] maxiterations\n", m->argv[0]);
@@ -136,7 +135,6 @@ class Jacobi: public CBase_Jacobi {
   bool leftBound, rightBound, topBound, bottomBound;
   // Constructor, initialize values
   Jacobi() {
-    __sdag_init();
     usesAtSync=CmiTrue;
 
     int i, j;
@@ -213,7 +211,7 @@ class Jacobi: public CBase_Jacobi {
     p(new_temperature, size);
   }
 
-  Jacobi(CkMigrateMessage* m) {__sdag_init();}
+  Jacobi(CkMigrateMessage* m) { }
 
   ~Jacobi() { 
     delete [] temperature; 
index a4c4b63344f6e048a61d615787c8302518007a0f..500100b68ff8625ecfdc90b11c8f487bac0f4cb0 100644 (file)
@@ -118,8 +118,6 @@ public:
 
   // Constructor, initialize values
   Jacobi() {
-    __sdag_init();
-
     usesAtSync = CmiTrue;
     converged = false;
 
@@ -152,7 +150,7 @@ public:
     p(new_temperature, size);
   }
 
-  Jacobi(CkMigrateMessage* m) {__sdag_init();}
+  Jacobi(CkMigrateMessage* m) { }
 
   ~Jacobi() { 
     delete [] temperature; 
index d04389d2c42f0b185846d9e760d42b8267930018..3cc2e5127ff28c2c1cfd181fe463db21c1ce848a 100644 (file)
@@ -15,7 +15,6 @@ extern /* readonly */ int finalStepCount;
 
 //default constructor
 Cell::Cell() {
-  __sdag_init();
   int i;
   inbrs = NUM_NEIGHBORS;
   //load balancing to be called when AtSync is called
@@ -51,7 +50,6 @@ Cell::Cell() {
 
 //constructor for chare object migration
 Cell::Cell(CkMigrateMessage *msg): CBase_Cell(msg) {
-  __sdag_init();
   usesAtSync = CmiTrue;
   delete msg;
 }  
index 94286da7964aa4a5d6794ba46d1d3e97d992d573..ad26c8e858d3480cefe1c1790da9aa37631ad95a 100644 (file)
@@ -16,13 +16,11 @@ extern /* readonly */ int finalStepCount;
 
 //compute - Default constructor
 Compute::Compute() {
-  __sdag_init();
   stepCount = 1;
   usesAtSync = CmiTrue;
 }
 
 Compute::Compute(CkMigrateMessage *msg): CBase_Compute(msg)  { 
-  __sdag_init();
   usesAtSync = CmiTrue;
   delete msg;
 }
index 54305474ae629dcffbaa9d61e6caf8f5c333f8fa..1f2536fce953f48c0826dc2866198ff1c4856aba 100644 (file)
@@ -17,7 +17,6 @@
 
 // Entry point of Charm++ application
 Main::Main(CkArgMsg* m) {
-   __sdag_init();
   CkPrintf("\nLENNARD JONES MOLECULAR DYNAMICS START UP ...\n");
 
   //set variable values to a default set
@@ -65,7 +64,6 @@ Main::Main(CkArgMsg* m) {
 
 //constructor for chare object migration
 Main::Main(CkMigrateMessage* msg): CBase_Main(msg) { 
-  __sdag_init();
 }
 
 //pup routine incase the main chare moves, pack important information
index d247fbb4e8622dc4f5510630dba11978ef815ee7..1bb135827c80605b7a3f315ca5098485ac2411cb 100644 (file)
@@ -148,7 +148,6 @@ class Stencil: public CBase_Stencil {
 
     // Constructor, initialize values
     Stencil() {
-      __sdag_init();
       usesAtSync = CmiTrue;
 
       int i, j, k;
@@ -182,7 +181,7 @@ class Stencil: public CBase_Stencil {
       p(new_temperature, size);
     }
 
-    Stencil(CkMigrateMessage* m) { __sdag_init(); }
+    Stencil(CkMigrateMessage* m) { }
 
     ~Stencil() { 
       delete [] temperature; 
index 205e7d288d55ee6e1a4cce7a4815a615987e567d..169dfe2a99bc7b160a5d2e2b6c7291316204ed3a 100644 (file)
@@ -71,7 +71,6 @@ struct manyToMany : public CBase_manyToMany {
     int recvCnt;
 
        manyToMany() {
-                __sdag_init();
         iter = 0;
         recvCnt = 0;
                msgs = new manyToManyMsg*[numChares];
index fb3067a6f3711345746617e0d15a8cb63d45e1fc..0971f3cb921caed9700512c2a337626ce152b7f5 100644 (file)
@@ -45,7 +45,6 @@ class Block : public CBase_Block {
   Block(unsigned int blockSize_, unsigned int numBlocks_)
     : blockSize(blockSize_), numBlocks(numBlocks_)
   {
-    __sdag_init();
     unsigned int elems = blockSize * blockSize;
     data = new double[elems];
     for (int i = 0; i < elems; ++i)
index e53d54d623ffcbcd47efb196d0c80ebeaec073ba..987acf2711176f7b7cc40a1207e40035df7551e4 100644 (file)
@@ -27,7 +27,6 @@
 <BR><B><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp; int sum;</FONT></TT></B>
 <BR><B><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp; int j[100];</FONT></TT></B>
 <BR><B><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp; Test(TestMsg *msg) {</FONT></TT></B>
-<BR><B><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <FONT COLOR="#CC0000">__sdag_init();</FONT></FONT></TT></B>
 <BR><B><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sum = 0;</FONT></TT></B>
 <BR><B><TT><FONT SIZE=+1>&nbsp;&nbsp;&nbsp; }</FONT></TT></B>
 <BR><B><TT><FONT SIZE=+1>};</FONT></TT></B>
index df4fcd7a6d4e7d99a74e2dd77638e28ea68adf56..bf469dba2d0dc78fcda09c26983ecee83c6cf831 100644 (file)
@@ -2,7 +2,6 @@
 
 CompletionDetector::CompletionDetector()
 {
-    __sdag_init();
     init();
 }
 
index 274ce5b1b1fe15552dc00001cb11e9f2c86b0db4..441c9e431c1b9d2ded1c6e6b26a9e81f69426518 100644 (file)
@@ -5,7 +5,6 @@
 
 namespace Ck { namespace IO {
     Manager::Manager() : nextToken(0) {
-      __sdag_init();
       run();
     }
 
index 2c76a18d8e8d044f110b9096803951490f675581..aa87b399b6ada4b33b444d295240a86fd8bc5fd2 100644 (file)
@@ -116,10 +116,10 @@ void CParsedFile::generateEntries(XStr& decls, XStr& defs)
 
 void CParsedFile::generateInitFunction(XStr& decls, XStr& defs)
 {
-  decls << "private:\n";
+  decls << "public:\n";
   decls << "  CDep *__cDep;\n";
 
-  XStr name = "__sdag_init";
+  XStr name = "_sdag_init";
   generateSignature(decls, defs, container, false, "void", &name, false, NULL);
   defs << "    __cDep = new CDep(" << numEntries << "," << numWhens << ");\n";
   CEntry *en;
@@ -127,6 +127,11 @@ void CParsedFile::generateInitFunction(XStr& decls, XStr& defs)
     en->generateDeps(defs);
   }
   endMethod(defs);
+
+  // Backwards compatibility
+  XStr oldname = "__sdag_init";
+  generateSignature(decls, defs, container, false, "void", &oldname, false, NULL);
+  endMethod(defs);
 }
 
 
index 5594311b385d206948a610ce1ddedd2612167464..a077206200db4c8b167c18e49f9130256b4f10d8 100644 (file)
@@ -632,7 +632,7 @@ void SdagConstruct::generateWhen(XStr& decls, XStr& defs, Entry* entry)
      defs << "_buf = __cDep->getMessage(" << e->entryPtr->entryNum;
      if (e->intExpr)
        defs << ", " << e->intExpr;
-     defs << "); // SEGFAULT? __cDep = 0x0? Did you call __sdag_init() in your constructor?\n";
+     defs << ");\n";
 
     el = el->next;
   }
index 7835c7bb7f73c76f6f7e9200ea14adaa645994f1..25b42faec18562301479b122f8ac2f9e88885d44 100644 (file)
@@ -4439,6 +4439,10 @@ void Entry::genCall(XStr& str, const XStr &preCall, bool redn_wrapper)
     else {//Normal case: unmarshall parameters (or just pass message)
         str<<"("; param->unmarshall(str); str<<");\n";
     }
+
+    if (isConstructor() && container->hasSdag()) {
+      str << "  impl_obj->_sdag_init();\n";
+    }
   }
 }
 
index d7cfdd20de4b8698bfffe27aba6aecc234b4cdd9..004872bf3428f64d32fd2c0a1e39c9096f82c3bb 100644 (file)
@@ -234,6 +234,8 @@ class Jacobi: public CBase_Jacobi {
 
     // Constructor, initialize values
     Jacobi() {
+      // This call is an anachronism - the need to call __sdag_init() has been
+      // removed. We still call it here to test backward compatibility.
       __sdag_init();
 
       int i, j, k;
@@ -257,9 +259,7 @@ class Jacobi: public CBase_Jacobi {
 
     }
 
-    Jacobi(CkMigrateMessage* m): CBase_Jacobi(m) {
-               __sdag_init();
-       }
+    Jacobi(CkMigrateMessage* m): CBase_Jacobi(m) { }
 
     ~Jacobi() { 
       delete [] temperature; 
index 1c9b0dcee0460d091cba0e66d4f2be692f5fbe0f..2dee0ba0c4a66f834b4f3f208c8317d565ae6d4d 100644 (file)
@@ -12,7 +12,7 @@ void completion_test_moduleinit(void){}
 
 struct completion_tester : public CBase_completion_tester {
     CProxy_CompletionDetector detector;
-    completion_tester() { __sdag_init(); thisProxy.run_test(); }
+    completion_tester() { thisProxy.run_test(); }
 
     completion_tester_SDAG_CODE
 };
index 413e8856e49af4a74914c128cb435559290947f0..afff02a197d0349d2dc63bd59c9023c180297a55 100644 (file)
@@ -39,9 +39,7 @@ class Cell : public CBase_Cell {
 public:
   int val;
 
-  Cell() : val(thisIndex.x * 10 + thisIndex.y) {
-    __sdag_init();
-  }
+  Cell() : val(thisIndex.x * 10 + thisIndex.y) { }
 
   void pup(PUP::er &p) {
     CkPrintf("called PUP for cell %s\n", p.isPacking() ? "packing" : "unpacking or sizing");
@@ -52,7 +50,7 @@ public:
     p | val;
   }
 
-  Cell(CkMigrateMessage *m) {__sdag_init();}
+  Cell(CkMigrateMessage *m) { }
 };
 
 #include "test1.def.h"
index 26b1288a6faf318f96694035f0c4359ffca61c28..ef1debda34b09d799f3fbffb26cde9ae7ead8c3c 100644 (file)
@@ -11,7 +11,6 @@ class main : public CBase_main {
   CProxy_tchare<double> cdouble;
 public:
   main(CkArgMsg *m) {
-    __sdag_init();
     delete m;
     thisProxy.run();
   }
@@ -21,7 +20,7 @@ template <typename T>
 class tchare : public CBase_tchare<T> {
   tchare_SDAG_CODE;
   T val;
-  tchare(T arg) : val(arg) { __sdag_init(); }
+  tchare(T arg) : val(arg) { }
 };
 
 #include "pgm.def.h"