Index: Doof2d-Array-distributed.cpp =================================================================== RCS file: /home/pooma/Repository/r2/examples/Manual/Doof2d/Doof2d-Array-distributed.cpp,v retrieving revision 1.1 diff -c -p -r1.1 Doof2d-Array-distributed.cpp *** Doof2d-Array-distributed.cpp 2001/12/04 00:07:00 1.1 --- Doof2d-Array-distributed.cpp 2001/12/11 19:01:38 *************** *** 1,4 **** - #include // has std::cout, ... #include // has EXIT_SUCCESS #include "Pooma/Arrays.h" // has Pooma's Array --- 1,3 ---- *************** public: *** 30,36 **** private: ! // In the average, weight element with this value. const double weight; }; --- 29,35 ---- private: ! // In the average, weight elements with this value. const double weight; }; *************** int main(int argc, char *argv[]) *** 38,60 **** { // Prepare the Pooma library for execution. Pooma::initialize(argc,argv); ! ! // Ask the user for the number of processors. long nuProcessors; ! std::cout << "Please enter the number of processors: "; ! std::cin >> nuProcessors; ! // Ask the user for the number of averagings. long nuAveragings, nuIterations; ! std::cout << "Please enter the number of averagings: "; ! std::cin >> nuAveragings; nuIterations = (nuAveragings+1)/2; // Each iteration performs two averagings. // Ask the user for the number n of elements along one dimension of // the grid. long n; ! std::cout << "Please enter the array size: "; ! std::cin >> n; // Specify the arrays' domains [0,n) x [0,n). Interval<1> N(0, n-1); --- 37,73 ---- { // Prepare the Pooma library for execution. Pooma::initialize(argc,argv); ! ! // Since multiple copies of this program may simultaneously run, we ! // canot use standard input and output. Instead we use command-line ! // arguments, which are replicated, for input, and we use an Inform ! // stream for output. ! Inform output; ! ! // Read the program input from the command-line arguments. ! if (argc != 4) { ! // Incorrect number of command-line arguments. ! output << argv[0] << ": number-of-processors number-of-averagings number-of-values" << std::endl; ! return EXIT_FAILURE; ! } ! char *tail; ! ! // Determine the number of processors. long nuProcessors; ! nuProcessors = strtol(argv[1], &tail, 0); ! // Determine the number of averagings. long nuAveragings, nuIterations; ! nuAveragings = strtol(argv[2], &tail, 0); nuIterations = (nuAveragings+1)/2; // Each iteration performs two averagings. // Ask the user for the number n of elements along one dimension of // the grid. long n; ! n = strtol(argv[3], &tail, 0); ! // The dimension must be a multiple of the number of processors ! // since we are using a UniformGridLayout. ! n = ((n+nuProcessors-1) / nuProcessors) * nuProcessors; // Specify the arrays' domains [0,n) x [0,n). Interval<1> N(0, n-1); *************** int main(int argc, char *argv[]) *** 85,90 **** --- 98,105 ---- // Set up the initial conditions. // All grid values should be zero except for the central value. a = b = 0.0; + // Ensure all data-parallel computation finishes before accessing a value. + Pooma::blockAndEvaluate(); b(n/2,n/2) = 1000.0; // Create the stencil performing the computation. *************** int main(int argc, char *argv[]) *** 101,107 **** // Print out the final central value. Pooma::blockAndEvaluate(); // Ensure all computation has finished. ! std::cout << (nuAveragings % 2 ? a(n/2,n/2) : b(n/2,n/2)) << std::endl; // The arrays are automatically deallocated. --- 116,122 ---- // Print out the final central value. Pooma::blockAndEvaluate(); // Ensure all computation has finished. ! output << (nuAveragings % 2 ? a(n/2,n/2) : b(n/2,n/2)) << std::endl; // The arrays are automatically deallocated. Index: Doof2d-Array-element.cpp =================================================================== RCS file: /home/pooma/Repository/r2/examples/Manual/Doof2d/Doof2d-Array-element.cpp,v retrieving revision 1.1 diff -c -p -r1.1 Doof2d-Array-element.cpp *** Doof2d-Array-element.cpp 2001/12/04 00:07:00 1.1 --- Doof2d-Array-element.cpp 2001/12/11 19:01:38 *************** int main(int argc, char *argv[]) *** 33,42 **** // Set up the initial conditions. // All grid values should be zero except for the central value. ! a = b = 0.0; b(n/2,n/2) = 1000.0; ! // In the average, weight element with this value. const double weight = 1.0/9.0; // Perform the simulation. --- 33,44 ---- // Set up the initial conditions. // All grid values should be zero except for the central value. ! for (int j = 1; j < n-1; j++) ! for (int i = 1; i < n-1; i++) ! a(i,j) = b(i,j) = 0.0; b(n/2,n/2) = 1000.0; ! // In the average, weight elements with this value. const double weight = 1.0/9.0; // Perform the simulation. *************** int main(int argc, char *argv[]) *** 59,65 **** } // Print out the final central value. - Pooma::blockAndEvaluate(); // Ensure all computation has finished. std::cout << (nuAveragings % 2 ? a(n/2,n/2) : b(n/2,n/2)) << std::endl; // The arrays are automatically deallocated. --- 61,66 ---- Index: Doof2d-Array-parallel.cpp =================================================================== RCS file: /home/pooma/Repository/r2/examples/Manual/Doof2d/Doof2d-Array-parallel.cpp,v retrieving revision 1.1 diff -c -p -r1.1 Doof2d-Array-parallel.cpp *** Doof2d-Array-parallel.cpp 2001/12/04 00:07:00 1.1 --- Doof2d-Array-parallel.cpp 2001/12/11 19:01:38 *************** int main(int argc, char *argv[]) *** 38,46 **** // Set up the initial conditions. // All grid values should be zero except for the central value. a = b = 0.0; b(n/2,n/2) = 1000.0; ! // In the average, weight element with this value. const double weight = 1.0/9.0; // Perform the simulation. --- 38,48 ---- // Set up the initial conditions. // All grid values should be zero except for the central value. a = b = 0.0; + // Ensure all data-parallel computation finishes before accessing a value. + Pooma::blockAndEvaluate(); b(n/2,n/2) = 1000.0; ! // In the average, weight elements with this value. const double weight = 1.0/9.0; // Perform the simulation. Index: Doof2d-Array-stencil.cpp =================================================================== RCS file: /home/pooma/Repository/r2/examples/Manual/Doof2d/Doof2d-Array-stencil.cpp,v retrieving revision 1.1 diff -c -p -r1.1 Doof2d-Array-stencil.cpp *** Doof2d-Array-stencil.cpp 2001/12/04 00:07:00 1.1 --- Doof2d-Array-stencil.cpp 2001/12/11 19:01:38 *************** public: *** 30,36 **** private: ! // In the average, weight element with this value. const double weight; }; --- 30,36 ---- private: ! // In the average, weight elements with this value. const double weight; }; *************** int main(int argc, char *argv[]) *** 68,73 **** --- 68,75 ---- // Set up the initial conditions. // All grid values should be zero except for the central value. a = b = 0.0; + // Ensure all data-parallel computation finishes before accessing a value. + Pooma::blockAndEvaluate(); b(n/2,n/2) = 1000.0; // Create the stencil performing the computation. Index: Doof2d-C-element.cpp =================================================================== RCS file: /home/pooma/Repository/r2/examples/Manual/Doof2d/Doof2d-C-element.cpp,v retrieving revision 1.1 diff -c -p -r1.1 Doof2d-C-element.cpp *** Doof2d-C-element.cpp 2001/12/04 00:07:00 1.1 --- Doof2d-C-element.cpp 2001/12/11 19:01:38 *************** int main() *** 37,43 **** a[i][j] = b[i][j] = 0.0; b[n/2][n/2] = 1000.0; ! // In the average, weight element with this value. const double weight = 1.0/9.0; // Perform the simulation. --- 37,43 ---- a[i][j] = b[i][j] = 0.0; b[n/2][n/2] = 1000.0; ! // In the average, weight elements with this value. const double weight = 1.0/9.0; // Perform the simulation. Index: Doof2d-Field-distributed.cpp =================================================================== RCS file: /home/pooma/Repository/r2/examples/Manual/Doof2d/Doof2d-Field-distributed.cpp,v retrieving revision 1.1 diff -c -p -r1.1 Doof2d-Field-distributed.cpp *** Doof2d-Field-distributed.cpp 2001/12/04 00:07:00 1.1 --- Doof2d-Field-distributed.cpp 2001/12/11 19:01:38 *************** *** 1,4 **** - #include // has std::cout, ... #include // has EXIT_SUCCESS #include "Pooma/Fields.h" // has Pooma's Field --- 1,3 ---- *************** int main(int argc, char *argv[]) *** 9,28 **** // Prepare the Pooma library for execution. Pooma::initialize(argc,argv); ! // nuIterations is the number of simulation iterations. ! const int nuIterations = 10/2; ! ! // In the average, weight element with this value. ! const double weight = 1.0/9.0; ! // nuProcessors is the number of processors along one dimension. ! const int nuProcessors = 2; // Ask the user for the number n of elements along one dimension of // the grid. long n; ! std::cout << "Please enter the array size: "; ! std::cin >> n; // Specify the fields' domains [0,n) x [0,n). Interval<1> N(0, n-1); --- 8,43 ---- // Prepare the Pooma library for execution. Pooma::initialize(argc,argv); ! // Since multiple copies of this program may simultaneously run, we ! // canot use standard input and output. Instead we use command-line ! // arguments, which are replicated, for input, and we use an Inform ! // stream for output. ! Inform output; ! ! // Read the program input from the command-line arguments. ! if (argc != 4) { ! // Incorrect number of command-line arguments. ! output << argv[0] << ": number-of-processors number-of-averagings number-of-values" << std::endl; ! return EXIT_FAILURE; ! } ! char *tail; ! // Determine the number of processors. ! long nuProcessors; ! nuProcessors = strtol(argv[1], &tail, 0); ! ! // Determine the number of averagings. ! long nuAveragings, nuIterations; ! nuAveragings = strtol(argv[2], &tail, 0); ! nuIterations = (nuAveragings+1)/2; // Each iteration performs two averagings. // Ask the user for the number n of elements along one dimension of // the grid. long n; ! n = strtol(argv[3], &tail, 0); ! // The dimension must be a multiple of the number of processors ! // since we are using a UniformGridLayout. ! n = ((n+nuProcessors-1) / nuProcessors) * nuProcessors; // Specify the fields' domains [0,n) x [0,n). Interval<1> N(0, n-1); *************** int main(int argc, char *argv[]) *** 59,66 **** --- 74,86 ---- // Set up the initial conditions. // All grid values should be zero except for the central value. a = b = 0.0; + // Ensure all data-parallel computation finishes before accessing a value. + Pooma::blockAndEvaluate(); b(n/2,n/2) = 1000.0; + // In the average, weight elements with this value. + const double weight = 1.0/9.0; + // Perform the simulation. for (int k = 0; k < nuIterations; ++k) { // Read from b. Write to a. *************** int main(int argc, char *argv[]) *** 77,83 **** } // Print out the final central value. ! std::cout << b(n/2,n/2) << std::endl; // The fields are automatically deallocated. --- 97,104 ---- } // Print out the final central value. ! Pooma::blockAndEvaluate(); // Ensure all computation has finished. ! output << (nuAveragings % 2 ? a(n/2,n/2) : b(n/2,n/2)) << std::endl; // The fields are automatically deallocated. Index: Doof2d-Field-parallel.cpp =================================================================== RCS file: /home/pooma/Repository/r2/examples/Manual/Doof2d/Doof2d-Field-parallel.cpp,v retrieving revision 1.1 diff -c -p -r1.1 Doof2d-Field-parallel.cpp *** Doof2d-Field-parallel.cpp 2001/12/04 00:07:00 1.1 --- Doof2d-Field-parallel.cpp 2001/12/11 19:01:38 *************** int main(int argc, char *argv[]) *** 9,24 **** // Prepare the Pooma library for execution. Pooma::initialize(argc,argv); ! // nuIterations is the number of simulation iterations. ! const int nuIterations = 10/2; - // In the average, weight element with this value. - const double weight = 1.0/9.0; - // Ask the user for the number n of elements along one dimension of // the grid. long n; ! std::cout << "Please enter the array size: "; std::cin >> n; // Specify the fields' domains [0,n) x [0,n). --- 9,24 ---- // Prepare the Pooma library for execution. Pooma::initialize(argc,argv); ! // Ask the user for the number of averagings. ! long nuAveragings, nuIterations; ! std::cout << "Please enter the number of averagings: "; ! std::cin >> nuAveragings; ! nuIterations = (nuAveragings+1)/2; // Each iteration performs two averagings. // Ask the user for the number n of elements along one dimension of // the grid. long n; ! std::cout << "Please enter the field size: "; std::cin >> n; // Specify the fields' domains [0,n) x [0,n). *************** int main(int argc, char *argv[]) *** 44,51 **** --- 44,56 ---- // Set up the initial conditions. // All grid values should be zero except for the central value. a = b = 0.0; + // Ensure all data-parallel computation finishes before accessing a value. + Pooma::blockAndEvaluate(); b(n/2,n/2) = 1000.0; + // In the average, weight elements with this value. + const double weight = 1.0/9.0; + // Perform the simulation. for (int k = 0; k < nuIterations; ++k) { // Read from b. Write to a. *************** int main(int argc, char *argv[]) *** 62,68 **** } // Print out the final central value. ! std::cout << b(n/2,n/2) << std::endl; // The fields are automatically deallocated. --- 67,74 ---- } // Print out the final central value. ! Pooma::blockAndEvaluate(); // Ensure all computation has finished. ! std::cout << (nuAveragings % 2 ? a(n/2,n/2) : b(n/2,n/2)) << std::endl; // The fields are automatically deallocated.