]> gcc.gnu.org Git - gcc.git/blob - libgomp/testsuite/libgomp.c/examples-4/e.51.4.c
d2948ae1b54df00c3b4351249c7f813d8c964a4b
[gcc.git] / libgomp / testsuite / libgomp.c / examples-4 / e.51.4.c
1 /* { dg-do run } */
2
3 #include <stdlib.h>
4
5 #define EPS 0.000001
6
7 const int MAX = 1800;
8
9 void check (double *a, double *b, int N)
10 {
11 int i;
12 for (i = 0; i < N; i++)
13 if (a[i] - b[i] > EPS || b[i] - a[i] > EPS)
14 abort ();
15 }
16
17 void init (double *a1, double *a2, int N)
18 {
19 double s = -1;
20 int i;
21 for (i = 0; i < N; i++)
22 {
23 a1[i] = s;
24 a2[i] = i;
25 s = -s;
26 }
27 }
28
29 void vec_mult_ref (double *p1, double *v3, double *v4, int N)
30 {
31 int i;
32 for (i = 0; i < N; i++)
33 p1[i] = v3[i] * v4[i];
34 }
35
36 void foo_ref (double *p0, double *v1, double *v2, int N)
37 {
38 init (v1, v2, N);
39 vec_mult_ref (p0, v1, v2, N);
40 }
41
42 void vec_mult (double *p1, double *v3, double *v4, int N)
43 {
44 int i;
45 #pragma omp target map(to: v3[0:N], v4[:N]) map(from: p1[0:N])
46 #pragma omp parallel for
47 for (i = 0; i < N; i++)
48 p1[i] = v3[i] * v4[i];
49 }
50
51 void foo (double *p0, double *v1, double *v2, int N)
52 {
53 init (v1, v2, N);
54
55 #pragma omp target data map(to: v1[0:N], v2[:N]) map(from: p0[0:N])
56 vec_mult (p0, v1, v2, N);
57 }
58
59 int main ()
60 {
61 double *p1 = (double *) malloc (MAX * sizeof (double));
62 double *p2 = (double *) malloc (MAX * sizeof (double));
63 double *v1 = (double *) malloc (MAX * sizeof (double));
64 double *v2 = (double *) malloc (MAX * sizeof (double));
65
66 foo_ref (p1, v1, v2, MAX);
67 foo (p2, v1, v2, MAX);
68
69 check (p1, p2, MAX);
70
71 free (p1);
72 free (p2);
73 free (v1);
74 free (v2);
75
76 return 0;
77 }
This page took 0.039387 seconds and 4 git commands to generate.