Example charm++/matmul: simplify logic for when to pass blocks
[charm.git] / examples / charm++ / fib / pgm.C
1 #include "pgm.h"
2 #define THRESHOLD 10
3
4 main::main(CkArgMsg * m)
5
6   if(m->argc < 2) CmiAbort("./pgm N.");
7   int n = atoi(m->argv[1]); 
8   CProxy_fib::ckNew(1, n, thishandle); 
9 }
10
11 int seqFib(int n) {
12   if (n<2) return n;
13   else return (seqFib(n-1) + seqFib(n-2));
14 }
15
16 fib::fib(int AmIRoot, int n, CProxy_fib parent){ 
17   CkPrintf("in fib::fib. n=%d\n", n);
18   IamRoot = AmIRoot;
19   this->parent = parent;
20   if (n< THRESHOLD) {
21     result =seqFib(n);
22     processResult();}
23   else {
24     CProxy_fib::ckNew(0,n-1, thishandle); 
25     CProxy_fib::ckNew(0,n-2, thishandle); 
26     result = 0;
27     count = 2;  }
28 }
29
30 void fib::response(int fibValue) {
31   result += fibValue;
32   if (--count == 0)
33     processResult();
34 }
35
36 void fib::processResult()
37 {
38   CkPrintf("result:%d\n", result);
39   if (IamRoot) {
40     CkPrintf("The requested Fibonacci number is : %d\n", result);
41     CkExit();
42   }
43   else parent.response(result);
44   delete this; /*this chare has no more work to do.*/ 
45 }
46
47 #include "pgm.def.h"