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