homer512

OpenMP

Jan 12th, 2014
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.75 KB | None | 0 0
  1. /*
  2. Test of C code speed
  3. compile with: gcc -O3 -mavx mactest.c
  4. or for openmp use: gcc -Ofast -fopenmp mactest.c
  5. Modified version of https://gist.github.com/culurciello/8389426
  6. */
  7.  
  8. #include <stdio.h>
  9. #include <stdlib.h>
  10. #include <fcntl.h>
  11. #include <sys/time.h>
  12. #include <math.h>
  13. #include <omp.h>
  14.  
  15. int main()
  16. {
  17.   int i,j,k;
  18.   // nb of operations:
  19.   int dsize = 524288/2; // 1024*512
  20.   float a[2][dsize], b[2][dsize];
  21.   int opsMAC = 2; // operations per MAC
  22.  
  23.   int vcrz = 8; // vectorize by #
  24.   int nthreads = 2;
  25.   int nbOfAverages = 1024*10;
  26.   struct timeval start,end;
  27.   gettimeofday(&start, NULL);
  28.  
  29.  
  30. #pragma omp parallel for private (i,j,k)
  31.   for (k=0; k<nthreads; k++) {
  32.     // printf("Hello from thread %d, nthreads %d\n", omp_get_thread_num(), omp_get_num_threads());
  33.     for(i=0;i<nbOfAverages;i++) {
  34.       for (j = 0; j < dsize/vcrz; j=j+4) {
  35. #      pragma simd
  36. #      pragma vector aligned
  37.     a[k][j] = a[k][j] * b[k][j]; // MAC operations
  38.     a[k][j+1] = a[k][j+1] * b[k][j+1];
  39.     a[k][j+2] = a[k][j+2] * b[k][j+2];
  40.     a[k][j+3] = a[k][j+3] * b[k][j+3];
  41.     a[k][j+4] = a[k][j+4] * b[k][j+4];
  42.     a[k][j+5] = a[k][j+5] * b[k][j+5];
  43.     a[k][j+6] = a[k][j+6] * b[k][j+6];
  44.     a[k][j+7] = a[k][j+7] * b[k][j+7];
  45.       }
  46.     }
  47.   }
  48.   gettimeofday(&end, NULL);
  49.   double t = ((double) (end.tv_sec - start.tv_sec))
  50.     + ((double) (end.tv_usec - start.tv_usec)) / 1e6; //reports time in [s] - verified!
  51.  
  52.   // report performance:
  53.   //printf("\nclockstart, clockedn, CLOCKS_PER_SEC: %ld,%ld,%d", start, end, CLOCKS_PER_SEC);
  54.   printf("\nTotal ops = %d, # of treads = %d", opsMAC*dsize, nthreads);
  55.   printf("\nTime in s: %lf:", t);
  56.   printf("\nTest performance [G OP/s] %lf:", nthreads * opsMAC * nbOfAverages * dsize/t/1e9);
  57.   printf("\n");
  58.   return(0);
  59. }
Advertisement
Add Comment
Please, Sign In to add comment