maygapixel

Untitled

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