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

Comparing jsr166/src/test/loops/TorusSpanningTree.java (file contents):
Revision 1.5 by jsr166, Wed Sep 1 07:20:36 2010 UTC vs.
Revision 1.6 by dl, Sun Sep 19 12:55:37 2010 UTC

# Line 46 | Line 46 | public class TorusSpanningTree {
46                            MIN_SIDE, MAX_SIDE, SIDE_STEP);
47          ForkJoinPool pool = new ForkJoinPool(procs);
48  
49 +        boolean checked = false;
50          for (int side = MIN_SIDE; side <= MAX_SIDE; side += SIDE_STEP) {
51              int n = side * side;
52              Node[] graph = makeGraph(side);
# Line 56 | Line 57 | public class TorusSpanningTree {
57                  pool.invoke(new Driver(root));
58                  long elapsed = System.nanoTime() - start;
59                  double nanosPerEdge = (double) elapsed / (4 * n);
60 <                System.out.printf(" %7.2f", nanosPerEdge);
61 <                if (j == 0)
60 >                System.out.printf(" %7.2f", nanosPerEdge);
61 >                if (!checked) {
62 >                    checked = true;
63                      checkSpanningTree(graph, root);
64 <                resetAll(graph);
64 >                }
65 >                pool.invoke(new Resetter(graph, 0, graph.length));
66              }
67              System.out.println();
68          }
69 +        System.out.println(pool);
70          pool.shutdown();
71      }
72  
# Line 213 | Line 217 | public class TorusSpanningTree {
217          }
218      }
219  
220 +    static final class Resetter extends RecursiveAction {
221 +        final Node[] g;
222 +        final int lo, hi;
223 +        Resetter(Node[] g, int lo, int hi) {
224 +            this.g = g; this.lo = lo; this.hi = hi;
225 +        }
226 +        public void compute() {
227 +            int mid = (lo + hi) >>> 1;
228 +            if (mid == lo || getSurplusQueuedTaskCount() > 3) {
229 +                for (int i = lo; i < hi; ++i)
230 +                    g[i].reset();
231 +            }
232 +            else
233 +                invokeAll(new Resetter(g, lo, mid), new Resetter(g, mid, hi));
234 +        }
235 +    }
236   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines