annotate libgomp/testsuite/libgomp.c/target-2.c @ 111:04ced10e8804

gcc 7
author kono
date Fri, 27 Oct 2017 22:46:09 +0900
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
111
kono
parents:
diff changeset
1 extern
kono
parents:
diff changeset
2 #ifdef __cplusplus
kono
parents:
diff changeset
3 "C"
kono
parents:
diff changeset
4 #endif
kono
parents:
diff changeset
5 void abort (void);
kono
parents:
diff changeset
6
kono
parents:
diff changeset
7 void
kono
parents:
diff changeset
8 fn1 (double *x, double *y, int z)
kono
parents:
diff changeset
9 {
kono
parents:
diff changeset
10 int i;
kono
parents:
diff changeset
11 for (i = 0; i < z; i++)
kono
parents:
diff changeset
12 {
kono
parents:
diff changeset
13 x[i] = i & 31;
kono
parents:
diff changeset
14 y[i] = (i & 63) - 30;
kono
parents:
diff changeset
15 }
kono
parents:
diff changeset
16 }
kono
parents:
diff changeset
17
kono
parents:
diff changeset
18 double
kono
parents:
diff changeset
19 fn2 (int x)
kono
parents:
diff changeset
20 {
kono
parents:
diff changeset
21 double s = 0;
kono
parents:
diff changeset
22 double b[3 * x], c[3 * x], d[3 * x], e[3 * x];
kono
parents:
diff changeset
23 int i;
kono
parents:
diff changeset
24 fn1 (b, c, x);
kono
parents:
diff changeset
25 fn1 (e, d + x, x);
kono
parents:
diff changeset
26 #pragma omp target map(to: b, c[:x], d[x:x], e) map(tofrom: s)
kono
parents:
diff changeset
27 #pragma omp parallel for reduction(+:s)
kono
parents:
diff changeset
28 for (i = 0; i < x; i++)
kono
parents:
diff changeset
29 s += b[i] * c[i] + d[x + i] + sizeof (b) - sizeof (c);
kono
parents:
diff changeset
30 return s;
kono
parents:
diff changeset
31 }
kono
parents:
diff changeset
32
kono
parents:
diff changeset
33 double
kono
parents:
diff changeset
34 fn3 (int x)
kono
parents:
diff changeset
35 {
kono
parents:
diff changeset
36 double s = 0;
kono
parents:
diff changeset
37 double b[3 * x], c[3 * x], d[3 * x], e[3 * x];
kono
parents:
diff changeset
38 int i;
kono
parents:
diff changeset
39 fn1 (b, c, x);
kono
parents:
diff changeset
40 fn1 (e, d, x);
kono
parents:
diff changeset
41 #pragma omp target map(tofrom: s)
kono
parents:
diff changeset
42 #pragma omp parallel for reduction(+:s)
kono
parents:
diff changeset
43 for (i = 0; i < x; i++)
kono
parents:
diff changeset
44 s += b[i] * c[i] + d[i];
kono
parents:
diff changeset
45 return s;
kono
parents:
diff changeset
46 }
kono
parents:
diff changeset
47
kono
parents:
diff changeset
48 double
kono
parents:
diff changeset
49 fn4 (int x)
kono
parents:
diff changeset
50 {
kono
parents:
diff changeset
51 double s = 0;
kono
parents:
diff changeset
52 double b[3 * x], c[3 * x], d[3 * x], e[3 * x];
kono
parents:
diff changeset
53 int i;
kono
parents:
diff changeset
54 fn1 (b, c, x);
kono
parents:
diff changeset
55 fn1 (e, d + x, x);
kono
parents:
diff changeset
56 #pragma omp target data map(from: b, c[:x], d[x:x], e)
kono
parents:
diff changeset
57 {
kono
parents:
diff changeset
58 #pragma omp target update to(b, c[:x], d[x:x], e)
kono
parents:
diff changeset
59 #pragma omp target map(c[:x], d[x:x], s)
kono
parents:
diff changeset
60 #pragma omp parallel for reduction(+:s)
kono
parents:
diff changeset
61 for (i = 0; i < x; i++)
kono
parents:
diff changeset
62 {
kono
parents:
diff changeset
63 s += b[i] * c[i] + d[x + i] + sizeof (b) - sizeof (c);
kono
parents:
diff changeset
64 b[i] = i + 0.5;
kono
parents:
diff changeset
65 c[i] = 0.5 - i;
kono
parents:
diff changeset
66 d[x + i] = 0.5 * i;
kono
parents:
diff changeset
67 }
kono
parents:
diff changeset
68 }
kono
parents:
diff changeset
69 for (i = 0; i < x; i++)
kono
parents:
diff changeset
70 if (b[i] != i + 0.5 || c[i] != 0.5 - i || d[x + i] != 0.5 * i)
kono
parents:
diff changeset
71 abort ();
kono
parents:
diff changeset
72 return s;
kono
parents:
diff changeset
73 }
kono
parents:
diff changeset
74
kono
parents:
diff changeset
75 int
kono
parents:
diff changeset
76 main ()
kono
parents:
diff changeset
77 {
kono
parents:
diff changeset
78 double a = fn2 (128);
kono
parents:
diff changeset
79 if (a != 14080.0)
kono
parents:
diff changeset
80 abort ();
kono
parents:
diff changeset
81 double b = fn3 (128);
kono
parents:
diff changeset
82 if (a != b)
kono
parents:
diff changeset
83 abort ();
kono
parents:
diff changeset
84 double c = fn4 (256);
kono
parents:
diff changeset
85 if (c != 28160.0)
kono
parents:
diff changeset
86 abort ();
kono
parents:
diff changeset
87 return 0;
kono
parents:
diff changeset
88 }