Advertisement
gpulover

task2.c

Jun 15th, 2018
709
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.40 KB | None | 0 0
  1. #include <math.h>
  2. #include <string.h>
  3. #include <openacc.h>
  4. #include "timer.h"
  5. #include <stdio.h>
  6.  
  7. #define NN 1024
  8. #define NM 1024
  9.  
  10. float A[NN][NM];
  11. float Anew[NN][NM];
  12.  
  13. int main(int argc, char** argv)
  14. {
  15.     int i,j;
  16.     const int n = NN;
  17.     const int m = NM;
  18.     const int iter_max = 1000;
  19.     const double tol = 1.0e-6;
  20.     double error     = 1.0;
  21.  
  22.     memset(A, 0, n * m * sizeof(float));
  23.     memset(Anew, 0, n * m * sizeof(float));
  24.  
  25.     for (j = 0; j < n; j++)
  26.     {
  27.         A[j][0]    = 1.0;
  28.         Anew[j][0] = 1.0;
  29.     }
  30.  
  31.     printf("Jacobi relaxation Calculation: %d x %d mesh\n", n, m);
  32.  
  33.     StartTimer();
  34.     int iter = 0;
  35.  
  36.     while ( error > tol && iter < iter_max )
  37.     {
  38.         error = 0.0;
  39.  
  40.         for( j = 1; j < n-1; j++)
  41.         {
  42.             for( i = 1; i < m-1; i++ )
  43.             {
  44.                 Anew[j][i] = 0.25 * ( A[j][i+1] + A[j][i-1]
  45.                                 + A[j-1][i] + A[j+1][i]);
  46.                 error = fmax( error, fabs(Anew[j][i] - A[j][i]));
  47.             }
  48.         }
  49.  
  50.         for( j = 1; j < n-1; j++)
  51.         {
  52.             for( i = 1; i < m-1; i++ )
  53.             {
  54.                  A[j][i] = Anew[j][i];    
  55.             }
  56.         }
  57.  
  58.             if(iter % 100 == 0) printf("%5d, %0.6f\n", iter, error);
  59.  
  60.         iter++;
  61.     }
  62.  
  63.     double runtime = GetTimer();
  64.  
  65.     printf(" total: %f s\n", runtime / 1000);
  66.  
  67.     return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement