maygapixel

Untitled

Apr 6th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.22 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <conio.h>
  3. #include <omp.h>
  4. #include <math.h>
  5.  
  6. int main(int argc, char *argv[])
  7. {
  8.     int    i,j,threads,t=1;
  9.     double Begin,End;
  10.     float  DX[8][8] = {0};                                            
  11.     float  D[8][8]  = {0};                                              
  12.     int    C[8][8] = {0};
  13.     int    M[8][8];
  14.    
  15.     int Origin[8][8] =  {{154,123,123,123,123,123,123,136},
  16.                         {192,180,136,154,154,154,136,110},
  17.                         {254,198,154,154,180,154,123,123},
  18.                         {239,180,136,180,180,166,123,123},
  19.                         {180,154,136,167,166,149,136,136},
  20.                         {128,136,123,136,154,180,198,154},
  21.                         {123,105,110,149,136,136,180,166},
  22.                         {110,136,123,123,123,136,154,136},};
  23.    
  24.     double C1 = 0.4904, C2 = 0.4619, C3 = 0.4157,C4 = 0.3536,
  25.            C5 = 0.2778, C6 = 0.1913, C7 = 0.0975;
  26.     //Cn = 0.5cos(n(pi)/16) pi = 3.1415
  27.  
  28.     omp_set_num_threads(8);
  29.     int id;
  30.     double T[8][8] =  {{C4,C4,C4,C4,C4,C4,C4,C4,},
  31.                       {C1,C3,C5,C7,-C7,-C5,-C3,-C1},
  32.                       {C2,C6,-C6,-C2,-C2,-C6,C6,C2},
  33.                       {C3,-C7,-C1,-C5,C5,C1,C7,-C3},
  34.                       {C4,-C4,-C4,C4,C4,-C4,-C4,C4},
  35.                       {C5,-C1,C7,C3,-C3,-C7,C1,-C5},
  36.                       {C6,-C2,C3,-C6,-C6,C3,-C2,C6},
  37.                       {C7,-C5,C2,-C1,C1,-C2,C5,-C7},};
  38.  
  39.     double RT[8][8] = {{C4,C1,C2,C3,C4,C5,C6,C7,},
  40.                       {C4,C3,C6,-C7,-C4,-C1,-C2,-C5},
  41.                       {C4,C5,-C6,-C1,-C4,C7,C3,C2},
  42.                       {C4,C7,-C2,-C5,C4,C3,-C6,-C1},
  43.                       {C4,-C7,-C2,C5,C4,-C3,-C6,C1},
  44.                       {C4,-C5,-C6,C1,-C4,-C7,C3,-C2},
  45.                       {C4,-C3,C6,C7,-C4,C1,-C2,C5},
  46.                       {C4,-C1,C2,-C3,C4,-C5,C6,-C7}};
  47.  
  48.     int Q[8][8] =     {{16,11,10,16,24,40,51,61},
  49.                       {12,12,14,19,26,58,60,55},
  50.                       {14,13,16,24,40,57,69,56},
  51.                       {14,17,22,29,51,87,80,62},
  52.                       {18,22,37,56,68,109,103,77},
  53.                       {24,35,55,64,81,104,113,92},
  54.                       {49,64,78,87,103,121,120,101},
  55.                       {72,92,95,98,112,100,103,99},};
  56.  
  57.  
  58.     printf("Input data is Origin.\n\n");
  59.     Begin = omp_get_wtime();
  60.     for(i=0;i<8;i++)
  61.     {
  62.         for(j=0;j<8;j++)
  63.         {
  64.             printf("%d \t",Origin[i][j]);
  65.         }
  66.          printf("\n");
  67.     }
  68.     printf("-------------------------------------------------------------\n");
  69.    
  70.     #pragma omp parallel
  71.     #pragma omp for
  72.    
  73.     for(i=0;i<8;i++)
  74.     {   id = omp_get_thread_num();
  75.         printf("Origin[i][j]-128, i=%d, Thread=%d\n",i,id);
  76.         for(j=0;j<8;j++)
  77.         {
  78.             M[i][j] = Origin[i][j] - 128;                          //scaling made by X[i][j]-128
  79.         }
  80.     }
  81.     printf("-------------------------------------------------------------\n");
  82.    
  83.     printf("Show M (Origin[i][j]-128)\n");
  84.     printf("\n");
  85.  
  86.     for(i=0;i<8;i++)
  87.     {
  88.         for(j=0;j<8;j++)
  89.         {
  90.             printf("%d \t",M[i][j]);
  91.         }
  92.          printf("\n");
  93.     }
  94.     printf("-------------------------------------------------------------\n");
  95.    
  96.     #pragma omp parallel
  97.     #pragma omp for
  98.     for(i=0;i<8;i++)
  99.     {
  100.         id = omp_get_thread_num();
  101.         printf("T*Origin, i=%d, Thread=%d\n",i,id);
  102.         for(j=0;j<8;j++)
  103.         {
  104.             for(threads=0;threads<8;threads++)
  105.             {
  106.                 DX[i][j] += T[i][threads] * M[threads][j];
  107.             }
  108.         }
  109.     }
  110.     printf("-------------------------------------------------------------\n");
  111.     printf("Show T*Origin\n");
  112.     printf("\n");
  113.     for(i=0;i<8;i++)
  114.     {
  115.         for(j=0;j<8;j++)
  116.         {
  117.             printf("%.2f\t",DX[i][j]);
  118.         }
  119.          printf("\n");
  120.     }
  121.     printf("-------------------------------------------------------------\n");
  122.    
  123.     #pragma omp parallel
  124.     #pragma omp for
  125.     for(i=0;i<8;i++)
  126.     {
  127.         id = omp_get_thread_num();
  128.         printf("D,i=%d, Thread=%d\n",i,id);
  129.         for(j=0;j<8;j++)
  130.         {
  131.             for(threads=0;threads<8;threads++)
  132.             {
  133.                 D[i][j] += DX[i][threads] * RT[threads][j] ;
  134.             }
  135.         }
  136.     }
  137.     printf("-------------------------------------------------------------\n");
  138.  
  139.     printf("Show D\n");
  140.     printf("\n");
  141.     for(i=0;i<8;i++)
  142.     {
  143.         for(j=0;j<8;j++)
  144.         {
  145.             printf("%.2f\t",D[i][j]);
  146.         }
  147.          printf("\n");
  148.     }
  149.     printf("-------------------------------------------------------------\n");
  150.  
  151.     #pragma omp parallel
  152.     #pragma omp for
  153.     for(i=0;i<8;i++)
  154.     {
  155.         id = omp_get_thread_num();
  156.         printf("C,i=%d, Thread=%d\n",i,id);
  157.         for(j=0;j<8;j++)
  158.         {
  159.             C[i][j] = round(D[i][j]/Q[i][j]);
  160.         }
  161.     }
  162.     printf("-------------------------------------------------------------\n");
  163.  
  164.     printf("Show the answer \n");
  165.     printf("\n");
  166.     for(i=0;i<8;i++)
  167.     {
  168.         for(j=0;j<8;j++)
  169.         {
  170.             printf("%d \t",C[i][j]);
  171.         }
  172.          printf("\n");
  173.     }
  174.     printf("-------------------------------------------------------------\n");
  175.     End = omp_get_wtime();
  176.     printf("Time = %f s\n",End-Begin);
  177.  
  178. return 0;
  179. }
Advertisement
Add Comment
Please, Sign In to add comment