152
|
1 /* Test nested dynamic/structured data mappings. */
|
|
2
|
|
3 /* { dg-skip-if "" { *-*-* } { "-DACC_MEM_SHARED=1" } } */
|
|
4
|
|
5 #include <openacc.h>
|
|
6 #include <assert.h>
|
|
7 #include <stdlib.h>
|
|
8
|
|
9 #define SIZE 1024
|
|
10
|
|
11 void
|
|
12 f1 (void)
|
|
13 {
|
|
14 char *block1 = (char *) malloc (SIZE);
|
|
15
|
|
16 #pragma acc data copy(block1[0:SIZE])
|
|
17 {
|
|
18 #ifdef OPENACC_API
|
|
19 acc_copyin (block1, SIZE);
|
|
20 acc_copyout (block1, SIZE);
|
|
21 #else
|
|
22 #pragma acc enter data copyin(block1[0:SIZE])
|
|
23 #pragma acc exit data copyout(block1[0:SIZE])
|
|
24 #endif
|
|
25 }
|
|
26
|
|
27 assert (!acc_is_present (block1, SIZE));
|
|
28
|
|
29 free (block1);
|
|
30 }
|
|
31
|
|
32 void
|
|
33 f2 (void)
|
|
34 {
|
|
35 char *block1 = (char *) malloc (SIZE);
|
|
36
|
|
37 #ifdef OPENACC_API
|
|
38 acc_copyin (block1, SIZE);
|
|
39 #else
|
|
40 #pragma acc enter data copyin(block1[0:SIZE])
|
|
41 #endif
|
|
42
|
|
43 #pragma acc data copy(block1[0:SIZE])
|
|
44 {
|
|
45 }
|
|
46
|
|
47 #ifdef OPENACC_API
|
|
48 acc_copyout (block1, SIZE);
|
|
49 #else
|
|
50 #pragma acc exit data copyout(block1[0:SIZE])
|
|
51 #endif
|
|
52
|
|
53 assert (!acc_is_present (block1, SIZE));
|
|
54
|
|
55 free (block1);
|
|
56 }
|
|
57
|
|
58 void
|
|
59 f3 (void)
|
|
60 {
|
|
61 char *block1 = (char *) malloc (SIZE);
|
|
62
|
|
63 #pragma acc data copy(block1[0:SIZE])
|
|
64 {
|
|
65 #ifdef OPENACC_API
|
|
66 acc_copyin (block1, SIZE);
|
|
67 acc_copyin (block1, SIZE);
|
|
68 acc_copyout (block1, SIZE);
|
|
69 acc_copyout (block1, SIZE);
|
|
70 #else
|
|
71 #pragma acc enter data copyin(block1[0:SIZE])
|
|
72 #pragma acc enter data copyin(block1[0:SIZE])
|
|
73 #pragma acc exit data copyout(block1[0:SIZE])
|
|
74 #pragma acc exit data copyout(block1[0:SIZE])
|
|
75 #endif
|
|
76 }
|
|
77
|
|
78 assert (!acc_is_present (block1, SIZE));
|
|
79
|
|
80 free (block1);
|
|
81 }
|
|
82
|
|
83 void
|
|
84 f4 (void)
|
|
85 {
|
|
86 char *block1 = (char *) malloc (SIZE);
|
|
87
|
|
88 #pragma acc data copy(block1[0:SIZE])
|
|
89 {
|
|
90 #ifdef OPENACC_API
|
|
91 acc_copyin (block1, SIZE);
|
|
92 #else
|
|
93 #pragma acc enter data copyin(block1[0:SIZE])
|
|
94 #endif
|
|
95
|
|
96 #pragma acc data copy(block1[0:SIZE])
|
|
97 {
|
|
98 #ifdef OPENACC_API
|
|
99 acc_copyin (block1, SIZE);
|
|
100 acc_copyout (block1, SIZE);
|
|
101 #else
|
|
102 #pragma acc enter data copyin(block1[0:SIZE])
|
|
103 #pragma acc exit data copyout(block1[0:SIZE])
|
|
104 #endif
|
|
105 }
|
|
106
|
|
107 #ifdef OPENACC_API
|
|
108 acc_copyout (block1, SIZE);
|
|
109 #else
|
|
110 #pragma acc exit data copyout(block1[0:SIZE])
|
|
111 #endif
|
|
112 }
|
|
113
|
|
114 assert (!acc_is_present (block1, SIZE));
|
|
115
|
|
116 free (block1);
|
|
117 }
|
|
118
|
|
119 void
|
|
120 f5 (void)
|
|
121 {
|
|
122 char *block1 = (char *) malloc (SIZE);
|
|
123
|
|
124 #ifdef OPENACC_API
|
|
125 acc_copyin (block1, SIZE);
|
|
126 #else
|
|
127 #pragma acc enter data copyin(block1[0:SIZE])
|
|
128 #endif
|
|
129
|
|
130 #pragma acc data copy(block1[0:SIZE])
|
|
131 {
|
|
132 #ifdef OPENACC_API
|
|
133 acc_copyin (block1, SIZE);
|
|
134 #else
|
|
135 #pragma acc enter data copyin(block1[0:SIZE])
|
|
136 #endif
|
|
137 #pragma acc data copy(block1[0:SIZE])
|
|
138 {
|
|
139 }
|
|
140 #ifdef OPENACC_API
|
|
141 acc_copyout (block1, SIZE);
|
|
142 #else
|
|
143 #pragma acc exit data copyout(block1[0:SIZE])
|
|
144 #endif
|
|
145 }
|
|
146 #ifdef OPENACC_API
|
|
147 acc_copyout (block1, SIZE);
|
|
148 #else
|
|
149 #pragma acc exit data copyout(block1[0:SIZE])
|
|
150 #endif
|
|
151
|
|
152 assert (!acc_is_present (block1, SIZE));
|
|
153
|
|
154 free (block1);
|
|
155 }
|
|
156
|
|
157 int
|
|
158 main (int argc, char *argv[])
|
|
159 {
|
|
160 f1 ();
|
|
161 f2 ();
|
|
162 f3 ();
|
|
163 f4 ();
|
|
164 f5 ();
|
|
165 return 0;
|
|
166 }
|