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.4 by dl, Fri Oct 30 14:15:04 2009 UTC vs.
Revision 1.9 by dl, Wed Jul 7 20:32:04 2010 UTC

# Line 4 | Line 4
4   * http://creativecommons.org/licenses/publicdomain
5   */
6  
7 //import jsr166y.*;
7   import java.util.*;
8   import java.util.concurrent.*;
9  
# Line 23 | Line 22 | public final class DynamicLeftSpineFib e
22                  num = Integer.parseInt(args[1]);
23          }
24          catch (Exception e) {
25 <            System.out.println("Usage: java DynamicLeftSpineFib <threads> <number> [<sequentialThreshold>]");
25 >            System.out.println("Usage: java DynamicLeftSpineFib <threads> <number> [<sequntialThreshold>]");
26              return;
27          }
28  
# Line 48 | Line 47 | public final class DynamicLeftSpineFib e
47          long time = System.currentTimeMillis() - start;
48          double secs = ((double)time) / 1000.0;
49          long result = f.getAnswer();
50 <        System.out.print("DynamicLeftSpineFib " + num + " = " + result);
50 >        System.out.print("DLSFib " + num + " = " + result);
51          System.out.printf("\tTime: %7.3f", secs);
52          long sc = g.getStealCount();
53          long ns = sc - lastStealCount;
# Line 74 | Line 73 | public final class DynamicLeftSpineFib e
73      public final void compute() {
74          int n = number;
75          if (n > 1) {
76 +            int r = 0;
77              DynamicLeftSpineFib rt = null;
78 <            while (n > 1 && getSurplusQueuedTaskCount() <= 3) {
79 <                (rt = new DynamicLeftSpineFib(n - 2, rt)).fork();
78 >            while (getSurplusQueuedTaskCount() <= 3) {
79 >                int m = n - 2;
80                  n -= 1;
81 +                if (m <= 1) {
82 +                    r += m;
83 +                    if (n > 1) {
84 +                        r += n - 2;
85 +                        n -= 1;
86 +                    }
87 +                    break;
88 +                }
89 +                (rt = new DynamicLeftSpineFib(m, rt)).fork();
90              }
91 <            int r = seqFib(n);
91 >            r += seqFib(n);
92              while (rt != null) {
93 <                if (rt.tryUnfork()) rt.compute(); else rt.helpJoin();
93 >                if (rt.tryUnfork()) rt.compute(); else rt.join();
94                  r += rt.number;
95                  rt = rt.next;
96              }
# Line 98 | Line 107 | public final class DynamicLeftSpineFib e
107      }
108  
109   }
110 +

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines