--- jsr166/src/test/loops/FJJacobi.java 2009/10/23 19:57:06 1.1 +++ jsr166/src/test/loops/FJJacobi.java 2010/09/19 12:55:36 1.6 @@ -7,7 +7,6 @@ // Jacobi iteration on a mesh. Based loosely on a Filaments demo import java.util.concurrent.*; -//import jsr166y.*; public class FJJacobi { @@ -47,21 +46,24 @@ public class FJJacobi { double[][] a = new double[dim][dim]; double[][] b = new double[dim][dim]; // Initialize interiors to small value - double smallVal = 1.0/dim; + double smallVal = EPSILON; // 1.0/dim; for (int i = 1; i < dim-1; ++i) { for (int j = 1; j < dim-1; ++j) a[i][j] = smallVal; } - - int nreps = 3; + // Fill all edges with 1's. + for (int k = 0; k < dim; ++k) { + a[k][0] = 1.0; + a[k][n+1] = 1.0; + a[0][k] = 1.0; + a[n+1][k] = 1.0; + b[k][0] = 1.0; + b[k][n+1] = 1.0; + b[0][k] = 1.0; + b[n+1][k] = 1.0; + } + int nreps = 10; for (int rep = 0; rep < nreps; ++rep) { - // Fill all edges with 1's. - for (int k = 0; k < dim; ++k) { - a[k][0] += 1.0; - a[k][n+1] += 1.0; - a[0][k] += 1.0; - a[n+1][k] += 1.0; - } Driver driver = new Driver(a, b, 1, n, 1, n, steps, granularity); long startTime = System.currentTimeMillis(); @@ -71,7 +73,6 @@ public class FJJacobi { double secs = ((double)time) / 1000.0; System.out.println("Compute Time: " + secs); - System.out.println("Workers: " + fjp.getPoolSize()); System.out.println(fjp); } } @@ -88,8 +89,7 @@ public class FJJacobi { if (tryUnfork()) compute(); else { - // quietlyJoin(); - quietlyHelpJoin(); + quietlyJoin(); reinitialize(); } double m = maxDiff; @@ -129,7 +129,7 @@ public class FJJacobi { double v = 0.25 * (a[i-1][j] + a[i][j-1] + a[i+1][j] + a[i][j+1]); b[i][j] = v; - + double diff = v - a[i][j]; if (diff < 0) diff = -diff; if (diff > md) md = diff;