Advertisement
Guest User

Untitled

a guest
Dec 20th, 2014
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.70 KB | None | 0 0
  1. #include <upc_relaxed.h>
  2. #include <stdio.h>
  3. #include <upc.h>
  4. #include<upc_strict.h>
  5.  
  6. #define N 4
  7. #define P 4
  8. #define M 4
  9. #define D N/THREADS
  10.  
  11. shared double a[1*THREADS][N];
  12. shared double x[1*THREADS];
  13. shared double buf[1*THREADS];
  14. shared double b[1*THREADS];
  15. const double tau = .5;
  16. const double epsilon = 1e-6;
  17. double normBsquared;
  18.  
  19. int main(void) {
  20.  
  21.   int i,j;
  22.   double normXSquared = 0.;
  23.  
  24.  
  25. // Arrays initialization   by thread 0
  26.  
  27.     if(MYTHREAD==0) {
  28.             normBsquared = 0;
  29.             printf("Matrix A\n");
  30.                 for(i=0;i<N;i++)
  31.             {
  32.                         for(j=0;j<P;j++)
  33.                 {
  34.                     a[i][j] = i * N +j ;
  35.                     printf("%f\t",a[i][j]);
  36.                     if(j==(N-1))
  37.                         b[j]= 3*(j+1)-1;
  38.                     else
  39.                         b[j]= 4*(j+1);
  40.                     normBsquared += b[j] * b[j];
  41.                 }
  42.                 printf("\n");
  43.             }
  44.             printf("VECTOR B\n");
  45.             for(i<0;i<N;i++)
  46.             {
  47.                 printf("%f\t",b[i]);
  48.             }
  49.             printf("\n");
  50.             for(i=0;i<N;i++)
  51.             {
  52.                 x[i]=0;
  53.                 buf[i]=0;
  54.             }
  55.             printf("Start find!\n");
  56.             printf("Bsquared %f\n", normBsquared);
  57.     }
  58.     for(;;)
  59.     {
  60.         upc_barrier;
  61.         upc_forall(i = 0; i < N; i++;i)
  62.             for (int j = 0; j < N; j++)
  63.                 buf[i] += a[i][j] * x[j];
  64.         upc_forall(i = 0; i < N; i++;i)
  65.         {
  66.             buf[i] -= b[i];
  67.             x[i] -= buf[i] * tau;
  68.         }
  69.         upc_barrier;
  70.         if(MYTHREAD==0)
  71.         {
  72.             for(i = 0; i < N; i++)
  73.             {  
  74.                 normXSquared += buf[i] * buf[i];
  75.             }
  76.             //printf("current Xsquared %f\n", normXSquared);       
  77.         }
  78.         upc_barrier;
  79.         if (normXSquared / normBsquared < epsilon * epsilon)
  80.             break;
  81.         if(MYTHREAD==0)
  82.         {
  83.             for(i=0;i<N;i++)
  84.             {
  85.                 buf[i]=0;
  86.                 normXSquared = 0;
  87.             }
  88.         }
  89.     }
  90.     if(MYTHREAD==0)
  91.         for(i=0;i<N;i++)
  92.         {
  93.             printf("%f\t",x[i]);
  94.         }
  95.  
  96.     /*upc_barrier;
  97.  
  98.     // all threads  perform matrix multiplication
  99.  
  100.     upc_forall(i=0;i<N;i++;i)
  101.     {
  102.       // &a[i][0] specifies that this iteration will be executed by the thread that has affinity to    
  103.     //  element a[i][0]
  104.         //printf("Matrix element %d THREAD (%d)",i,MYTHREAD);
  105.          for (j=0; j<M; j++) {
  106.             c[i][j] = 0;
  107.             for(l=0; l< P; l++) c[i][j] +=a[i][l]*b[l][j];
  108.          }
  109.     }*/
  110.  
  111.     //upc_barrier;
  112.  
  113. }
  114.  
  115. /*void solve1()
  116. {
  117.    
  118.     int i,j;
  119.     //initialize x
  120.     if(MYTHREAD==0)
  121.         for(i=0;i<N;i++)
  122.         {
  123.             x[i]=0;
  124.             buf[i]=0;
  125.         }
  126.     for(;;)
  127.     {
  128.         upc_barrier;
  129.         upc_forall(i = 0; i < N; i++;i)
  130.             for (int j = 0; j < N; j++)
  131.                 buf[i] += a[i][j] * x[j];
  132.         upc_forall(i = 0; i < N; i++;i)
  133.         {
  134.             buf[i] -= b[i];
  135.             x[i] -= buf[i] * tau;
  136.         }
  137.         upc_barrier;
  138.         if(MYTHREAD==0)
  139.         {
  140.             for(i = 0; i < N; i++)
  141.             {  
  142.                 normXSquared += buf[i] * buf[i];
  143.             }      
  144.         }
  145.         if (normXSquared / normBsquared < epsilon * epsilon)
  146.             break;
  147.         if(MYTHREAD==0)
  148.         {
  149.             for(i=0;i<N;i++)
  150.             {
  151.                 buf[i]=0;
  152.                 normXSquared = 0;
  153.             }
  154.         }
  155.     }
  156. }*/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement