ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/jsr166/jsr166/src/test/loops/DynamicLeftSpineFib.java
(Generate patch)

Comparing jsr166/src/test/loops/DynamicLeftSpineFib.java (file contents):
Revision 1.16 by jsr166, Thu Jan 15 18:34:19 2015 UTC vs.
Revision 1.17 by dl, Sat Sep 12 18:26:21 2015 UTC

# Line 26 | Line 26 | public final class DynamicLeftSpineFib e
26          }
27  
28          for (int reps = 0; reps < 2; ++reps) {
29 <            ForkJoinPool g = (procs == 0) ? new ForkJoinPool() :
29 >            ForkJoinPool g = (procs == 0) ? ForkJoinPool.commonPool() :
30                  new ForkJoinPool(procs);
31              lastStealCount = g.getStealCount();
32              for (int i = 0; i < 20; ++i) {
33                  test(g, num);
34              }
35              System.out.println(g);
36 <            g.shutdown();
37 <            if (!g.awaitTermination(10, TimeUnit.SECONDS))
38 <                throw new Error();
36 >            if (g != ForkJoinPool.commonPool()) {
37 >                g.shutdown();
38 >                if (!g.awaitTermination(10, TimeUnit.SECONDS))
39 >                    throw new Error();
40 >            }
41              Thread.sleep(1000);
42          }
43      }
# Line 69 | Line 71 | public final class DynamicLeftSpineFib e
71      int getAnswer() {
72          return number;
73      }
74 +
75      public void compute() {
76          number = fib(number);
77      }
# Line 80 | Line 83 | public final class DynamicLeftSpineFib e
83          DynamicLeftSpineFib rt = null;
84          while (getSurplusQueuedTaskCount() <= 3) {
85              int m = n - 2;
86 <            n -= 1;
84 <            if (m <= 1) {
86 >            if (m <= 1)
87                  r += m;
88 <                if (n > 1) {
89 <                    r += n - 2;
90 <                    n -= 1;
89 <                }
88 >            else
89 >                (rt = new DynamicLeftSpineFib(m, rt)).fork();
90 >            if (--n <= 1)
91                  break;
91            }
92            (rt = new DynamicLeftSpineFib(m, rt)).fork();
92          }
93 <        if (n <= 1)
95 <            r += n;
96 <        else
97 <            r += seqFib(n - 2) + fib(n - 1);
93 >        r += n <= 1 ? n : seqFib(n);
94          if (rt != null)
95              r += collectRights(rt);
96          return r;
97      }
98  
99 +
100      static final int collectRights(DynamicLeftSpineFib rt) {
101          int r = 0;
102          while (rt != null) {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines