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