Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Test of C code speed
- compile with: gcc -O3 -mavx mactest.c
- or for openmp use: gcc -Ofast -fopenmp mactest.c
- Modified version of https://gist.github.com/culurciello/8389426
- */
- #include <stdio.h>
- #include <stdlib.h>
- #include <fcntl.h>
- #include <sys/time.h>
- #include <math.h>
- #include <omp.h>
- int main()
- {
- int i,j,k;
- // nb of operations:
- int dsize = 524288/2; // 1024*512
- float a[2][dsize], b[2][dsize];
- int opsMAC = 2; // operations per MAC
- int vcrz = 8; // vectorize by #
- int nthreads = 2;
- int nbOfAverages = 1024*10;
- struct timeval start,end;
- gettimeofday(&start, NULL);
- #pragma omp parallel for private (i,j,k)
- for (k=0; k<nthreads; k++) {
- // printf("Hello from thread %d, nthreads %d\n", omp_get_thread_num(), omp_get_num_threads());
- for(i=0;i<nbOfAverages;i++) {
- for (j = 0; j < dsize/vcrz; j=j+4) {
- # pragma simd
- # pragma vector aligned
- a[k][j] = a[k][j] * b[k][j]; // MAC operations
- a[k][j+1] = a[k][j+1] * b[k][j+1];
- a[k][j+2] = a[k][j+2] * b[k][j+2];
- a[k][j+3] = a[k][j+3] * b[k][j+3];
- a[k][j+4] = a[k][j+4] * b[k][j+4];
- a[k][j+5] = a[k][j+5] * b[k][j+5];
- a[k][j+6] = a[k][j+6] * b[k][j+6];
- a[k][j+7] = a[k][j+7] * b[k][j+7];
- }
- }
- }
- gettimeofday(&end, NULL);
- double t = ((double) (end.tv_sec - start.tv_sec))
- + ((double) (end.tv_usec - start.tv_usec)) / 1e6; //reports time in [s] - verified!
- // report performance:
- //printf("\nclockstart, clockedn, CLOCKS_PER_SEC: %ld,%ld,%d", start, end, CLOCKS_PER_SEC);
- printf("\nTotal ops = %d, # of treads = %d", opsMAC*dsize, nthreads);
- printf("\nTime in s: %lf:", t);
- printf("\nTest performance [G OP/s] %lf:", nthreads * opsMAC * nbOfAverages * dsize/t/1e9);
- printf("\n");
- return(0);
- }
Advertisement
Add Comment
Please, Sign In to add comment