maygapixel

Untitled

Apr 5th, 2018
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 5.51 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.     printf("Input data is Origin.\n\n");
  58.     for(i=0;i<8;i++)
  59.     {
  60.         for(j=0;j<8;j++)
  61.         {
  62.             printf("%d \t",Origin[i][j]);
  63.         }
  64.          printf("\n");
  65.     }
  66.     printf("-------------------------------------------------------------\n");
  67.    
  68.     Begin = omp_get_wtime();
  69.     #pragma omp parallel
  70.     #pragma omp for
  71.    
  72.     for(i=0;i<8;i++)
  73.     {   id = omp_get_thread_num();
  74.         printf("Origin[i][j]-128, i=%d, Thread=%d\n",i,id);
  75.         for(j=0;j<8;j++)
  76.         {
  77.             M[i][j] = Origin[i][j] - 128;                          //scaling made by X[i][j]-128
  78.         }
  79.     }
  80.     End = omp_get_wtime();
  81.     printf("\n Time = %f s\n",End-Begin);
  82.     printf("-------------------------------------------------------------\n");
  83.    
  84.     printf("Show M (Origin[i][j]-128)\n");
  85.     printf("\n");
  86.  
  87.     for(i=0;i<8;i++)
  88.     {
  89.         for(j=0;j<8;j++)
  90.         {
  91.             printf("%d \t",M[i][j]);
  92.         }
  93.          printf("\n");
  94.     }
  95.     printf("-------------------------------------------------------------\n");
  96.    
  97.     Begin = omp_get_wtime();
  98.     #pragma omp parallel
  99.     #pragma omp for
  100.     for(i=0;i<8;i++)
  101.     {
  102.         id = omp_get_thread_num();
  103.         printf("T*Origin, i=%d, Thread=%d\n",i,id);
  104.         for(j=0;j<8;j++)
  105.         {
  106.             for(threads=0;threads<8;threads++)
  107.             {
  108.                 DX[i][j] += T[i][threads] * M[threads][j];
  109.             }
  110.         }
  111.     }
  112.     End = omp_get_wtime();
  113.     printf("\n Time = %f s\n",End-Begin);
  114.     printf("-------------------------------------------------------------\n");
  115.     printf("Show T*Origin\n");
  116.     printf("\n");
  117.     for(i=0;i<8;i++)
  118.     {
  119.         for(j=0;j<8;j++)
  120.         {
  121.             printf("%.2f\t",DX[i][j]);
  122.         }
  123.          printf("\n");
  124.     }
  125.     printf("-------------------------------------------------------------\n");
  126.    
  127.     Begin = omp_get_wtime();
  128.     #pragma omp parallel
  129.     #pragma omp for
  130.     for(i=0;i<8;i++)
  131.     {
  132.         id = omp_get_thread_num();
  133.         printf("D,i=%d, Thread=%d\n",i,id);
  134.         for(j=0;j<8;j++)
  135.         {
  136.             for(threads=0;threads<8;threads++)
  137.             {
  138.                 D[i][j] += DX[i][threads] * RT[threads][j] ;
  139.             }
  140.         }
  141.     }
  142.     End = omp_get_wtime();
  143.     printf("\n Time = %f s\n",End-Begin);
  144.     printf("-------------------------------------------------------------\n");
  145.  
  146.     printf("Show D\n");
  147.     printf("\n");
  148.     for(i=0;i<8;i++)
  149.     {
  150.         for(j=0;j<8;j++)
  151.         {
  152.             printf("%.2f\t",D[i][j]);
  153.         }
  154.          printf("\n");
  155.     }
  156.     printf("-------------------------------------------------------------\n");
  157.    
  158.     Begin = omp_get_wtime();
  159.     #pragma omp parallel
  160.     #pragma omp for
  161.     for(i=0;i<8;i++)
  162.     {
  163.         id = omp_get_thread_num();
  164.         printf("C,i=%d, Thread=%d\n",i,id);
  165.         for(j=0;j<8;j++)
  166.         {
  167.             C[i][j] = round(D[i][j]/Q[i][j]);
  168.         }
  169.     }
  170.     End = omp_get_wtime();
  171.     printf("\n Time = %f s\n",End-Begin);
  172.     printf("-------------------------------------------------------------\n");
  173.  
  174.     printf("Show the answer \n");
  175.     printf("\n");
  176.     for(i=0;i<8;i++)
  177.     {
  178.         for(j=0;j<8;j++)
  179.         {
  180.             printf("%d \t",C[i][j]);
  181.         }
  182.          printf("\n");
  183.     }
  184.     printf("-------------------------------------------------------------\n");
  185.  
  186. return 0;
  187. }
Advertisement
Add Comment
Please, Sign In to add comment