Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <conio.h>
- #include <omp.h>
- #include <math.h>
- int main()
- {
- int i,j,threads;
- float DX[8][8] = {0};
- float D[8][8] = {0};
- int C[8][8] = {0};
- int M[8][8];
- int Origin[8][8] = {{154,123,123,123,123,123,123,136},
- {192,180,136,154,154,154,136,110},
- {254,198,154,154,180,154,123,123},
- {239,180,136,180,180,166,123,123},
- {180,154,136,167,166,149,136,136},
- {128,136,123,136,154,180,198,154},
- {123,105,110,149,136,136,180,166},
- {110,136,123,123,123,136,154,136},};
- double C1 = 0.4904, C2 = 0.4619, C3 = 0.4157,C4 = 0.3536,
- C5 = 0.2778, C6 = 0.1913, C7 = 0.0975;
- //Cn = 0.5cos(n(pi)/16) pi = 3.1415
- omp_set_num_threads(8);
- int id;
- double T[8][8] = {{C4,C4,C4,C4,C4,C4,C4,C4,},
- {C1,C3,C5,C7,-C7,-C5,-C3,-C1},
- {C2,C6,-C6,-C2,-C2,-C6,C6,C2},
- {C3,-C7,-C1,-C5,C5,C1,C7,-C3},
- {C4,-C4,-C4,C4,C4,-C4,-C4,C4},
- {C5,-C1,C7,C3,-C3,-C7,C1,-C5},
- {C6,-C2,C3,-C6,-C6,C3,-C2,C6},
- {C7,-C5,C2,-C1,C1,-C2,C5,-C7},};
- double RT[8][8] = {{C4,C1,C2,C3,C4,C5,C6,C7,},
- {C4,C3,C6,-C7,-C4,-C1,-C2,-C5},
- {C4,C5,-C6,-C1,-C4,C7,C3,C2},
- {C4,C7,-C2,-C5,C4,C3,-C6,-C1},
- {C4,-C7,-C2,C5,C4,-C3,-C6,C1},
- {C4,-C5,-C6,C1,-C4,-C7,C3,-C2},
- {C4,-C3,C6,C7,-C4,C1,-C2,C5},
- {C4,-C1,C2,-C3,C4,-C5,C6,-C7}};
- int Q[8][8] = {{16,11,10,16,24,40,51,61},
- {12,12,14,19,26,58,60,55},
- {14,13,16,24,40,57,69,56},
- {14,17,22,29,51,87,80,62},
- {18,22,37,56,68,109,103,77},
- {24,35,55,64,81,104,113,92},
- {49,64,78,87,103,121,120,101},
- {72,92,95,98,112,100,103,99},};
- printf("Input data is Origin.\n\n");
- for(i=0;i<8;i++)
- {
- for(j=0;j<8;j++)
- {
- printf("%d \t",Origin[i][j]);
- }
- printf("\n");
- }
- printf("--------------------------\n");
- #pragma omp parallel
- #pragma omp for
- for(i=0;i<8;i++)
- { id = omp_get_thread_num();
- printf("Origin[i][j]-128, i=%d, Thread=%d\n",i,id);
- for(j=0;j<8;j++)
- {
- M[i][j] = Origin[i][j] - 128; //scaling made by X[i][j]-128
- }
- }
- printf("--------------------------\n");
- printf("Show M (Origin[i][j]-128)\n");
- printf("\n");
- for(i=0;i<8;i++)
- {
- for(j=0;j<8;j++)
- {
- printf("%d \t",M[i][j]);
- }
- printf("\n");
- }
- printf("--------------------------\n");
- #pragma omp parallel
- #pragma omp for
- for(i=0;i<8;i++)
- {
- id = omp_get_thread_num();
- printf("T*Origin, i=%d, Thread=%d\n",i,id);
- for(j=0;j<8;j++)
- {
- for(threads=0;threads<8;threads++)
- {
- DX[i][j] += T[i][threads] * M[threads][j];
- }
- }
- }
- printf("--------------------------\n");
- printf("Show T*Origin\n");
- printf("\n");
- for(i=0;i<8;i++)
- {
- for(j=0;j<8;j++)
- {
- printf("%.2f\t",DX[i][j]);
- }
- printf("\n");
- }
- printf("--------------------------\n");
- #pragma omp parallel
- #pragma omp for
- for(i=0;i<8;i++)
- {
- id = omp_get_thread_num();
- printf("D,i=%d, Thread=%d\n",i,id);
- for(j=0;j<8;j++)
- {
- for(threads=0;threads<8;threads++)
- {
- D[i][j] += DX[i][threads] * RT[threads][j] ;
- }
- }
- }
- printf("--------------------------\n");
- printf("Show D\n");
- printf("\n");
- for(i=0;i<8;i++)
- {
- for(j=0;j<8;j++)
- {
- printf("%.2f\t",D[i][j]);
- }
- printf("\n");
- }
- printf("--------------------------\n");
- #pragma omp parallel
- #pragma omp for
- for(i=0;i<8;i++)
- {
- id = omp_get_thread_num();
- printf("C,i=%d, Thread=%d\n",i,id);
- for(j=0;j<8;j++)
- {
- C[i][j] = round(D[i][j]/Q[i][j]);
- }
- }
- printf("--------------------------\n");
- printf("Show the answer \n");
- printf("\n");
- for(i=0;i<8;i++)
- {
- for(j=0;j<8;j++)
- {
- printf("%d \t",C[i][j]);
- }
- printf("\n");
- }
- printf("--------------------------\n");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment