]>
Commit | Line | Data |
---|---|---|
41dbbb37 TS |
1 | ! OpenACC Runtime Library Definitions. |
2 | ||
3 | ! Copyright (C) 2014-2015 Free Software Foundation, Inc. | |
4 | ||
5 | ! Contributed by Tobias Burnus <burnus@net-b.de> | |
6 | ! and Mentor Embedded. | |
7 | ||
8 | ! This file is part of the GNU Offloading and Multi Processing Library | |
9 | ! (libgomp). | |
10 | ||
11 | ! Libgomp is free software; you can redistribute it and/or modify it | |
12 | ! under the terms of the GNU General Public License as published by | |
13 | ! the Free Software Foundation; either version 3, or (at your option) | |
14 | ! any later version. | |
15 | ||
16 | ! Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY | |
17 | ! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS | |
18 | ! FOR A PARTICULAR PURPOSE. See the GNU General Public License for | |
19 | ! more details. | |
20 | ||
21 | ! Under Section 7 of GPL version 3, you are granted additional | |
22 | ! permissions described in the GCC Runtime Library Exception, version | |
23 | ! 3.1, as published by the Free Software Foundation. | |
24 | ||
25 | ! You should have received a copy of the GNU General Public License and | |
26 | ! a copy of the GCC Runtime Library Exception along with this program; | |
27 | ! see the files COPYING3 and COPYING.RUNTIME respectively. If not, see | |
28 | ! <http://www.gnu.org/licenses/>. | |
29 | ||
30 | module openacc_kinds | |
31 | use iso_fortran_env, only: int32 | |
32 | implicit none | |
33 | ||
34 | private :: int32 | |
35 | public :: acc_device_kind | |
36 | ||
37 | integer, parameter :: acc_device_kind = int32 | |
38 | ||
39 | public :: acc_device_none, acc_device_default, acc_device_host | |
40 | public :: acc_device_not_host, acc_device_nvidia | |
41 | ||
42 | ! Keep in sync with include/gomp-constants.h. | |
43 | integer (acc_device_kind), parameter :: acc_device_none = 0 | |
44 | integer (acc_device_kind), parameter :: acc_device_default = 1 | |
45 | integer (acc_device_kind), parameter :: acc_device_host = 2 | |
46 | integer (acc_device_kind), parameter :: acc_device_host_nonshm = 3 | |
47 | integer (acc_device_kind), parameter :: acc_device_not_host = 4 | |
48 | integer (acc_device_kind), parameter :: acc_device_nvidia = 5 | |
49 | ||
50 | public :: acc_handle_kind | |
51 | ||
52 | integer, parameter :: acc_handle_kind = int32 | |
53 | ||
54 | public :: acc_async_noval, acc_async_sync | |
55 | ||
56 | ! Keep in sync with include/gomp-constants.h. | |
57 | integer (acc_handle_kind), parameter :: acc_async_noval = -1 | |
58 | integer (acc_handle_kind), parameter :: acc_async_sync = -2 | |
59 | ||
60 | end module | |
61 | ||
62 | module openacc_internal | |
63 | use openacc_kinds | |
64 | implicit none | |
65 | ||
66 | interface | |
67 | function acc_get_num_devices_h (d) | |
68 | import | |
69 | integer acc_get_num_devices_h | |
70 | integer (acc_device_kind) d | |
71 | end function | |
72 | ||
73 | subroutine acc_set_device_type_h (d) | |
74 | import | |
75 | integer (acc_device_kind) d | |
76 | end subroutine | |
77 | ||
78 | function acc_get_device_type_h () | |
79 | import | |
80 | integer (acc_device_kind) acc_get_device_type_h | |
81 | end function | |
82 | ||
83 | subroutine acc_set_device_num_h (n, d) | |
84 | import | |
85 | integer n | |
86 | integer (acc_device_kind) d | |
87 | end subroutine | |
88 | ||
89 | function acc_get_device_num_h (d) | |
90 | import | |
91 | integer acc_get_device_num_h | |
92 | integer (acc_device_kind) d | |
93 | end function | |
94 | ||
95 | function acc_async_test_h (a) | |
96 | logical acc_async_test_h | |
97 | integer a | |
98 | end function | |
99 | ||
100 | function acc_async_test_all_h () | |
101 | logical acc_async_test_all_h | |
102 | end function | |
103 | ||
104 | subroutine acc_wait_h (a) | |
105 | integer a | |
106 | end subroutine | |
107 | ||
108 | subroutine acc_wait_async_h (a1, a2) | |
109 | integer a1, a2 | |
110 | end subroutine | |
111 | ||
112 | subroutine acc_wait_all_h () | |
113 | end subroutine | |
114 | ||
115 | subroutine acc_wait_all_async_h (a) | |
116 | integer a | |
117 | end subroutine | |
118 | ||
119 | subroutine acc_init_h (d) | |
120 | import | |
121 | integer (acc_device_kind) d | |
122 | end subroutine | |
123 | ||
124 | subroutine acc_shutdown_h (d) | |
125 | import | |
126 | integer (acc_device_kind) d | |
127 | end subroutine | |
128 | ||
129 | function acc_on_device_h (d) | |
130 | import | |
131 | integer (acc_device_kind) d | |
132 | logical acc_on_device_h | |
133 | end function | |
134 | ||
135 | subroutine acc_copyin_32_h (a, len) | |
136 | use iso_c_binding, only: c_int32_t | |
137 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
138 | type (*), dimension (*) :: a | |
139 | integer (c_int32_t) len | |
140 | end subroutine | |
141 | ||
142 | subroutine acc_copyin_64_h (a, len) | |
143 | use iso_c_binding, only: c_int64_t | |
144 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
145 | type (*), dimension (*) :: a | |
146 | integer (c_int64_t) len | |
147 | end subroutine | |
148 | ||
149 | subroutine acc_copyin_array_h (a) | |
150 | type (*), dimension (..), contiguous :: a | |
151 | end subroutine | |
152 | ||
153 | subroutine acc_present_or_copyin_32_h (a, len) | |
154 | use iso_c_binding, only: c_int32_t | |
155 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
156 | type (*), dimension (*) :: a | |
157 | integer (c_int32_t) len | |
158 | end subroutine | |
159 | ||
160 | subroutine acc_present_or_copyin_64_h (a, len) | |
161 | use iso_c_binding, only: c_int64_t | |
162 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
163 | type (*), dimension (*) :: a | |
164 | integer (c_int64_t) len | |
165 | end subroutine | |
166 | ||
167 | subroutine acc_present_or_copyin_array_h (a) | |
168 | type (*), dimension (..), contiguous :: a | |
169 | end subroutine | |
170 | ||
171 | subroutine acc_create_32_h (a, len) | |
172 | use iso_c_binding, only: c_int32_t | |
173 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
174 | type (*), dimension (*) :: a | |
175 | integer (c_int32_t) len | |
176 | end subroutine | |
177 | ||
178 | subroutine acc_create_64_h (a, len) | |
179 | use iso_c_binding, only: c_int64_t | |
180 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
181 | type (*), dimension (*) :: a | |
182 | integer (c_int64_t) len | |
183 | end subroutine | |
184 | ||
185 | subroutine acc_create_array_h (a) | |
186 | type (*), dimension (..), contiguous :: a | |
187 | end subroutine | |
188 | ||
189 | subroutine acc_present_or_create_32_h (a, len) | |
190 | use iso_c_binding, only: c_int32_t | |
191 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
192 | type (*), dimension (*) :: a | |
193 | integer (c_int32_t) len | |
194 | end subroutine | |
195 | ||
196 | subroutine acc_present_or_create_64_h (a, len) | |
197 | use iso_c_binding, only: c_int64_t | |
198 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
199 | type (*), dimension (*) :: a | |
200 | integer (c_int64_t) len | |
201 | end subroutine | |
202 | ||
203 | subroutine acc_present_or_create_array_h (a) | |
204 | type (*), dimension (..), contiguous :: a | |
205 | end subroutine | |
206 | ||
207 | subroutine acc_copyout_32_h (a, len) | |
208 | use iso_c_binding, only: c_int32_t | |
209 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
210 | type (*), dimension (*) :: a | |
211 | integer (c_int32_t) len | |
212 | end subroutine | |
213 | ||
214 | subroutine acc_copyout_64_h (a, len) | |
215 | use iso_c_binding, only: c_int64_t | |
216 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
217 | type (*), dimension (*) :: a | |
218 | integer (c_int64_t) len | |
219 | end subroutine | |
220 | ||
221 | subroutine acc_copyout_array_h (a) | |
222 | type (*), dimension (..), contiguous :: a | |
223 | end subroutine | |
224 | ||
225 | subroutine acc_delete_32_h (a, len) | |
226 | use iso_c_binding, only: c_int32_t | |
227 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
228 | type (*), dimension (*) :: a | |
229 | integer (c_int32_t) len | |
230 | end subroutine | |
231 | ||
232 | subroutine acc_delete_64_h (a, len) | |
233 | use iso_c_binding, only: c_int64_t | |
234 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
235 | type (*), dimension (*) :: a | |
236 | integer (c_int64_t) len | |
237 | end subroutine | |
238 | ||
239 | subroutine acc_delete_array_h (a) | |
240 | type (*), dimension (..), contiguous :: a | |
241 | end subroutine | |
242 | ||
243 | subroutine acc_update_device_32_h (a, len) | |
244 | use iso_c_binding, only: c_int32_t | |
245 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
246 | type (*), dimension (*) :: a | |
247 | integer (c_int32_t) len | |
248 | end subroutine | |
249 | ||
250 | subroutine acc_update_device_64_h (a, len) | |
251 | use iso_c_binding, only: c_int64_t | |
252 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
253 | type (*), dimension (*) :: a | |
254 | integer (c_int64_t) len | |
255 | end subroutine | |
256 | ||
257 | subroutine acc_update_device_array_h (a) | |
258 | type (*), dimension (..), contiguous :: a | |
259 | end subroutine | |
260 | ||
261 | subroutine acc_update_self_32_h (a, len) | |
262 | use iso_c_binding, only: c_int32_t | |
263 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
264 | type (*), dimension (*) :: a | |
265 | integer (c_int32_t) len | |
266 | end subroutine | |
267 | ||
268 | subroutine acc_update_self_64_h (a, len) | |
269 | use iso_c_binding, only: c_int64_t | |
270 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
271 | type (*), dimension (*) :: a | |
272 | integer (c_int64_t) len | |
273 | end subroutine | |
274 | ||
275 | subroutine acc_update_self_array_h (a) | |
276 | type (*), dimension (..), contiguous :: a | |
277 | end subroutine | |
278 | ||
279 | function acc_is_present_32_h (a, len) | |
280 | use iso_c_binding, only: c_int32_t | |
281 | logical acc_is_present_32_h | |
282 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
283 | type (*), dimension (*) :: a | |
284 | integer (c_int32_t) len | |
285 | end function | |
286 | ||
287 | function acc_is_present_64_h (a, len) | |
288 | use iso_c_binding, only: c_int64_t | |
289 | logical acc_is_present_64_h | |
290 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
291 | type (*), dimension (*) :: a | |
292 | integer (c_int64_t) len | |
293 | end function | |
294 | ||
295 | function acc_is_present_array_h (a) | |
296 | logical acc_is_present_array_h | |
297 | type (*), dimension (..), contiguous :: a | |
298 | end function | |
299 | end interface | |
300 | ||
301 | interface | |
302 | function acc_get_num_devices_l (d) & | |
303 | bind (C, name = "acc_get_num_devices") | |
304 | use iso_c_binding, only: c_int | |
305 | integer (c_int) :: acc_get_num_devices_l | |
306 | integer (c_int), value :: d | |
307 | end function | |
308 | ||
309 | subroutine acc_set_device_type_l (d) & | |
310 | bind (C, name = "acc_set_device_type") | |
311 | use iso_c_binding, only: c_int | |
312 | integer (c_int), value :: d | |
313 | end subroutine | |
314 | ||
315 | function acc_get_device_type_l () & | |
316 | bind (C, name = "acc_get_device_type") | |
317 | use iso_c_binding, only: c_int | |
318 | integer (c_int) :: acc_get_device_type_l | |
319 | end function | |
320 | ||
321 | subroutine acc_set_device_num_l (n, d) & | |
322 | bind (C, name = "acc_set_device_num") | |
323 | use iso_c_binding, only: c_int | |
324 | integer (c_int), value :: n, d | |
325 | end subroutine | |
326 | ||
327 | function acc_get_device_num_l (d) & | |
328 | bind (C, name = "acc_get_device_num") | |
329 | use iso_c_binding, only: c_int | |
330 | integer (c_int) :: acc_get_device_num_l | |
331 | integer (c_int), value :: d | |
332 | end function | |
333 | ||
334 | function acc_async_test_l (a) & | |
335 | bind (C, name = "acc_async_test") | |
336 | use iso_c_binding, only: c_int | |
337 | integer (c_int) :: acc_async_test_l | |
338 | integer (c_int), value :: a | |
339 | end function | |
340 | ||
341 | function acc_async_test_all_l () & | |
342 | bind (C, name = "acc_async_test_all") | |
343 | use iso_c_binding, only: c_int | |
344 | integer (c_int) :: acc_async_test_all_l | |
345 | end function | |
346 | ||
347 | subroutine acc_wait_l (a) & | |
348 | bind (C, name = "acc_wait") | |
349 | use iso_c_binding, only: c_int | |
350 | integer (c_int), value :: a | |
351 | end subroutine | |
352 | ||
353 | subroutine acc_wait_async_l (a1, a2) & | |
354 | bind (C, name = "acc_wait_async") | |
355 | use iso_c_binding, only: c_int | |
356 | integer (c_int), value :: a1, a2 | |
357 | end subroutine | |
358 | ||
359 | subroutine acc_wait_all_l () & | |
360 | bind (C, name = "acc_wait_all") | |
361 | use iso_c_binding, only: c_int | |
362 | end subroutine | |
363 | ||
364 | subroutine acc_wait_all_async_l (a) & | |
365 | bind (C, name = "acc_wait_all_async") | |
366 | use iso_c_binding, only: c_int | |
367 | integer (c_int), value :: a | |
368 | end subroutine | |
369 | ||
370 | subroutine acc_init_l (d) & | |
371 | bind (C, name = "acc_init") | |
372 | use iso_c_binding, only: c_int | |
373 | integer (c_int), value :: d | |
374 | end subroutine | |
375 | ||
376 | subroutine acc_shutdown_l (d) & | |
377 | bind (C, name = "acc_shutdown") | |
378 | use iso_c_binding, only: c_int | |
379 | integer (c_int), value :: d | |
380 | end subroutine | |
381 | ||
382 | function acc_on_device_l (d) & | |
383 | bind (C, name = "acc_on_device") | |
384 | use iso_c_binding, only: c_int | |
385 | integer (c_int) :: acc_on_device_l | |
386 | integer (c_int), value :: d | |
387 | end function | |
388 | ||
389 | subroutine acc_copyin_l (a, len) & | |
390 | bind (C, name = "acc_copyin") | |
391 | use iso_c_binding, only: c_size_t | |
392 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
393 | type (*), dimension (*) :: a | |
394 | integer (c_size_t), value :: len | |
395 | end subroutine | |
396 | ||
397 | subroutine acc_present_or_copyin_l (a, len) & | |
398 | bind (C, name = "acc_present_or_copyin") | |
399 | use iso_c_binding, only: c_size_t | |
400 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
401 | type (*), dimension (*) :: a | |
402 | integer (c_size_t), value :: len | |
403 | end subroutine | |
404 | ||
405 | subroutine acc_create_l (a, len) & | |
406 | bind (C, name = "acc_create") | |
407 | use iso_c_binding, only: c_size_t | |
408 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
409 | type (*), dimension (*) :: a | |
410 | integer (c_size_t), value :: len | |
411 | end subroutine | |
412 | ||
413 | subroutine acc_present_or_create_l (a, len) & | |
414 | bind (C, name = "acc_present_or_create") | |
415 | use iso_c_binding, only: c_size_t | |
416 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
417 | type (*), dimension (*) :: a | |
418 | integer (c_size_t), value :: len | |
419 | end subroutine | |
420 | ||
421 | subroutine acc_copyout_l (a, len) & | |
422 | bind (C, name = "acc_copyout") | |
423 | use iso_c_binding, only: c_size_t | |
424 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
425 | type (*), dimension (*) :: a | |
426 | integer (c_size_t), value :: len | |
427 | end subroutine | |
428 | ||
429 | subroutine acc_delete_l (a, len) & | |
430 | bind (C, name = "acc_delete") | |
431 | use iso_c_binding, only: c_size_t | |
432 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
433 | type (*), dimension (*) :: a | |
434 | integer (c_size_t), value :: len | |
435 | end subroutine | |
436 | ||
437 | subroutine acc_update_device_l (a, len) & | |
438 | bind (C, name = "acc_update_device") | |
439 | use iso_c_binding, only: c_size_t | |
440 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
441 | type (*), dimension (*) :: a | |
442 | integer (c_size_t), value :: len | |
443 | end subroutine | |
444 | ||
445 | subroutine acc_update_self_l (a, len) & | |
446 | bind (C, name = "acc_update_self") | |
447 | use iso_c_binding, only: c_size_t | |
448 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
449 | type (*), dimension (*) :: a | |
450 | integer (c_size_t), value :: len | |
451 | end subroutine | |
452 | ||
453 | function acc_is_present_l (a, len) & | |
454 | bind (C, name = "acc_is_present") | |
455 | use iso_c_binding, only: c_int32_t, c_size_t | |
456 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
457 | integer (c_int32_t) :: acc_is_present_l | |
458 | type (*), dimension (*) :: a | |
459 | integer (c_size_t), value :: len | |
460 | end function | |
461 | end interface | |
462 | end module | |
463 | ||
464 | module openacc | |
465 | use openacc_kinds | |
466 | use openacc_internal | |
467 | implicit none | |
468 | ||
469 | public :: openacc_version | |
470 | ||
471 | public :: acc_get_num_devices, acc_set_device_type, acc_get_device_type | |
472 | public :: acc_set_device_num, acc_get_device_num, acc_async_test | |
473 | public :: acc_async_test_all, acc_wait, acc_wait_async, acc_wait_all | |
474 | public :: acc_wait_all_async, acc_init, acc_shutdown, acc_on_device | |
475 | public :: acc_copyin, acc_present_or_copyin, acc_pcopyin, acc_create | |
476 | public :: acc_present_or_create, acc_pcreate, acc_copyout, acc_delete | |
477 | public :: acc_update_device, acc_update_self, acc_is_present | |
478 | ||
479 | integer, parameter :: openacc_version = 201306 | |
480 | ||
481 | interface acc_get_num_devices | |
482 | procedure :: acc_get_num_devices_h | |
483 | end interface | |
484 | ||
485 | interface acc_set_device_type | |
486 | procedure :: acc_set_device_type_h | |
487 | end interface | |
488 | ||
489 | interface acc_get_device_type | |
490 | procedure :: acc_get_device_type_h | |
491 | end interface | |
492 | ||
493 | interface acc_set_device_num | |
494 | procedure :: acc_set_device_num_h | |
495 | end interface | |
496 | ||
497 | interface acc_get_device_num | |
498 | procedure :: acc_get_device_num_h | |
499 | end interface | |
500 | ||
501 | interface acc_async_test | |
502 | procedure :: acc_async_test_h | |
503 | end interface | |
504 | ||
505 | interface acc_async_test_all | |
506 | procedure :: acc_async_test_all_h | |
507 | end interface | |
508 | ||
509 | interface acc_wait | |
510 | procedure :: acc_wait_h | |
511 | end interface | |
512 | ||
513 | interface acc_wait_async | |
514 | procedure :: acc_wait_async_h | |
515 | end interface | |
516 | ||
517 | interface acc_wait_all | |
518 | procedure :: acc_wait_all_h | |
519 | end interface | |
520 | ||
521 | interface acc_wait_all_async | |
522 | procedure :: acc_wait_all_async_h | |
523 | end interface | |
524 | ||
525 | interface acc_init | |
526 | procedure :: acc_init_h | |
527 | end interface | |
528 | ||
529 | interface acc_shutdown | |
530 | procedure :: acc_shutdown_h | |
531 | end interface | |
532 | ||
533 | interface acc_on_device | |
534 | procedure :: acc_on_device_h | |
535 | end interface | |
536 | ||
537 | ! acc_malloc: Only available in C/C++ | |
538 | ! acc_free: Only available in C/C++ | |
539 | ||
540 | ! As vendor extension, the following code supports both 32bit and 64bit | |
541 | ! arguments for "size"; the OpenACC standard only permits default-kind | |
542 | ! integers, which are of kind 4 (i.e. 32 bits). | |
543 | ! Additionally, the two-argument version also takes arrays as argument. | |
544 | ! and the one argument version also scalars. Note that the code assumes | |
545 | ! that the arrays are contiguous. | |
546 | ||
547 | interface acc_copyin | |
548 | procedure :: acc_copyin_32_h | |
549 | procedure :: acc_copyin_64_h | |
550 | procedure :: acc_copyin_array_h | |
551 | end interface | |
552 | ||
553 | interface acc_present_or_copyin | |
554 | procedure :: acc_present_or_copyin_32_h | |
555 | procedure :: acc_present_or_copyin_64_h | |
556 | procedure :: acc_present_or_copyin_array_h | |
557 | end interface | |
558 | ||
559 | interface acc_pcopyin | |
560 | procedure :: acc_present_or_copyin_32_h | |
561 | procedure :: acc_present_or_copyin_64_h | |
562 | procedure :: acc_present_or_copyin_array_h | |
563 | end interface | |
564 | ||
565 | interface acc_create | |
566 | procedure :: acc_create_32_h | |
567 | procedure :: acc_create_64_h | |
568 | procedure :: acc_create_array_h | |
569 | end interface | |
570 | ||
571 | interface acc_present_or_create | |
572 | procedure :: acc_present_or_create_32_h | |
573 | procedure :: acc_present_or_create_64_h | |
574 | procedure :: acc_present_or_create_array_h | |
575 | end interface | |
576 | ||
577 | interface acc_pcreate | |
578 | procedure :: acc_present_or_create_32_h | |
579 | procedure :: acc_present_or_create_64_h | |
580 | procedure :: acc_present_or_create_array_h | |
581 | end interface | |
582 | ||
583 | interface acc_copyout | |
584 | procedure :: acc_copyout_32_h | |
585 | procedure :: acc_copyout_64_h | |
586 | procedure :: acc_copyout_array_h | |
587 | end interface | |
588 | ||
589 | interface acc_delete | |
590 | procedure :: acc_delete_32_h | |
591 | procedure :: acc_delete_64_h | |
592 | procedure :: acc_delete_array_h | |
593 | end interface | |
594 | ||
595 | interface acc_update_device | |
596 | procedure :: acc_update_device_32_h | |
597 | procedure :: acc_update_device_64_h | |
598 | procedure :: acc_update_device_array_h | |
599 | end interface | |
600 | ||
601 | interface acc_update_self | |
602 | procedure :: acc_update_self_32_h | |
603 | procedure :: acc_update_self_64_h | |
604 | procedure :: acc_update_self_array_h | |
605 | end interface | |
606 | ||
607 | ! acc_map_data: Only available in C/C++ | |
608 | ! acc_unmap_data: Only available in C/C++ | |
609 | ! acc_deviceptr: Only available in C/C++ | |
610 | ! acc_hostptr: Only available in C/C++ | |
611 | ||
612 | interface acc_is_present | |
613 | procedure :: acc_is_present_32_h | |
614 | procedure :: acc_is_present_64_h | |
615 | procedure :: acc_is_present_array_h | |
616 | end interface | |
617 | ||
618 | ! acc_memcpy_to_device: Only available in C/C++ | |
619 | ! acc_memcpy_from_device: Only available in C/C++ | |
620 | ||
621 | end module | |
622 | ||
623 | function acc_get_num_devices_h (d) | |
624 | use openacc_internal, only: acc_get_num_devices_l | |
625 | use openacc_kinds | |
626 | integer acc_get_num_devices_h | |
627 | integer (acc_device_kind) d | |
628 | acc_get_num_devices_h = acc_get_num_devices_l (d) | |
629 | end function | |
630 | ||
631 | subroutine acc_set_device_type_h (d) | |
632 | use openacc_internal, only: acc_set_device_type_l | |
633 | use openacc_kinds | |
634 | integer (acc_device_kind) d | |
635 | call acc_set_device_type_l (d) | |
636 | end subroutine | |
637 | ||
638 | function acc_get_device_type_h () | |
639 | use openacc_internal, only: acc_get_device_type_l | |
640 | use openacc_kinds | |
641 | integer (acc_device_kind) acc_get_device_type_h | |
642 | acc_get_device_type_h = acc_get_device_type_l () | |
643 | end function | |
644 | ||
645 | subroutine acc_set_device_num_h (n, d) | |
646 | use openacc_internal, only: acc_set_device_num_l | |
647 | use openacc_kinds | |
648 | integer n | |
649 | integer (acc_device_kind) d | |
650 | call acc_set_device_num_l (n, d) | |
651 | end subroutine | |
652 | ||
653 | function acc_get_device_num_h (d) | |
654 | use openacc_internal, only: acc_get_device_num_l | |
655 | use openacc_kinds | |
656 | integer acc_get_device_num_h | |
657 | integer (acc_device_kind) d | |
658 | acc_get_device_num_h = acc_get_device_num_l (d) | |
659 | end function | |
660 | ||
661 | function acc_async_test_h (a) | |
662 | use openacc_internal, only: acc_async_test_l | |
663 | logical acc_async_test_h | |
664 | integer a | |
665 | if (acc_async_test_l (a) .eq. 1) then | |
666 | acc_async_test_h = .TRUE. | |
667 | else | |
668 | acc_async_test_h = .FALSE. | |
669 | end if | |
670 | end function | |
671 | ||
672 | function acc_async_test_all_h () | |
673 | use openacc_internal, only: acc_async_test_all_l | |
674 | logical acc_async_test_all_h | |
675 | if (acc_async_test_all_l () .eq. 1) then | |
676 | acc_async_test_all_h = .TRUE. | |
677 | else | |
678 | acc_async_test_all_h = .FALSE. | |
679 | end if | |
680 | end function | |
681 | ||
682 | subroutine acc_wait_h (a) | |
683 | use openacc_internal, only: acc_wait_l | |
684 | integer a | |
685 | call acc_wait_l (a) | |
686 | end subroutine | |
687 | ||
688 | subroutine acc_wait_async_h (a1, a2) | |
689 | use openacc_internal, only: acc_wait_async_l | |
690 | integer a1, a2 | |
691 | call acc_wait_async_l (a1, a2) | |
692 | end subroutine | |
693 | ||
694 | subroutine acc_wait_all_h () | |
695 | use openacc_internal, only: acc_wait_all_l | |
696 | call acc_wait_all_l () | |
697 | end subroutine | |
698 | ||
699 | subroutine acc_wait_all_async_h (a) | |
700 | use openacc_internal, only: acc_wait_all_async_l | |
701 | integer a | |
702 | call acc_wait_all_async_l (a) | |
703 | end subroutine | |
704 | ||
705 | subroutine acc_init_h (d) | |
706 | use openacc_internal, only: acc_init_l | |
707 | use openacc_kinds | |
708 | integer (acc_device_kind) d | |
709 | call acc_init_l (d) | |
710 | end subroutine | |
711 | ||
712 | subroutine acc_shutdown_h (d) | |
713 | use openacc_internal, only: acc_shutdown_l | |
714 | use openacc_kinds | |
715 | integer (acc_device_kind) d | |
716 | call acc_shutdown_l (d) | |
717 | end subroutine | |
718 | ||
719 | function acc_on_device_h (d) | |
720 | use openacc_internal, only: acc_on_device_l | |
721 | use openacc_kinds | |
722 | integer (acc_device_kind) d | |
723 | logical acc_on_device_h | |
724 | if (acc_on_device_l (d) .eq. 1) then | |
725 | acc_on_device_h = .TRUE. | |
726 | else | |
727 | acc_on_device_h = .FALSE. | |
728 | end if | |
729 | end function | |
730 | ||
731 | subroutine acc_copyin_32_h (a, len) | |
732 | use iso_c_binding, only: c_int32_t, c_size_t | |
733 | use openacc_internal, only: acc_copyin_l | |
734 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
735 | type (*), dimension (*) :: a | |
736 | integer (c_int32_t) len | |
737 | call acc_copyin_l (a, int (len, kind = c_size_t)) | |
738 | end subroutine | |
739 | ||
740 | subroutine acc_copyin_64_h (a, len) | |
741 | use iso_c_binding, only: c_int64_t, c_size_t | |
742 | use openacc_internal, only: acc_copyin_l | |
743 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
744 | type (*), dimension (*) :: a | |
745 | integer (c_int64_t) len | |
746 | call acc_copyin_l (a, int (len, kind = c_size_t)) | |
747 | end subroutine | |
748 | ||
749 | subroutine acc_copyin_array_h (a) | |
750 | use openacc_internal, only: acc_copyin_l | |
751 | type (*), dimension (..), contiguous :: a | |
752 | call acc_copyin_l (a, sizeof (a)) | |
753 | end subroutine | |
754 | ||
755 | subroutine acc_present_or_copyin_32_h (a, len) | |
756 | use iso_c_binding, only: c_int32_t, c_size_t | |
757 | use openacc_internal, only: acc_present_or_copyin_l | |
758 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
759 | type (*), dimension (*) :: a | |
760 | integer (c_int32_t) len | |
761 | call acc_present_or_copyin_l (a, int (len, kind = c_size_t)) | |
762 | end subroutine | |
763 | ||
764 | subroutine acc_present_or_copyin_64_h (a, len) | |
765 | use iso_c_binding, only: c_int64_t, c_size_t | |
766 | use openacc_internal, only: acc_present_or_copyin_l | |
767 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
768 | type (*), dimension (*) :: a | |
769 | integer (c_int64_t) len | |
770 | call acc_present_or_copyin_l (a, int (len, kind = c_size_t)) | |
771 | end subroutine | |
772 | ||
773 | subroutine acc_present_or_copyin_array_h (a) | |
774 | use openacc_internal, only: acc_present_or_copyin_l | |
775 | type (*), dimension (..), contiguous :: a | |
776 | call acc_present_or_copyin_l (a, sizeof (a)) | |
777 | end subroutine | |
778 | ||
779 | subroutine acc_create_32_h (a, len) | |
780 | use iso_c_binding, only: c_int32_t, c_size_t | |
781 | use openacc_internal, only: acc_create_l | |
782 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
783 | type (*), dimension (*) :: a | |
784 | integer (c_int32_t) len | |
785 | call acc_create_l (a, int (len, kind = c_size_t)) | |
786 | end subroutine | |
787 | ||
788 | subroutine acc_create_64_h (a, len) | |
789 | use iso_c_binding, only: c_int64_t, c_size_t | |
790 | use openacc_internal, only: acc_create_l | |
791 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
792 | type (*), dimension (*) :: a | |
793 | integer (c_int64_t) len | |
794 | call acc_create_l (a, int (len, kind = c_size_t)) | |
795 | end subroutine | |
796 | ||
797 | subroutine acc_create_array_h (a) | |
798 | use openacc_internal, only: acc_create_l | |
799 | type (*), dimension (..), contiguous :: a | |
800 | call acc_create_l (a, sizeof (a)) | |
801 | end subroutine | |
802 | ||
803 | subroutine acc_present_or_create_32_h (a, len) | |
804 | use iso_c_binding, only: c_int32_t, c_size_t | |
805 | use openacc_internal, only: acc_present_or_create_l | |
806 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
807 | type (*), dimension (*) :: a | |
808 | integer (c_int32_t) len | |
809 | call acc_present_or_create_l (a, int (len, kind = c_size_t)) | |
810 | end subroutine | |
811 | ||
812 | subroutine acc_present_or_create_64_h (a, len) | |
813 | use iso_c_binding, only: c_int64_t, c_size_t | |
814 | use openacc_internal, only: acc_present_or_create_l | |
815 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
816 | type (*), dimension (*) :: a | |
817 | integer (c_int64_t) len | |
818 | call acc_present_or_create_l (a, int (len, kind = c_size_t)) | |
819 | end subroutine | |
820 | ||
821 | subroutine acc_present_or_create_array_h (a) | |
822 | use openacc_internal, only: acc_present_or_create_l | |
823 | type (*), dimension (..), contiguous :: a | |
824 | call acc_present_or_create_l (a, sizeof (a)) | |
825 | end subroutine | |
826 | ||
827 | subroutine acc_copyout_32_h (a, len) | |
828 | use iso_c_binding, only: c_int32_t, c_size_t | |
829 | use openacc_internal, only: acc_copyout_l | |
830 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
831 | type (*), dimension (*) :: a | |
832 | integer (c_int32_t) len | |
833 | call acc_copyout_l (a, int (len, kind = c_size_t)) | |
834 | end subroutine | |
835 | ||
836 | subroutine acc_copyout_64_h (a, len) | |
837 | use iso_c_binding, only: c_int64_t, c_size_t | |
838 | use openacc_internal, only: acc_copyout_l | |
839 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
840 | type (*), dimension (*) :: a | |
841 | integer (c_int64_t) len | |
842 | call acc_copyout_l (a, int (len, kind = c_size_t)) | |
843 | end subroutine | |
844 | ||
845 | subroutine acc_copyout_array_h (a) | |
846 | use openacc_internal, only: acc_copyout_l | |
847 | type (*), dimension (..), contiguous :: a | |
848 | call acc_copyout_l (a, sizeof (a)) | |
849 | end subroutine | |
850 | ||
851 | subroutine acc_delete_32_h (a, len) | |
852 | use iso_c_binding, only: c_int32_t, c_size_t | |
853 | use openacc_internal, only: acc_delete_l | |
854 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
855 | type (*), dimension (*) :: a | |
856 | integer (c_int32_t) len | |
857 | call acc_delete_l (a, int (len, kind = c_size_t)) | |
858 | end subroutine | |
859 | ||
860 | subroutine acc_delete_64_h (a, len) | |
861 | use iso_c_binding, only: c_int64_t, c_size_t | |
862 | use openacc_internal, only: acc_delete_l | |
863 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
864 | type (*), dimension (*) :: a | |
865 | integer (c_int64_t) len | |
866 | call acc_delete_l (a, int (len, kind = c_size_t)) | |
867 | end subroutine | |
868 | ||
869 | subroutine acc_delete_array_h (a) | |
870 | use openacc_internal, only: acc_delete_l | |
871 | type (*), dimension (..), contiguous :: a | |
872 | call acc_delete_l (a, sizeof (a)) | |
873 | end subroutine | |
874 | ||
875 | subroutine acc_update_device_32_h (a, len) | |
876 | use iso_c_binding, only: c_int32_t, c_size_t | |
877 | use openacc_internal, only: acc_update_device_l | |
878 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
879 | type (*), dimension (*) :: a | |
880 | integer (c_int32_t) len | |
881 | call acc_update_device_l (a, int (len, kind = c_size_t)) | |
882 | end subroutine | |
883 | ||
884 | subroutine acc_update_device_64_h (a, len) | |
885 | use iso_c_binding, only: c_int64_t, c_size_t | |
886 | use openacc_internal, only: acc_update_device_l | |
887 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
888 | type (*), dimension (*) :: a | |
889 | integer (c_int64_t) len | |
890 | call acc_update_device_l (a, int (len, kind = c_size_t)) | |
891 | end subroutine | |
892 | ||
893 | subroutine acc_update_device_array_h (a) | |
894 | use openacc_internal, only: acc_update_device_l | |
895 | type (*), dimension (..), contiguous :: a | |
896 | call acc_update_device_l (a, sizeof (a)) | |
897 | end subroutine | |
898 | ||
899 | subroutine acc_update_self_32_h (a, len) | |
900 | use iso_c_binding, only: c_int32_t, c_size_t | |
901 | use openacc_internal, only: acc_update_self_l | |
902 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
903 | type (*), dimension (*) :: a | |
904 | integer (c_int32_t) len | |
905 | call acc_update_self_l (a, int (len, kind = c_size_t)) | |
906 | end subroutine | |
907 | ||
908 | subroutine acc_update_self_64_h (a, len) | |
909 | use iso_c_binding, only: c_int64_t, c_size_t | |
910 | use openacc_internal, only: acc_update_self_l | |
911 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
912 | type (*), dimension (*) :: a | |
913 | integer (c_int64_t) len | |
914 | call acc_update_self_l (a, int (len, kind = c_size_t)) | |
915 | end subroutine | |
916 | ||
917 | subroutine acc_update_self_array_h (a) | |
918 | use openacc_internal, only: acc_update_self_l | |
919 | type (*), dimension (..), contiguous :: a | |
920 | call acc_update_self_l (a, sizeof (a)) | |
921 | end subroutine | |
922 | ||
923 | function acc_is_present_32_h (a, len) | |
924 | use iso_c_binding, only: c_int32_t, c_size_t | |
925 | use openacc_internal, only: acc_is_present_l | |
926 | logical acc_is_present_32_h | |
927 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
928 | type (*), dimension (*) :: a | |
929 | integer (c_int32_t) len | |
930 | if (acc_is_present_l (a, int (len, kind = c_size_t)) .eq. 1) then | |
931 | acc_is_present_32_h = .TRUE. | |
932 | else | |
933 | acc_is_present_32_h = .FALSE. | |
934 | end if | |
935 | end function | |
936 | ||
937 | function acc_is_present_64_h (a, len) | |
938 | use iso_c_binding, only: c_int64_t, c_size_t | |
939 | use openacc_internal, only: acc_is_present_l | |
940 | logical acc_is_present_64_h | |
941 | !GCC$ ATTRIBUTES NO_ARG_CHECK :: a | |
942 | type (*), dimension (*) :: a | |
943 | integer (c_int64_t) len | |
944 | if (acc_is_present_l (a, int (len, kind = c_size_t)) .eq. 1) then | |
945 | acc_is_present_64_h = .TRUE. | |
946 | else | |
947 | acc_is_present_64_h = .FALSE. | |
948 | end if | |
949 | end function | |
950 | ||
951 | function acc_is_present_array_h (a) | |
952 | use openacc_internal, only: acc_is_present_l | |
953 | logical acc_is_present_array_h | |
954 | type (*), dimension (..), contiguous :: a | |
955 | acc_is_present_array_h = acc_is_present_l (a, sizeof (a)) == 1 | |
956 | end function |