charm examples: cleanup and rewrite fib example
authorJonathan Lifflander <avunda@166.1.168.192.in-addr.arpa>
Thu, 13 Sep 2012 04:03:31 +0000 (23:03 -0500)
committerJonathan Lifflander <avunda@166.1.168.192.in-addr.arpa>
Thu, 13 Sep 2012 04:04:40 +0000 (23:04 -0500)
examples/charm++/fib/fib.cc
examples/charm++/fib/fib.ci
examples/charm++/fib/fib.h [deleted file]

index a483151a2ff856ff33155c6572d6bcd1c2dd7a63..4ba3a0e944cd46c1a638e2171364e3ba27e78af4 100644 (file)
@@ -1,50 +1,34 @@
-#include "fib.h"
-#define THRESHOLD 10
-
-main::main(CkArgMsg * m)
-{ 
-    if(m->argc < 2) CmiAbort("./pgm N.");
-    int n = atoi(m->argv[1]); 
-    CProxy_fib::ckNew(1, n, thishandle); 
-}
-
-int seqFib(int n) {
-    if (n<2) return n;
-    else return (seqFib(n-1) + seqFib(n-2));
-}
-
-fib::fib(int AmIRoot, int n, CProxy_fib parent){ 
-    CkPrintf("in fib::fib. n=%d\n", n);
-    IamRoot = AmIRoot;
-    this->parent = parent;
-    if (n< THRESHOLD) {
-        result =seqFib(n);
-        processResult();
-    } else {
-        CProxy_fib::ckNew(0,n-1, thishandle); 
-        CProxy_fib::ckNew(0,n-2, thishandle); 
-        result = 0;
-        count = 2;
-    }
-}
-
-void fib::response(int fibValue) {
-    result += fibValue;
-    if (--count == 0)
-        processResult();
-}
-
-void fib::processResult()
-{
-    CkPrintf("result:%d\n", result);
-    if (IamRoot) {
-        CkPrintf("The requested Fibonacci number is : %d\n", result);
-        CkExit();
+#include "fib.decl.h"
+
+#define THRESHOLD 3
+
+struct Main : public CBase_Main {
+  Main(CkArgMsg* m) { CProxy_Fib::ckNew(atoi(m->argv[1]), true, CProxy_Fib()); }
+};
+
+struct Fib : public CBase_Fib {
+  Fib_SDAG_CODE
+
+  CProxy_Fib parent; bool isRoot;
+
+  Fib(int n, bool isRoot_, CProxy_Fib parent_)
+    : parent(parent_), isRoot(isRoot_) {
+    __sdag_init();
+    calc(n);
+  }
+
+  int seqFib(int n) { return (n < 2) ? n : seqFib(n - 1) + seqFib(n - 2); }
+
+  void respond(int val) {
+    if (!isRoot) {
+      parent.response(val);
+      delete this;
     } else {
     } else {
-        parent.response(result);
+      CkPrintf("Fibonacci number is: %d\n", val);
+      CkExit();
     }
     }
-    delete this; /*this chare has no more work to do.*/ 
-}
+  }
+};
 
 #include "fib.def.h"
 
 
 #include "fib.def.h"
 
index 2b300147bd555a45d166e328185bfb8c631ce8db..a3e0b07abd23101ef7964fc75a597f51441b4cba 100644 (file)
@@ -1,10 +1,22 @@
 mainmodule fib {
 mainmodule fib {
-    mainchare main {
-        entry main(CkArgMsg* m);
-    };
+  mainchare Main {
+    entry Main(CkArgMsg* m);
+  };
 
 
-    chare fib {
-        entry fib(int amIroot, int n, CProxy_fib parent);
-        entry void response(int value);
+  chare Fib {
+    entry Fib(int n, bool isRoot, CProxy_Fib parent);
+    entry void calc(int n) {
+      if (n < THRESHOLD) atomic { respond(seqFib(n)); }
+      else {
+        atomic {
+          CProxy_Fib::ckNew(n - 1, false, thisProxy);
+          CProxy_Fib::ckNew(n - 2, false, thisProxy);
+        }
+        when response(int val)
+          when response(int val2)
+            atomic { respond(val + val2); }
+      }
     };
     };
+    entry void response(int val);
+  };
 };
 };
diff --git a/examples/charm++/fib/fib.h b/examples/charm++/fib/fib.h
deleted file mode 100644 (file)
index d867e83..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#include "fib.decl.h"
-
-class main : public CBase_main
-{
-    public:
-        main(CkMigrateMessage *m) {}
-        main(CkArgMsg *m);
-};
-
-class fib : public CBase_fib
-{
-    private:
-        int result, count, IamRoot;
-        CProxy_fib parent;
-    public:
-        fib(CkMigrateMessage *m) {}
-        fib(int amIRoot, int n, CProxy_fib parent);
-        void response(int fibValue);
-        void processResult();
-};
-