### Now using the --size argument in the Heat Equation example

parent d87e74ee
 use BlockDist; config const n = 8;//Size of the domain squired //The format of 'size' is two integers separated with a '*'. //The first integer is the domain size squired and the second integer is //the number of iterations. config const size = "100*10";//Default, 100 by 100 domain and 10 iterations config const epsilon = 1.0e-10;//Stop condition in amount of change config var iterations = 1000;//Stop condition in number of iterations //Parse the --size argument into 'n' and 'iterations' use Regexp; const arg = size.matches(compile("(\\d+)*(\\d+)")); const n = size.substring(arg) : int; const iterations = size.substring(arg) : int; //Initiate a Timer object use Time; var timer : Timer; //Now, let's implement the heat equation! //We will use the Block distribution use BlockDist; //A n+2 by n+2 domain. const Grid = {0..n+1, 0..n+1} dmapped Block({1..n, 1..n}); ... ... @@ -17,8 +32,9 @@ A[..,n+1] = -273.15; //Right column A[n+1,..] = -273.15; //Bottom row A[0,..] = 40.0; //Top row timer.start(); var iter_count = 0; do{ //Since all iterations are independent, we can use 'forall', which allows //the Chapel runtime system to calculate the iterations in parallel forall (i,j) in Interior do//Iterate over all non-border cells ... ... @@ -34,7 +50,12 @@ do{ A[Interior] = T[Interior]; //When 'delta' is smaller than 'epsilon' the calculation has converged iterations -= 1; } while (delta > epsilon && iterations > 0); iter_count += 1; } while (delta > epsilon && iter_count >= iterations); timer.stop(); writeln("Heat Equation (multiple machines) - n: ",n, ", iterations: ", iterations, ", elapsed: ", timer.elapsed(), " seconds");
 config const n = 8;//Size of the domain squired //The format of 'size' is two integers separated with a '*'. //The first integer is the domain size squired and the second integer is //the number of iterations. config const size = "100*10";//Default, 100 by 100 domain and 10 iterations config const epsilon = 1.0e-10;//Stop condition in amount of change config var iterations = 1000;//Stop condition in number of iterations //Parse the --size argument into 'n' and 'iterations' use Regexp; const arg = size.matches(compile("(\\d+)*(\\d+)")); const n = size.substring(arg) : int; const iterations = size.substring(arg) : int; //Initiate a Timer object use Time; var timer : Timer; //Now, let's implement the heat equation! //A n+2 by n+2 domain. const Grid = {0..n+1, 0..n+1}; ... ... @@ -15,8 +29,9 @@ A[..,n+1] = -273.15; //Right column A[n+1,..] = -273.15; //Bottom row A[0,..] = 40.0; //Top row timer.start(); var iter_count = 0; do{ //Since all iterations are independent, we can use 'forall', which allows //the Chapel runtime system to calculate the iterations in parallel for (i,j) in Interior do//Iterate over all non-border cells ... ... @@ -32,7 +47,12 @@ do{ A[Interior] = T[Interior]; //When 'delta' is smaller than 'epsilon' the calculation has converged iterations -= 1; } while (delta > epsilon && iterations > 0); iter_count += 1; } while (delta > epsilon && iter_count >= iterations); timer.stop(); writeln("Heat Equation (sequential) - n: ",n, ", iterations: ", iterations, ", elapsed: ", timer.elapsed(), " seconds");
 config const n = 8;//Size of the domain squired //The format of 'size' is two integers separated with a '*'. //The first integer is the domain size squired and the second integer is //the number of iterations. config const size = "100*10";//Default, 100 by 100 domain and 10 iterations config const epsilon = 1.0e-10;//Stop condition in amount of change config var iterations = 1000;//Stop condition in number of iterations //Parse the --size argument into 'n' and 'iterations' use Regexp; const arg = size.matches(compile("(\\d+)*(\\d+)")); const n = size.substring(arg) : int; const iterations = size.substring(arg) : int; //Initiate a Timer object use Time; var timer : Timer; //Now, let's implement the heat equation! //A n+2 by n+2 domain. const Grid = {0..n+1, 0..n+1}; ... ... @@ -15,8 +29,9 @@ A[..,n+1] = -273.15; //Right column A[n+1,..] = -273.15; //Bottom row A[0,..] = 40.0; //Top row timer.start(); var iter_count = 0; do{ //Since all iterations are independent, we can use 'forall', which allows //the Chapel runtime system to calculate the iterations in parallel forall (i,j) in Interior do//Iterate over all non-border cells ... ... @@ -32,7 +47,12 @@ do{ A[Interior] = T[Interior]; //When 'delta' is smaller than 'epsilon' the calculation has converged iterations -= 1; } while (delta > epsilon && iterations > 0); iter_count += 1; } while (delta > epsilon && iter_count >= iterations); timer.stop(); writeln("Heat Equation (single machine) - n: ",n, ", iterations: ", iterations, ", elapsed: ", timer.elapsed(), " seconds");
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!