first versions
authorLaxmikant Kale <kale@illinois.edu>
Fri, 7 Apr 2006 16:05:50 +0000 (16:05 +0000)
committerLaxmikant Kale <kale@illinois.edu>
Fri, 7 Apr 2006 16:05:50 +0000 (16:05 +0000)
examples/charm++/fib/pgm.C [new file with mode: 0644]
examples/charm++/fib/pgm.ci [new file with mode: 0644]
examples/charm++/fib/pgm.h [new file with mode: 0644]

diff --git a/examples/charm++/fib/pgm.C b/examples/charm++/fib/pgm.C
new file mode 100644 (file)
index 0000000..37e49f9
--- /dev/null
@@ -0,0 +1,47 @@
+#include "pgm.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();
+  }
+  else parent.response(result);
+  delete this; /*this chare has no more work to do.*/ 
+}
+
+#include "pgm.def.h"
diff --git a/examples/charm++/fib/pgm.ci b/examples/charm++/fib/pgm.ci
new file mode 100644 (file)
index 0000000..a34a868
--- /dev/null
@@ -0,0 +1,14 @@
+mainmodule pgm {
+
+mainchare main
+{
+  entry main();
+};
+
+chare fib
+{
+  entry fib(int amIroot, int n, CProxy_fib parent);
+  entry void response(int value);
+};
+
+};
diff --git a/examples/charm++/fib/pgm.h b/examples/charm++/fib/pgm.h
new file mode 100644 (file)
index 0000000..3db4313
--- /dev/null
@@ -0,0 +1,21 @@
+#include "pgm.decl.h"
+
+class main : public Chare
+{
+public:
+  main(CkMigrateMessage *m) {}
+  main(CkArgMsg *m);
+};
+
+class fib : public Chare 
+{
+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();
+};
+