8 void init (float B
[], float C
[], int n
)
11 for (i
= 0; i
< n
; i
++)
18 float dotprod_ref (float B
[], float C
[], int n
)
23 for (i
= 0; i
< n
; i
++)
29 float dotprod (float B
[], float C
[], int n
, int block_size
,
30 int num_teams
, int block_threads
)
35 #pragma omp target map(to: B[0:n], C[0:n]) map(tofrom: sum)
36 #pragma omp teams num_teams(num_teams) thread_limit(block_threads) \
38 #pragma omp distribute
39 for (i0
= 0; i0
< n
; i0
+= block_size
)
40 #pragma omp parallel for reduction(+:sum)
41 for (i
= i0
; i
< ((i0
+ block_size
> n
) ? n
: i0
+ block_size
); i
++)
47 void check (float a
, float b
)
49 float err
= (b
== 0.0) ? a
: (a
- b
) / b
;
50 if (((err
> 0) ? err
: -err
) > EPS
)
56 float *v1
= (float *) malloc (N
* sizeof (float));
57 float *v2
= (float *) malloc (N
* sizeof (float));
63 p1
= dotprod_ref (v1
, v2
, N
);
64 p2
= dotprod (v1
, v2
, N
, N
/ 8, 2, 8);