Add tests for print from offload target.
[gcc.git] / libgomp / openacc.f90
1 ! OpenACC Runtime Library Definitions.
2
3 ! Copyright (C) 2014-2019 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 removed.
47 integer (acc_device_kind), parameter :: acc_device_not_host = 4
48 integer (acc_device_kind), parameter :: acc_device_nvidia = 5
49 integer (acc_device_kind), parameter :: acc_device_gcn = 8
50
51 public :: acc_handle_kind
52
53 integer, parameter :: acc_handle_kind = int32
54
55 public :: acc_async_noval, acc_async_sync
56
57 ! Keep in sync with include/gomp-constants.h.
58 integer (acc_handle_kind), parameter :: acc_async_noval = -1
59 integer (acc_handle_kind), parameter :: acc_async_sync = -2
60
61 end module
62
63 module openacc_internal
64 use openacc_kinds
65 implicit none
66
67 interface
68 function acc_get_num_devices_h (d)
69 import
70 integer acc_get_num_devices_h
71 integer (acc_device_kind) d
72 end function
73
74 subroutine acc_set_device_type_h (d)
75 import
76 integer (acc_device_kind) d
77 end subroutine
78
79 function acc_get_device_type_h ()
80 import
81 integer (acc_device_kind) acc_get_device_type_h
82 end function
83
84 subroutine acc_set_device_num_h (n, d)
85 import
86 integer n
87 integer (acc_device_kind) d
88 end subroutine
89
90 function acc_get_device_num_h (d)
91 import
92 integer acc_get_device_num_h
93 integer (acc_device_kind) d
94 end function
95
96 function acc_async_test_h (a)
97 logical acc_async_test_h
98 integer a
99 end function
100
101 function acc_async_test_all_h ()
102 logical acc_async_test_all_h
103 end function
104
105 subroutine acc_wait_h (a)
106 integer a
107 end subroutine
108
109 subroutine acc_wait_async_h (a1, a2)
110 integer a1, a2
111 end subroutine
112
113 subroutine acc_wait_all_h ()
114 end subroutine
115
116 subroutine acc_wait_all_async_h (a)
117 integer a
118 end subroutine
119
120 subroutine acc_init_h (d)
121 import
122 integer (acc_device_kind) d
123 end subroutine
124
125 subroutine acc_shutdown_h (d)
126 import
127 integer (acc_device_kind) d
128 end subroutine
129
130 function acc_on_device_h (d)
131 import
132 integer (acc_device_kind) d
133 logical acc_on_device_h
134 end function
135
136 subroutine acc_copyin_32_h (a, len)
137 use iso_c_binding, only: c_int32_t
138 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
139 type (*), dimension (*) :: a
140 integer (c_int32_t) len
141 end subroutine
142
143 subroutine acc_copyin_64_h (a, len)
144 use iso_c_binding, only: c_int64_t
145 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
146 type (*), dimension (*) :: a
147 integer (c_int64_t) len
148 end subroutine
149
150 subroutine acc_copyin_array_h (a)
151 type (*), dimension (..), contiguous :: a
152 end subroutine
153
154 subroutine acc_present_or_copyin_32_h (a, len)
155 use iso_c_binding, only: c_int32_t
156 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
157 type (*), dimension (*) :: a
158 integer (c_int32_t) len
159 end subroutine
160
161 subroutine acc_present_or_copyin_64_h (a, len)
162 use iso_c_binding, only: c_int64_t
163 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
164 type (*), dimension (*) :: a
165 integer (c_int64_t) len
166 end subroutine
167
168 subroutine acc_present_or_copyin_array_h (a)
169 type (*), dimension (..), contiguous :: a
170 end subroutine
171
172 subroutine acc_create_32_h (a, len)
173 use iso_c_binding, only: c_int32_t
174 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
175 type (*), dimension (*) :: a
176 integer (c_int32_t) len
177 end subroutine
178
179 subroutine acc_create_64_h (a, len)
180 use iso_c_binding, only: c_int64_t
181 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
182 type (*), dimension (*) :: a
183 integer (c_int64_t) len
184 end subroutine
185
186 subroutine acc_create_array_h (a)
187 type (*), dimension (..), contiguous :: a
188 end subroutine
189
190 subroutine acc_present_or_create_32_h (a, len)
191 use iso_c_binding, only: c_int32_t
192 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
193 type (*), dimension (*) :: a
194 integer (c_int32_t) len
195 end subroutine
196
197 subroutine acc_present_or_create_64_h (a, len)
198 use iso_c_binding, only: c_int64_t
199 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
200 type (*), dimension (*) :: a
201 integer (c_int64_t) len
202 end subroutine
203
204 subroutine acc_present_or_create_array_h (a)
205 type (*), dimension (..), contiguous :: a
206 end subroutine
207
208 subroutine acc_copyout_32_h (a, len)
209 use iso_c_binding, only: c_int32_t
210 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
211 type (*), dimension (*) :: a
212 integer (c_int32_t) len
213 end subroutine
214
215 subroutine acc_copyout_64_h (a, len)
216 use iso_c_binding, only: c_int64_t
217 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
218 type (*), dimension (*) :: a
219 integer (c_int64_t) len
220 end subroutine
221
222 subroutine acc_copyout_array_h (a)
223 type (*), dimension (..), contiguous :: a
224 end subroutine
225
226 subroutine acc_copyout_finalize_32_h (a, len)
227 use iso_c_binding, only: c_int32_t
228 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
229 type (*), dimension (*) :: a
230 integer (c_int32_t) len
231 end subroutine
232
233 subroutine acc_copyout_finalize_64_h (a, len)
234 use iso_c_binding, only: c_int64_t
235 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
236 type (*), dimension (*) :: a
237 integer (c_int64_t) len
238 end subroutine
239
240 subroutine acc_copyout_finalize_array_h (a)
241 type (*), dimension (..), contiguous :: a
242 end subroutine
243
244 subroutine acc_delete_32_h (a, len)
245 use iso_c_binding, only: c_int32_t
246 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
247 type (*), dimension (*) :: a
248 integer (c_int32_t) len
249 end subroutine
250
251 subroutine acc_delete_64_h (a, len)
252 use iso_c_binding, only: c_int64_t
253 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
254 type (*), dimension (*) :: a
255 integer (c_int64_t) len
256 end subroutine
257
258 subroutine acc_delete_array_h (a)
259 type (*), dimension (..), contiguous :: a
260 end subroutine
261
262 subroutine acc_delete_finalize_32_h (a, len)
263 use iso_c_binding, only: c_int32_t
264 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
265 type (*), dimension (*) :: a
266 integer (c_int32_t) len
267 end subroutine
268
269 subroutine acc_delete_finalize_64_h (a, len)
270 use iso_c_binding, only: c_int64_t
271 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
272 type (*), dimension (*) :: a
273 integer (c_int64_t) len
274 end subroutine
275
276 subroutine acc_delete_finalize_array_h (a)
277 type (*), dimension (..), contiguous :: a
278 end subroutine
279
280 subroutine acc_update_device_32_h (a, len)
281 use iso_c_binding, only: c_int32_t
282 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
283 type (*), dimension (*) :: a
284 integer (c_int32_t) len
285 end subroutine
286
287 subroutine acc_update_device_64_h (a, len)
288 use iso_c_binding, only: c_int64_t
289 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
290 type (*), dimension (*) :: a
291 integer (c_int64_t) len
292 end subroutine
293
294 subroutine acc_update_device_array_h (a)
295 type (*), dimension (..), contiguous :: a
296 end subroutine
297
298 subroutine acc_update_self_32_h (a, len)
299 use iso_c_binding, only: c_int32_t
300 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
301 type (*), dimension (*) :: a
302 integer (c_int32_t) len
303 end subroutine
304
305 subroutine acc_update_self_64_h (a, len)
306 use iso_c_binding, only: c_int64_t
307 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
308 type (*), dimension (*) :: a
309 integer (c_int64_t) len
310 end subroutine
311
312 subroutine acc_update_self_array_h (a)
313 type (*), dimension (..), contiguous :: a
314 end subroutine
315
316 function acc_is_present_32_h (a, len)
317 use iso_c_binding, only: c_int32_t
318 logical acc_is_present_32_h
319 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
320 type (*), dimension (*) :: a
321 integer (c_int32_t) len
322 end function
323
324 function acc_is_present_64_h (a, len)
325 use iso_c_binding, only: c_int64_t
326 logical acc_is_present_64_h
327 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
328 type (*), dimension (*) :: a
329 integer (c_int64_t) len
330 end function
331
332 function acc_is_present_array_h (a)
333 logical acc_is_present_array_h
334 type (*), dimension (..), contiguous :: a
335 end function
336
337 subroutine acc_copyin_async_32_h (a, len, async)
338 use iso_c_binding, only: c_int32_t
339 use openacc_kinds, only: acc_handle_kind
340 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
341 type (*), dimension (*) :: a
342 integer (c_int32_t) len
343 integer (acc_handle_kind) async
344 end subroutine
345
346 subroutine acc_copyin_async_64_h (a, len, async)
347 use iso_c_binding, only: c_int64_t
348 use openacc_kinds, only: acc_handle_kind
349 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
350 type (*), dimension (*) :: a
351 integer (c_int64_t) len
352 integer (acc_handle_kind) async
353 end subroutine
354
355 subroutine acc_copyin_async_array_h (a, async)
356 use openacc_kinds, only: acc_handle_kind
357 type (*), dimension (..), contiguous :: a
358 integer (acc_handle_kind) async
359 end subroutine
360
361 subroutine acc_create_async_32_h (a, len, async)
362 use iso_c_binding, only: c_int32_t
363 use openacc_kinds, only: acc_handle_kind
364 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
365 type (*), dimension (*) :: a
366 integer (c_int32_t) len
367 integer (acc_handle_kind) async
368 end subroutine
369
370 subroutine acc_create_async_64_h (a, len, async)
371 use iso_c_binding, only: c_int64_t
372 use openacc_kinds, only: acc_handle_kind
373 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
374 type (*), dimension (*) :: a
375 integer (c_int64_t) len
376 integer (acc_handle_kind) async
377 end subroutine
378
379 subroutine acc_create_async_array_h (a, async)
380 use openacc_kinds, only: acc_handle_kind
381 type (*), dimension (..), contiguous :: a
382 integer (acc_handle_kind) async
383 end subroutine
384
385 subroutine acc_copyout_async_32_h (a, len, async)
386 use iso_c_binding, only: c_int32_t
387 use openacc_kinds, only: acc_handle_kind
388 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
389 type (*), dimension (*) :: a
390 integer (c_int32_t) len
391 integer (acc_handle_kind) async
392 end subroutine
393
394 subroutine acc_copyout_async_64_h (a, len, async)
395 use iso_c_binding, only: c_int64_t
396 use openacc_kinds, only: acc_handle_kind
397 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
398 type (*), dimension (*) :: a
399 integer (c_int64_t) len
400 integer (acc_handle_kind) async
401 end subroutine
402
403 subroutine acc_copyout_async_array_h (a, async)
404 use openacc_kinds, only: acc_handle_kind
405 type (*), dimension (..), contiguous :: a
406 integer (acc_handle_kind) async
407 end subroutine
408
409 subroutine acc_delete_async_32_h (a, len, async)
410 use iso_c_binding, only: c_int32_t
411 use openacc_kinds, only: acc_handle_kind
412 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
413 type (*), dimension (*) :: a
414 integer (c_int32_t) len
415 integer (acc_handle_kind) async
416 end subroutine
417
418 subroutine acc_delete_async_64_h (a, len, async)
419 use iso_c_binding, only: c_int64_t
420 use openacc_kinds, only: acc_handle_kind
421 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
422 type (*), dimension (*) :: a
423 integer (c_int64_t) len
424 integer (acc_handle_kind) async
425 end subroutine
426
427 subroutine acc_delete_async_array_h (a, async)
428 use openacc_kinds, only: acc_handle_kind
429 type (*), dimension (..), contiguous :: a
430 integer (acc_handle_kind) async
431 end subroutine
432
433 subroutine acc_update_device_async_32_h (a, len, async)
434 use iso_c_binding, only: c_int32_t
435 use openacc_kinds, only: acc_handle_kind
436 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
437 type (*), dimension (*) :: a
438 integer (c_int32_t) len
439 integer (acc_handle_kind) async
440 end subroutine
441
442 subroutine acc_update_device_async_64_h (a, len, async)
443 use iso_c_binding, only: c_int64_t
444 use openacc_kinds, only: acc_handle_kind
445 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
446 type (*), dimension (*) :: a
447 integer (c_int64_t) len
448 integer (acc_handle_kind) async
449 end subroutine
450
451 subroutine acc_update_device_async_array_h (a, async)
452 use openacc_kinds, only: acc_handle_kind
453 type (*), dimension (..), contiguous :: a
454 integer (acc_handle_kind) async
455 end subroutine
456
457 subroutine acc_update_self_async_32_h (a, len, async)
458 use iso_c_binding, only: c_int32_t
459 use openacc_kinds, only: acc_handle_kind
460 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
461 type (*), dimension (*) :: a
462 integer (c_int32_t) len
463 integer (acc_handle_kind) async
464 end subroutine
465
466 subroutine acc_update_self_async_64_h (a, len, async)
467 use iso_c_binding, only: c_int64_t
468 use openacc_kinds, only: acc_handle_kind
469 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
470 type (*), dimension (*) :: a
471 integer (c_int64_t) len
472 integer (acc_handle_kind) async
473 end subroutine
474
475 subroutine acc_update_self_async_array_h (a, async)
476 use openacc_kinds, only: acc_handle_kind
477 type (*), dimension (..), contiguous :: a
478 integer (acc_handle_kind) async
479 end subroutine
480 end interface
481
482 interface
483 function acc_get_num_devices_l (d) &
484 bind (C, name = "acc_get_num_devices")
485 use iso_c_binding, only: c_int
486 integer (c_int) :: acc_get_num_devices_l
487 integer (c_int), value :: d
488 end function
489
490 subroutine acc_set_device_type_l (d) &
491 bind (C, name = "acc_set_device_type")
492 use iso_c_binding, only: c_int
493 integer (c_int), value :: d
494 end subroutine
495
496 function acc_get_device_type_l () &
497 bind (C, name = "acc_get_device_type")
498 use iso_c_binding, only: c_int
499 integer (c_int) :: acc_get_device_type_l
500 end function
501
502 subroutine acc_set_device_num_l (n, d) &
503 bind (C, name = "acc_set_device_num")
504 use iso_c_binding, only: c_int
505 integer (c_int), value :: n, d
506 end subroutine
507
508 function acc_get_device_num_l (d) &
509 bind (C, name = "acc_get_device_num")
510 use iso_c_binding, only: c_int
511 integer (c_int) :: acc_get_device_num_l
512 integer (c_int), value :: d
513 end function
514
515 function acc_async_test_l (a) &
516 bind (C, name = "acc_async_test")
517 use iso_c_binding, only: c_int
518 integer (c_int) :: acc_async_test_l
519 integer (c_int), value :: a
520 end function
521
522 function acc_async_test_all_l () &
523 bind (C, name = "acc_async_test_all")
524 use iso_c_binding, only: c_int
525 integer (c_int) :: acc_async_test_all_l
526 end function
527
528 subroutine acc_wait_l (a) &
529 bind (C, name = "acc_wait")
530 use iso_c_binding, only: c_int
531 integer (c_int), value :: a
532 end subroutine
533
534 subroutine acc_wait_async_l (a1, a2) &
535 bind (C, name = "acc_wait_async")
536 use iso_c_binding, only: c_int
537 integer (c_int), value :: a1, a2
538 end subroutine
539
540 subroutine acc_wait_all_l () &
541 bind (C, name = "acc_wait_all")
542 use iso_c_binding, only: c_int
543 end subroutine
544
545 subroutine acc_wait_all_async_l (a) &
546 bind (C, name = "acc_wait_all_async")
547 use iso_c_binding, only: c_int
548 integer (c_int), value :: a
549 end subroutine
550
551 subroutine acc_init_l (d) &
552 bind (C, name = "acc_init")
553 use iso_c_binding, only: c_int
554 integer (c_int), value :: d
555 end subroutine
556
557 subroutine acc_shutdown_l (d) &
558 bind (C, name = "acc_shutdown")
559 use iso_c_binding, only: c_int
560 integer (c_int), value :: d
561 end subroutine
562
563 function acc_on_device_l (d) &
564 bind (C, name = "acc_on_device")
565 use iso_c_binding, only: c_int
566 integer (c_int) :: acc_on_device_l
567 integer (c_int), value :: d
568 end function
569
570 subroutine acc_copyin_l (a, len) &
571 bind (C, name = "acc_copyin")
572 use iso_c_binding, only: c_size_t
573 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
574 type (*), dimension (*) :: a
575 integer (c_size_t), value :: len
576 end subroutine
577
578 subroutine acc_present_or_copyin_l (a, len) &
579 bind (C, name = "acc_present_or_copyin")
580 use iso_c_binding, only: c_size_t
581 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
582 type (*), dimension (*) :: a
583 integer (c_size_t), value :: len
584 end subroutine
585
586 subroutine acc_create_l (a, len) &
587 bind (C, name = "acc_create")
588 use iso_c_binding, only: c_size_t
589 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
590 type (*), dimension (*) :: a
591 integer (c_size_t), value :: len
592 end subroutine
593
594 subroutine acc_present_or_create_l (a, len) &
595 bind (C, name = "acc_present_or_create")
596 use iso_c_binding, only: c_size_t
597 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
598 type (*), dimension (*) :: a
599 integer (c_size_t), value :: len
600 end subroutine
601
602 subroutine acc_copyout_l (a, len) &
603 bind (C, name = "acc_copyout")
604 use iso_c_binding, only: c_size_t
605 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
606 type (*), dimension (*) :: a
607 integer (c_size_t), value :: len
608 end subroutine
609
610 subroutine acc_copyout_finalize_l (a, len) &
611 bind (C, name = "acc_copyout_finalize")
612 use iso_c_binding, only: c_size_t
613 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
614 type (*), dimension (*) :: a
615 integer (c_size_t), value :: len
616 end subroutine
617
618 subroutine acc_delete_l (a, len) &
619 bind (C, name = "acc_delete")
620 use iso_c_binding, only: c_size_t
621 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
622 type (*), dimension (*) :: a
623 integer (c_size_t), value :: len
624 end subroutine
625
626 subroutine acc_delete_finalize_l (a, len) &
627 bind (C, name = "acc_delete_finalize")
628 use iso_c_binding, only: c_size_t
629 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
630 type (*), dimension (*) :: a
631 integer (c_size_t), value :: len
632 end subroutine
633
634 subroutine acc_update_device_l (a, len) &
635 bind (C, name = "acc_update_device")
636 use iso_c_binding, only: c_size_t
637 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
638 type (*), dimension (*) :: a
639 integer (c_size_t), value :: len
640 end subroutine
641
642 subroutine acc_update_self_l (a, len) &
643 bind (C, name = "acc_update_self")
644 use iso_c_binding, only: c_size_t
645 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
646 type (*), dimension (*) :: a
647 integer (c_size_t), value :: len
648 end subroutine
649
650 function acc_is_present_l (a, len) &
651 bind (C, name = "acc_is_present")
652 use iso_c_binding, only: c_int32_t, c_size_t
653 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
654 integer (c_int32_t) :: acc_is_present_l
655 type (*), dimension (*) :: a
656 integer (c_size_t), value :: len
657 end function
658
659 subroutine acc_copyin_async_l (a, len, async) &
660 bind (C, name = "acc_copyin_async")
661 use iso_c_binding, only: c_size_t, c_int
662 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
663 type (*), dimension (*) :: a
664 integer (c_size_t), value :: len
665 integer (c_int), value :: async
666 end subroutine
667
668 subroutine acc_create_async_l (a, len, async) &
669 bind (C, name = "acc_create_async")
670 use iso_c_binding, only: c_size_t, c_int
671 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
672 type (*), dimension (*) :: a
673 integer (c_size_t), value :: len
674 integer (c_int), value :: async
675 end subroutine
676
677 subroutine acc_copyout_async_l (a, len, async) &
678 bind (C, name = "acc_copyout_async")
679 use iso_c_binding, only: c_size_t, c_int
680 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
681 type (*), dimension (*) :: a
682 integer (c_size_t), value :: len
683 integer (c_int), value :: async
684 end subroutine
685
686 subroutine acc_delete_async_l (a, len, async) &
687 bind (C, name = "acc_delete_async")
688 use iso_c_binding, only: c_size_t, c_int
689 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
690 type (*), dimension (*) :: a
691 integer (c_size_t), value :: len
692 integer (c_int), value :: async
693 end subroutine
694
695 subroutine acc_update_device_async_l (a, len, async) &
696 bind (C, name = "acc_update_device_async")
697 use iso_c_binding, only: c_size_t, c_int
698 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
699 type (*), dimension (*) :: a
700 integer (c_size_t), value :: len
701 integer (c_int), value :: async
702 end subroutine
703
704 subroutine acc_update_self_async_l (a, len, async) &
705 bind (C, name = "acc_update_self_async")
706 use iso_c_binding, only: c_size_t, c_int
707 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
708 type (*), dimension (*) :: a
709 integer (c_size_t), value :: len
710 integer (c_int), value :: async
711 end subroutine
712 end interface
713 end module
714
715 module openacc
716 use openacc_kinds
717 use openacc_internal
718 implicit none
719
720 public :: openacc_version
721
722 public :: acc_get_num_devices, acc_set_device_type, acc_get_device_type
723 public :: acc_set_device_num, acc_get_device_num, acc_async_test
724 public :: acc_async_test_all
725 public :: acc_wait, acc_async_wait, acc_wait_async
726 public :: acc_wait_all, acc_async_wait_all, acc_wait_all_async
727 public :: acc_init, acc_shutdown, acc_on_device
728 public :: acc_copyin, acc_present_or_copyin, acc_pcopyin, acc_create
729 public :: acc_present_or_create, acc_pcreate, acc_copyout, acc_delete
730 public :: acc_update_device, acc_update_self, acc_is_present
731 public :: acc_copyin_async, acc_create_async, acc_copyout_async
732 public :: acc_delete_async, acc_update_device_async, acc_update_self_async
733
734 integer, parameter :: openacc_version = 201306
735
736 interface acc_get_num_devices
737 procedure :: acc_get_num_devices_h
738 end interface
739
740 interface acc_set_device_type
741 procedure :: acc_set_device_type_h
742 end interface
743
744 interface acc_get_device_type
745 procedure :: acc_get_device_type_h
746 end interface
747
748 interface acc_set_device_num
749 procedure :: acc_set_device_num_h
750 end interface
751
752 interface acc_get_device_num
753 procedure :: acc_get_device_num_h
754 end interface
755
756 interface acc_async_test
757 procedure :: acc_async_test_h
758 end interface
759
760 interface acc_async_test_all
761 procedure :: acc_async_test_all_h
762 end interface
763
764 interface acc_wait
765 procedure :: acc_wait_h
766 end interface
767
768 ! acc_async_wait is an OpenACC 1.0 compatibility name for acc_wait.
769 interface acc_async_wait
770 procedure :: acc_wait_h
771 end interface
772
773 interface acc_wait_async
774 procedure :: acc_wait_async_h
775 end interface
776
777 interface acc_wait_all
778 procedure :: acc_wait_all_h
779 end interface
780
781 ! acc_async_wait_all is an OpenACC 1.0 compatibility name for acc_wait_all.
782 interface acc_async_wait_all
783 procedure :: acc_wait_all_h
784 end interface
785
786 interface acc_wait_all_async
787 procedure :: acc_wait_all_async_h
788 end interface
789
790 interface acc_init
791 procedure :: acc_init_h
792 end interface
793
794 interface acc_shutdown
795 procedure :: acc_shutdown_h
796 end interface
797
798 interface acc_on_device
799 procedure :: acc_on_device_h
800 end interface
801
802 ! acc_malloc: Only available in C/C++
803 ! acc_free: Only available in C/C++
804
805 ! As vendor extension, the following code supports both 32bit and 64bit
806 ! arguments for "size"; the OpenACC standard only permits default-kind
807 ! integers, which are of kind 4 (i.e. 32 bits).
808 ! Additionally, the two-argument version also takes arrays as argument.
809 ! and the one argument version also scalars. Note that the code assumes
810 ! that the arrays are contiguous.
811
812 interface acc_copyin
813 procedure :: acc_copyin_32_h
814 procedure :: acc_copyin_64_h
815 procedure :: acc_copyin_array_h
816 end interface
817
818 interface acc_present_or_copyin
819 procedure :: acc_present_or_copyin_32_h
820 procedure :: acc_present_or_copyin_64_h
821 procedure :: acc_present_or_copyin_array_h
822 end interface
823
824 interface acc_pcopyin
825 procedure :: acc_present_or_copyin_32_h
826 procedure :: acc_present_or_copyin_64_h
827 procedure :: acc_present_or_copyin_array_h
828 end interface
829
830 interface acc_create
831 procedure :: acc_create_32_h
832 procedure :: acc_create_64_h
833 procedure :: acc_create_array_h
834 end interface
835
836 interface acc_present_or_create
837 procedure :: acc_present_or_create_32_h
838 procedure :: acc_present_or_create_64_h
839 procedure :: acc_present_or_create_array_h
840 end interface
841
842 interface acc_pcreate
843 procedure :: acc_present_or_create_32_h
844 procedure :: acc_present_or_create_64_h
845 procedure :: acc_present_or_create_array_h
846 end interface
847
848 interface acc_copyout
849 procedure :: acc_copyout_32_h
850 procedure :: acc_copyout_64_h
851 procedure :: acc_copyout_array_h
852 end interface
853
854 interface acc_copyout_finalize
855 procedure :: acc_copyout_finalize_32_h
856 procedure :: acc_copyout_finalize_64_h
857 procedure :: acc_copyout_finalize_array_h
858 end interface
859
860 interface acc_delete
861 procedure :: acc_delete_32_h
862 procedure :: acc_delete_64_h
863 procedure :: acc_delete_array_h
864 end interface
865
866 interface acc_delete_finalize
867 procedure :: acc_delete_finalize_32_h
868 procedure :: acc_delete_finalize_64_h
869 procedure :: acc_delete_finalize_array_h
870 end interface
871
872 interface acc_update_device
873 procedure :: acc_update_device_32_h
874 procedure :: acc_update_device_64_h
875 procedure :: acc_update_device_array_h
876 end interface
877
878 interface acc_update_self
879 procedure :: acc_update_self_32_h
880 procedure :: acc_update_self_64_h
881 procedure :: acc_update_self_array_h
882 end interface
883
884 ! acc_map_data: Only available in C/C++
885 ! acc_unmap_data: Only available in C/C++
886 ! acc_deviceptr: Only available in C/C++
887 ! acc_hostptr: Only available in C/C++
888
889 interface acc_is_present
890 procedure :: acc_is_present_32_h
891 procedure :: acc_is_present_64_h
892 procedure :: acc_is_present_array_h
893 end interface
894
895 ! acc_memcpy_to_device: Only available in C/C++
896 ! acc_memcpy_from_device: Only available in C/C++
897
898 interface acc_copyin_async
899 procedure :: acc_copyin_async_32_h
900 procedure :: acc_copyin_async_64_h
901 procedure :: acc_copyin_async_array_h
902 end interface
903
904 interface acc_create_async
905 procedure :: acc_create_async_32_h
906 procedure :: acc_create_async_64_h
907 procedure :: acc_create_async_array_h
908 end interface
909
910 interface acc_copyout_async
911 procedure :: acc_copyout_async_32_h
912 procedure :: acc_copyout_async_64_h
913 procedure :: acc_copyout_async_array_h
914 end interface
915
916 interface acc_delete_async
917 procedure :: acc_delete_async_32_h
918 procedure :: acc_delete_async_64_h
919 procedure :: acc_delete_async_array_h
920 end interface
921
922 interface acc_update_device_async
923 procedure :: acc_update_device_async_32_h
924 procedure :: acc_update_device_async_64_h
925 procedure :: acc_update_device_async_array_h
926 end interface
927
928 interface acc_update_self_async
929 procedure :: acc_update_self_async_32_h
930 procedure :: acc_update_self_async_64_h
931 procedure :: acc_update_self_async_array_h
932 end interface
933
934 end module
935
936 function acc_get_num_devices_h (d)
937 use openacc_internal, only: acc_get_num_devices_l
938 use openacc_kinds
939 integer acc_get_num_devices_h
940 integer (acc_device_kind) d
941 acc_get_num_devices_h = acc_get_num_devices_l (d)
942 end function
943
944 subroutine acc_set_device_type_h (d)
945 use openacc_internal, only: acc_set_device_type_l
946 use openacc_kinds
947 integer (acc_device_kind) d
948 call acc_set_device_type_l (d)
949 end subroutine
950
951 function acc_get_device_type_h ()
952 use openacc_internal, only: acc_get_device_type_l
953 use openacc_kinds
954 integer (acc_device_kind) acc_get_device_type_h
955 acc_get_device_type_h = acc_get_device_type_l ()
956 end function
957
958 subroutine acc_set_device_num_h (n, d)
959 use openacc_internal, only: acc_set_device_num_l
960 use openacc_kinds
961 integer n
962 integer (acc_device_kind) d
963 call acc_set_device_num_l (n, d)
964 end subroutine
965
966 function acc_get_device_num_h (d)
967 use openacc_internal, only: acc_get_device_num_l
968 use openacc_kinds
969 integer acc_get_device_num_h
970 integer (acc_device_kind) d
971 acc_get_device_num_h = acc_get_device_num_l (d)
972 end function
973
974 function acc_async_test_h (a)
975 use openacc_internal, only: acc_async_test_l
976 logical acc_async_test_h
977 integer a
978 if (acc_async_test_l (a) .eq. 1) then
979 acc_async_test_h = .TRUE.
980 else
981 acc_async_test_h = .FALSE.
982 end if
983 end function
984
985 function acc_async_test_all_h ()
986 use openacc_internal, only: acc_async_test_all_l
987 logical acc_async_test_all_h
988 if (acc_async_test_all_l () .eq. 1) then
989 acc_async_test_all_h = .TRUE.
990 else
991 acc_async_test_all_h = .FALSE.
992 end if
993 end function
994
995 subroutine acc_wait_h (a)
996 use openacc_internal, only: acc_wait_l
997 integer a
998 call acc_wait_l (a)
999 end subroutine
1000
1001 subroutine acc_wait_async_h (a1, a2)
1002 use openacc_internal, only: acc_wait_async_l
1003 integer a1, a2
1004 call acc_wait_async_l (a1, a2)
1005 end subroutine
1006
1007 subroutine acc_wait_all_h ()
1008 use openacc_internal, only: acc_wait_all_l
1009 call acc_wait_all_l ()
1010 end subroutine
1011
1012 subroutine acc_wait_all_async_h (a)
1013 use openacc_internal, only: acc_wait_all_async_l
1014 integer a
1015 call acc_wait_all_async_l (a)
1016 end subroutine
1017
1018 subroutine acc_init_h (d)
1019 use openacc_internal, only: acc_init_l
1020 use openacc_kinds
1021 integer (acc_device_kind) d
1022 call acc_init_l (d)
1023 end subroutine
1024
1025 subroutine acc_shutdown_h (d)
1026 use openacc_internal, only: acc_shutdown_l
1027 use openacc_kinds
1028 integer (acc_device_kind) d
1029 call acc_shutdown_l (d)
1030 end subroutine
1031
1032 function acc_on_device_h (d)
1033 use openacc_internal, only: acc_on_device_l
1034 use openacc_kinds
1035 integer (acc_device_kind) d
1036 logical acc_on_device_h
1037 if (acc_on_device_l (d) .eq. 1) then
1038 acc_on_device_h = .TRUE.
1039 else
1040 acc_on_device_h = .FALSE.
1041 end if
1042 end function
1043
1044 subroutine acc_copyin_32_h (a, len)
1045 use iso_c_binding, only: c_int32_t, c_size_t
1046 use openacc_internal, only: acc_copyin_l
1047 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1048 type (*), dimension (*) :: a
1049 integer (c_int32_t) len
1050 call acc_copyin_l (a, int (len, kind = c_size_t))
1051 end subroutine
1052
1053 subroutine acc_copyin_64_h (a, len)
1054 use iso_c_binding, only: c_int64_t, c_size_t
1055 use openacc_internal, only: acc_copyin_l
1056 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1057 type (*), dimension (*) :: a
1058 integer (c_int64_t) len
1059 call acc_copyin_l (a, int (len, kind = c_size_t))
1060 end subroutine
1061
1062 subroutine acc_copyin_array_h (a)
1063 use openacc_internal, only: acc_copyin_l
1064 type (*), dimension (..), contiguous :: a
1065 call acc_copyin_l (a, sizeof (a))
1066 end subroutine
1067
1068 subroutine acc_present_or_copyin_32_h (a, len)
1069 use iso_c_binding, only: c_int32_t, c_size_t
1070 use openacc_internal, only: acc_present_or_copyin_l
1071 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1072 type (*), dimension (*) :: a
1073 integer (c_int32_t) len
1074 call acc_present_or_copyin_l (a, int (len, kind = c_size_t))
1075 end subroutine
1076
1077 subroutine acc_present_or_copyin_64_h (a, len)
1078 use iso_c_binding, only: c_int64_t, c_size_t
1079 use openacc_internal, only: acc_present_or_copyin_l
1080 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1081 type (*), dimension (*) :: a
1082 integer (c_int64_t) len
1083 call acc_present_or_copyin_l (a, int (len, kind = c_size_t))
1084 end subroutine
1085
1086 subroutine acc_present_or_copyin_array_h (a)
1087 use openacc_internal, only: acc_present_or_copyin_l
1088 type (*), dimension (..), contiguous :: a
1089 call acc_present_or_copyin_l (a, sizeof (a))
1090 end subroutine
1091
1092 subroutine acc_create_32_h (a, len)
1093 use iso_c_binding, only: c_int32_t, c_size_t
1094 use openacc_internal, only: acc_create_l
1095 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1096 type (*), dimension (*) :: a
1097 integer (c_int32_t) len
1098 call acc_create_l (a, int (len, kind = c_size_t))
1099 end subroutine
1100
1101 subroutine acc_create_64_h (a, len)
1102 use iso_c_binding, only: c_int64_t, c_size_t
1103 use openacc_internal, only: acc_create_l
1104 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1105 type (*), dimension (*) :: a
1106 integer (c_int64_t) len
1107 call acc_create_l (a, int (len, kind = c_size_t))
1108 end subroutine
1109
1110 subroutine acc_create_array_h (a)
1111 use openacc_internal, only: acc_create_l
1112 type (*), dimension (..), contiguous :: a
1113 call acc_create_l (a, sizeof (a))
1114 end subroutine
1115
1116 subroutine acc_present_or_create_32_h (a, len)
1117 use iso_c_binding, only: c_int32_t, c_size_t
1118 use openacc_internal, only: acc_present_or_create_l
1119 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1120 type (*), dimension (*) :: a
1121 integer (c_int32_t) len
1122 call acc_present_or_create_l (a, int (len, kind = c_size_t))
1123 end subroutine
1124
1125 subroutine acc_present_or_create_64_h (a, len)
1126 use iso_c_binding, only: c_int64_t, c_size_t
1127 use openacc_internal, only: acc_present_or_create_l
1128 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1129 type (*), dimension (*) :: a
1130 integer (c_int64_t) len
1131 call acc_present_or_create_l (a, int (len, kind = c_size_t))
1132 end subroutine
1133
1134 subroutine acc_present_or_create_array_h (a)
1135 use openacc_internal, only: acc_present_or_create_l
1136 type (*), dimension (..), contiguous :: a
1137 call acc_present_or_create_l (a, sizeof (a))
1138 end subroutine
1139
1140 subroutine acc_copyout_32_h (a, len)
1141 use iso_c_binding, only: c_int32_t, c_size_t
1142 use openacc_internal, only: acc_copyout_l
1143 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1144 type (*), dimension (*) :: a
1145 integer (c_int32_t) len
1146 call acc_copyout_l (a, int (len, kind = c_size_t))
1147 end subroutine
1148
1149 subroutine acc_copyout_64_h (a, len)
1150 use iso_c_binding, only: c_int64_t, c_size_t
1151 use openacc_internal, only: acc_copyout_l
1152 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1153 type (*), dimension (*) :: a
1154 integer (c_int64_t) len
1155 call acc_copyout_l (a, int (len, kind = c_size_t))
1156 end subroutine
1157
1158 subroutine acc_copyout_array_h (a)
1159 use openacc_internal, only: acc_copyout_l
1160 type (*), dimension (..), contiguous :: a
1161 call acc_copyout_l (a, sizeof (a))
1162 end subroutine
1163
1164 subroutine acc_copyout_finalize_32_h (a, len)
1165 use iso_c_binding, only: c_int32_t, c_size_t
1166 use openacc_internal, only: acc_copyout_finalize_l
1167 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1168 type (*), dimension (*) :: a
1169 integer (c_int32_t) len
1170 call acc_copyout_finalize_l (a, int (len, kind = c_size_t))
1171 end subroutine
1172
1173 subroutine acc_copyout_finalize_64_h (a, len)
1174 use iso_c_binding, only: c_int64_t, c_size_t
1175 use openacc_internal, only: acc_copyout_finalize_l
1176 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1177 type (*), dimension (*) :: a
1178 integer (c_int64_t) len
1179 call acc_copyout_finalize_l (a, int (len, kind = c_size_t))
1180 end subroutine
1181
1182 subroutine acc_copyout_finalize_array_h (a)
1183 use openacc_internal, only: acc_copyout_finalize_l
1184 type (*), dimension (..), contiguous :: a
1185 call acc_copyout_finalize_l (a, sizeof (a))
1186 end subroutine
1187
1188 subroutine acc_delete_32_h (a, len)
1189 use iso_c_binding, only: c_int32_t, c_size_t
1190 use openacc_internal, only: acc_delete_l
1191 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1192 type (*), dimension (*) :: a
1193 integer (c_int32_t) len
1194 call acc_delete_l (a, int (len, kind = c_size_t))
1195 end subroutine
1196
1197 subroutine acc_delete_64_h (a, len)
1198 use iso_c_binding, only: c_int64_t, c_size_t
1199 use openacc_internal, only: acc_delete_l
1200 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1201 type (*), dimension (*) :: a
1202 integer (c_int64_t) len
1203 call acc_delete_l (a, int (len, kind = c_size_t))
1204 end subroutine
1205
1206 subroutine acc_delete_array_h (a)
1207 use openacc_internal, only: acc_delete_l
1208 type (*), dimension (..), contiguous :: a
1209 call acc_delete_l (a, sizeof (a))
1210 end subroutine
1211
1212 subroutine acc_delete_finalize_32_h (a, len)
1213 use iso_c_binding, only: c_int32_t, c_size_t
1214 use openacc_internal, only: acc_delete_finalize_l
1215 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1216 type (*), dimension (*) :: a
1217 integer (c_int32_t) len
1218 call acc_delete_finalize_l (a, int (len, kind = c_size_t))
1219 end subroutine
1220
1221 subroutine acc_delete_finalize_64_h (a, len)
1222 use iso_c_binding, only: c_int64_t, c_size_t
1223 use openacc_internal, only: acc_delete_finalize_l
1224 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1225 type (*), dimension (*) :: a
1226 integer (c_int64_t) len
1227 call acc_delete_finalize_l (a, int (len, kind = c_size_t))
1228 end subroutine
1229
1230 subroutine acc_delete_finalize_array_h (a)
1231 use openacc_internal, only: acc_delete_finalize_l
1232 type (*), dimension (..), contiguous :: a
1233 call acc_delete_finalize_l (a, sizeof (a))
1234 end subroutine
1235
1236 subroutine acc_update_device_32_h (a, len)
1237 use iso_c_binding, only: c_int32_t, c_size_t
1238 use openacc_internal, only: acc_update_device_l
1239 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1240 type (*), dimension (*) :: a
1241 integer (c_int32_t) len
1242 call acc_update_device_l (a, int (len, kind = c_size_t))
1243 end subroutine
1244
1245 subroutine acc_update_device_64_h (a, len)
1246 use iso_c_binding, only: c_int64_t, c_size_t
1247 use openacc_internal, only: acc_update_device_l
1248 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1249 type (*), dimension (*) :: a
1250 integer (c_int64_t) len
1251 call acc_update_device_l (a, int (len, kind = c_size_t))
1252 end subroutine
1253
1254 subroutine acc_update_device_array_h (a)
1255 use openacc_internal, only: acc_update_device_l
1256 type (*), dimension (..), contiguous :: a
1257 call acc_update_device_l (a, sizeof (a))
1258 end subroutine
1259
1260 subroutine acc_update_self_32_h (a, len)
1261 use iso_c_binding, only: c_int32_t, c_size_t
1262 use openacc_internal, only: acc_update_self_l
1263 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1264 type (*), dimension (*) :: a
1265 integer (c_int32_t) len
1266 call acc_update_self_l (a, int (len, kind = c_size_t))
1267 end subroutine
1268
1269 subroutine acc_update_self_64_h (a, len)
1270 use iso_c_binding, only: c_int64_t, c_size_t
1271 use openacc_internal, only: acc_update_self_l
1272 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1273 type (*), dimension (*) :: a
1274 integer (c_int64_t) len
1275 call acc_update_self_l (a, int (len, kind = c_size_t))
1276 end subroutine
1277
1278 subroutine acc_update_self_array_h (a)
1279 use openacc_internal, only: acc_update_self_l
1280 type (*), dimension (..), contiguous :: a
1281 call acc_update_self_l (a, sizeof (a))
1282 end subroutine
1283
1284 function acc_is_present_32_h (a, len)
1285 use iso_c_binding, only: c_int32_t, c_size_t
1286 use openacc_internal, only: acc_is_present_l
1287 logical acc_is_present_32_h
1288 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1289 type (*), dimension (*) :: a
1290 integer (c_int32_t) len
1291 if (acc_is_present_l (a, int (len, kind = c_size_t)) .eq. 1) then
1292 acc_is_present_32_h = .TRUE.
1293 else
1294 acc_is_present_32_h = .FALSE.
1295 end if
1296 end function
1297
1298 function acc_is_present_64_h (a, len)
1299 use iso_c_binding, only: c_int64_t, c_size_t
1300 use openacc_internal, only: acc_is_present_l
1301 logical acc_is_present_64_h
1302 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1303 type (*), dimension (*) :: a
1304 integer (c_int64_t) len
1305 if (acc_is_present_l (a, int (len, kind = c_size_t)) .eq. 1) then
1306 acc_is_present_64_h = .TRUE.
1307 else
1308 acc_is_present_64_h = .FALSE.
1309 end if
1310 end function
1311
1312 function acc_is_present_array_h (a)
1313 use openacc_internal, only: acc_is_present_l
1314 logical acc_is_present_array_h
1315 type (*), dimension (..), contiguous :: a
1316 acc_is_present_array_h = acc_is_present_l (a, sizeof (a)) == 1
1317 end function
1318
1319 subroutine acc_copyin_async_32_h (a, len, async)
1320 use iso_c_binding, only: c_int32_t, c_size_t, c_int
1321 use openacc_internal, only: acc_copyin_async_l
1322 use openacc_kinds, only: acc_handle_kind
1323 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1324 type (*), dimension (*) :: a
1325 integer (c_int32_t) len
1326 integer (acc_handle_kind) async
1327 call acc_copyin_async_l (a, int (len, kind = c_size_t), int (async, kind = c_int))
1328 end subroutine
1329
1330 subroutine acc_copyin_async_64_h (a, len, async)
1331 use iso_c_binding, only: c_int64_t, c_size_t, c_int
1332 use openacc_internal, only: acc_copyin_async_l
1333 use openacc_kinds, only: acc_handle_kind
1334 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1335 type (*), dimension (*) :: a
1336 integer (c_int64_t) len
1337 integer (acc_handle_kind) async
1338 call acc_copyin_async_l (a, int (len, kind = c_size_t), int (async, kind = c_int))
1339 end subroutine
1340
1341 subroutine acc_copyin_async_array_h (a, async)
1342 use iso_c_binding, only: c_int
1343 use openacc_internal, only: acc_copyin_async_l
1344 use openacc_kinds, only: acc_handle_kind
1345 type (*), dimension (..), contiguous :: a
1346 integer (acc_handle_kind) async
1347 call acc_copyin_async_l (a, sizeof (a), int (async, kind = c_int))
1348 end subroutine
1349
1350 subroutine acc_create_async_32_h (a, len, async)
1351 use iso_c_binding, only: c_int32_t, c_size_t, c_int
1352 use openacc_internal, only: acc_create_async_l
1353 use openacc_kinds, only: acc_handle_kind
1354 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1355 type (*), dimension (*) :: a
1356 integer (c_int32_t) len
1357 integer (acc_handle_kind) async
1358 call acc_create_async_l (a, int (len, kind = c_size_t), int (async, kind = c_int))
1359 end subroutine
1360
1361 subroutine acc_create_async_64_h (a, len, async)
1362 use iso_c_binding, only: c_int64_t, c_size_t, c_int
1363 use openacc_internal, only: acc_create_async_l
1364 use openacc_kinds, only: acc_handle_kind
1365 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1366 type (*), dimension (*) :: a
1367 integer (c_int64_t) len
1368 integer (acc_handle_kind) async
1369 call acc_create_async_l (a, int (len, kind = c_size_t), int (async, kind = c_int))
1370 end subroutine
1371
1372 subroutine acc_create_async_array_h (a, async)
1373 use iso_c_binding, only: c_int
1374 use openacc_internal, only: acc_create_async_l
1375 use openacc_kinds, only: acc_handle_kind
1376 type (*), dimension (..), contiguous :: a
1377 integer (acc_handle_kind) async
1378 call acc_create_async_l (a, sizeof (a), int (async, kind = c_int))
1379 end subroutine
1380
1381 subroutine acc_copyout_async_32_h (a, len, async)
1382 use iso_c_binding, only: c_int32_t, c_size_t, c_int
1383 use openacc_internal, only: acc_copyout_async_l
1384 use openacc_kinds, only: acc_handle_kind
1385 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1386 type (*), dimension (*) :: a
1387 integer (c_int32_t) len
1388 integer (acc_handle_kind) async
1389 call acc_copyout_async_l (a, int (len, kind = c_size_t), int (async, kind = c_int))
1390 end subroutine
1391
1392 subroutine acc_copyout_async_64_h (a, len, async)
1393 use iso_c_binding, only: c_int64_t, c_size_t, c_int
1394 use openacc_internal, only: acc_copyout_async_l
1395 use openacc_kinds, only: acc_handle_kind
1396 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1397 type (*), dimension (*) :: a
1398 integer (c_int64_t) len
1399 integer (acc_handle_kind) async
1400 call acc_copyout_async_l (a, int (len, kind = c_size_t), int (async, kind = c_int))
1401 end subroutine
1402
1403 subroutine acc_copyout_async_array_h (a, async)
1404 use iso_c_binding, only: c_int
1405 use openacc_internal, only: acc_copyout_async_l
1406 use openacc_kinds, only: acc_handle_kind
1407 type (*), dimension (..), contiguous :: a
1408 integer (acc_handle_kind) async
1409 call acc_copyout_async_l (a, sizeof (a), int (async, kind = c_int))
1410 end subroutine
1411
1412 subroutine acc_delete_async_32_h (a, len, async)
1413 use iso_c_binding, only: c_int32_t, c_size_t, c_int
1414 use openacc_internal, only: acc_delete_async_l
1415 use openacc_kinds, only: acc_handle_kind
1416 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1417 type (*), dimension (*) :: a
1418 integer (c_int32_t) len
1419 integer (acc_handle_kind) async
1420 call acc_delete_async_l (a, int (len, kind = c_size_t), int (async, kind = c_int))
1421 end subroutine
1422
1423 subroutine acc_delete_async_64_h (a, len, async)
1424 use iso_c_binding, only: c_int64_t, c_size_t, c_int
1425 use openacc_internal, only: acc_delete_async_l
1426 use openacc_kinds, only: acc_handle_kind
1427 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1428 type (*), dimension (*) :: a
1429 integer (c_int64_t) len
1430 integer (acc_handle_kind) async
1431 call acc_delete_async_l (a, int (len, kind = c_size_t), int (async, kind = c_int))
1432 end subroutine
1433
1434 subroutine acc_delete_async_array_h (a, async)
1435 use iso_c_binding, only: c_int
1436 use openacc_internal, only: acc_delete_async_l
1437 use openacc_kinds, only: acc_handle_kind
1438 type (*), dimension (..), contiguous :: a
1439 integer (acc_handle_kind) async
1440 call acc_delete_async_l (a, sizeof (a), int (async, kind = c_int))
1441 end subroutine
1442
1443 subroutine acc_update_device_async_32_h (a, len, async)
1444 use iso_c_binding, only: c_int32_t, c_size_t, c_int
1445 use openacc_internal, only: acc_update_device_async_l
1446 use openacc_kinds, only: acc_handle_kind
1447 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1448 type (*), dimension (*) :: a
1449 integer (c_int32_t) len
1450 integer (acc_handle_kind) async
1451 call acc_update_device_async_l (a, int (len, kind = c_size_t), int (async, kind = c_int))
1452 end subroutine
1453
1454 subroutine acc_update_device_async_64_h (a, len, async)
1455 use iso_c_binding, only: c_int64_t, c_size_t, c_int
1456 use openacc_internal, only: acc_update_device_async_l
1457 use openacc_kinds, only: acc_handle_kind
1458 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1459 type (*), dimension (*) :: a
1460 integer (c_int64_t) len
1461 integer (acc_handle_kind) async
1462 call acc_update_device_async_l (a, int (len, kind = c_size_t), int (async, kind = c_int))
1463 end subroutine
1464
1465 subroutine acc_update_device_async_array_h (a, async)
1466 use iso_c_binding, only: c_int
1467 use openacc_internal, only: acc_update_device_async_l
1468 use openacc_kinds, only: acc_handle_kind
1469 type (*), dimension (..), contiguous :: a
1470 integer (acc_handle_kind) async
1471 call acc_update_device_async_l (a, sizeof (a), int (async, kind = c_int))
1472 end subroutine
1473
1474 subroutine acc_update_self_async_32_h (a, len, async)
1475 use iso_c_binding, only: c_int32_t, c_size_t, c_int
1476 use openacc_internal, only: acc_update_self_async_l
1477 use openacc_kinds, only: acc_handle_kind
1478 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1479 type (*), dimension (*) :: a
1480 integer (c_int32_t) len
1481 integer (acc_handle_kind) async
1482 call acc_update_self_async_l (a, int (len, kind = c_size_t), int (async, kind = c_int))
1483 end subroutine
1484
1485 subroutine acc_update_self_async_64_h (a, len, async)
1486 use iso_c_binding, only: c_int64_t, c_size_t, c_int
1487 use openacc_internal, only: acc_update_self_async_l
1488 use openacc_kinds, only: acc_handle_kind
1489 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
1490 type (*), dimension (*) :: a
1491 integer (c_int64_t) len
1492 integer (acc_handle_kind) async
1493 call acc_update_self_async_l (a, int (len, kind = c_size_t), int (async, kind = c_int))
1494 end subroutine
1495
1496 subroutine acc_update_self_async_array_h (a, async)
1497 use iso_c_binding, only: c_int
1498 use openacc_internal, only: acc_update_self_async_l
1499 use openacc_kinds, only: acc_handle_kind
1500 type (*), dimension (..), contiguous :: a
1501 integer (acc_handle_kind) async
1502 call acc_update_self_async_l (a, sizeof (a), int (async, kind = c_int))
1503 end subroutine