1 #include <stdlib.h>
2
3 #define N 16
4
5 float c[N];
6 #pragma acc declare device_resident (c)
7
8 #pragma acc routine
9 float
10 subr2 (float a)
11 {
12 int i;
13
14 for (i = 0; i < N; i++)
15 c[i] = 2.0;
16
17 for (i = 0; i < N; i++)
18 a += c[i];
19
20 return a;
21 }
22
23 float b[N];
24 #pragma acc declare copyin (b)
25
26 #pragma acc routine
27 float
28 subr1 (float a)
29 {
30 int i;
31
32 for (i = 0; i < N; i++)
33 a += b[i];
34
35 return a;
36 }
37
38 int
39 main (int argc, char **argv)
40 {
41 float a;
42 int i;
43
44 for (i = 0; i < 16; i++)
45 b[i] = 1.0;
46
47 a = 0.0;
48
49 a = subr1 (a);
50
51 if (a != 16.0)
52 abort ();
53
54 a = 0.0;
55
56 a = subr2 (a);
57
58 if (a != 32.0)
59 abort ();
60
61 return 0;
62 }