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.11 by jsr166, Mon Sep 20 20:42:37 2010 UTC vs.
Revision 1.17 by dl, Sat Sep 12 18:26:21 2015 UTC

# Line 1 | Line 1
1 < import java.util.concurrent.*;
1 > /*
2 > * Written by Doug Lea with assistance from members of JCP JSR-166
3 > * Expert Group and released to the public domain, as explained at
4 > * http://creativecommons.org/publicdomain/zero/1.0/
5 > */
6 >
7   import java.util.*;
8 < import java.util.concurrent.TimeUnit;
4 < //import java.util.concurrent.*;
8 > import java.util.concurrent.*;
9  
10   public final class DynamicLeftSpineFib extends RecursiveAction {
11  
# Line 21 | Line 25 | public final class DynamicLeftSpineFib e
25              return;
26          }
27  
24
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 55 | Line 60 | public final class DynamicLeftSpineFib e
60          System.out.println();
61      }
62  
58
63      // Initialized with argument; replaced with result
64      int number;
65      DynamicLeftSpineFib next;
# Line 67 | 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 78 | Line 83 | public final class DynamicLeftSpineFib e
83          DynamicLeftSpineFib rt = null;
84          while (getSurplusQueuedTaskCount() <= 3) {
85              int m = n - 2;
86 <            n -= 1;
82 <            if (m <= 1) {
86 >            if (m <= 1)
87                  r += m;
88 <                if (n > 1) {
89 <                    r += n - 2;
90 <                    n -= 1;
87 <                }
88 >            else
89 >                (rt = new DynamicLeftSpineFib(m, rt)).fork();
90 >            if (--n <= 1)
91                  break;
89            }
90            (rt = new DynamicLeftSpineFib(m, rt)).fork();
92          }
93 <        if (n <= 1)
93 <            r += n;
94 <        else
95 <            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) {
# Line 125 | Line 124 | public final class DynamicLeftSpineFib e
124      }
125  
126   }
128

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines