HPMC User Guide v 1.00
© 2022 Bassem W. Jamaleddine


D

   A Simple OMP Program


Consider the following simple program to measure the DP GFLops by running many threads over OMP.

    --  Program Code D.1 :      [LISTING gigaflop.cpp] - [A simple OMP program gigaflop.cpp]
(raw text)
1.     #include <stdio.h>
2.     #include <stdlib.h>
3.     #include <omp.h>
4.     
5.     unsigned int const SIZE=16;
6.     unsigned int const ITER=48000000;
7.     
8.     extern double elapsedTime(void);
9.     
10.    int main()
11.    {
12.        double startTime, duration;
13.        int i;
14.        __declspec(aligned(64)) double a[SIZE],b[SIZE],c[SIZE];
15.        // initialize
16.        for (i=0;i<SIZE;i++) {
17.            c[i]=b[i]=a[i]=(double)rand();
18.        }
19.        // warmup 
20.        #pragma omp parallel for
21.        for(i=0;i<ITER;i++) {
22.            #pragma vector aligned(a,b,c)
23.            a[0:SIZE]=b[0:SIZE]*c[0:SIZE]+a[0:SIZE];
24.        }
25.        startTime = elapsedTime();
26.        #pragma omp parallel for
27.        for(i=0;i<ITER;i++) {
28.            #pragma vector aligned(a,b,c)
29.            a[0:SIZE]=b[0:SIZE]*c[0:SIZE]+a[0:SIZE];
30.        }
31.        duration = elapsedTime() - startTime;
32.        double Gflop = 2*SIZE*ITER/1e+9;
33.        double Gflops = Gflop/duration;
34.        printf("Running %d openmp threads\n", omp_get_max_threads());
35.        printf("DP GFlops = %f\n", Gflops);
36.        return 0;
37.    }

HPMC 2022




Running the program on the HPMC's MIC coprocessor:

12:46 root@HPMC9: ~/coding # xphi gigaflop_xphi

12:46 root@HPMC9: ~/coding #  xphi gigaflop_xphi 
Running 224 openmp threads
DP GFlops = 154310202251.497009


Running the program on the HPMC host:

12:50 root@HPMC9: ~/coding # ./gigaflop_hos

12:50 root@HPMC9: ~/coding #  ./gigaflop_hos 
Running 112 openmp threads
DP GFlops = 139649512.149654