]> git.ipfire.org Git - thirdparty/gcc.git/blame - libgomp/openacc_lib.h
Cleanup algorithm implementations
[thirdparty/gcc.git] / libgomp / openacc_lib.h
CommitLineData
ca4c3545 1! OpenACC Runtime Library Definitions. -*- mode: fortran -*-
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
30! NOTE: Due to the use of dimension (..), the code only works when compiled
31! with -std=f2008ts/gnu/legacy but not with other standard settings.
32! Alternatively, the user can use the module version, which permits
33! compilation with -std=f95.
34
35 integer, parameter :: acc_device_kind = 4
36
37! Keep in sync with include/gomp-constants.h.
38 integer (acc_device_kind), parameter :: acc_device_none = 0
39 integer (acc_device_kind), parameter :: acc_device_default = 1
40 integer (acc_device_kind), parameter :: acc_device_host = 2
f212338e 41! integer (acc_device_kind), parameter :: acc_device_host_nonshm = 3
42! removed.
ca4c3545 43 integer (acc_device_kind), parameter :: acc_device_not_host = 4
44 integer (acc_device_kind), parameter :: acc_device_nvidia = 5
45
46 integer, parameter :: acc_handle_kind = 4
47
48! Keep in sync with include/gomp-constants.h.
49 integer (acc_handle_kind), parameter :: acc_async_noval = -1
50 integer (acc_handle_kind), parameter :: acc_async_sync = -2
51
52 integer, parameter :: openacc_version = 201306
53
54 interface acc_get_num_devices
55 function acc_get_num_devices_h (d)
56 import acc_device_kind
57 integer acc_get_num_devices_h
58 integer (acc_device_kind) d
59 end function
60 end interface
61
62 interface acc_set_device_type
63 subroutine acc_set_device_type_h (d)
64 import acc_device_kind
65 integer (acc_device_kind) d
66 end subroutine
67 end interface
68
69 interface acc_get_device_type
70 function acc_get_device_type_h ()
71 import acc_device_kind
72 integer (acc_device_kind) acc_get_device_type_h
73 end function
74 end interface
75
76 interface acc_set_device_num
77 subroutine acc_set_device_num_h (n, d)
78 import acc_device_kind
79 integer n
80 integer (acc_device_kind) d
81 end subroutine
82 end interface
83
84 interface acc_get_device_num
85 function acc_get_device_num_h (d)
86 import acc_device_kind
87 integer acc_get_device_num_h
88 integer (acc_device_kind) d
89 end function
90 end interface
91
92 interface acc_async_test
93 function acc_async_test_h (a)
94 logical acc_async_test_h
95 integer a
96 end function
97 end interface
98
99 interface acc_async_test_all
100 function acc_async_test_all_h ()
101 logical acc_async_test_all_h
102 end function
103 end interface
104
105 interface acc_wait
106 subroutine acc_wait_h (a)
107 integer a
108 end subroutine
109 end interface
110
0e1c7764 111! acc_async_wait is an OpenACC 1.0 compatibility name for acc_wait.
112 interface acc_async_wait
113 procedure :: acc_wait_h
114 end interface
115
ca4c3545 116 interface acc_wait_async
117 subroutine acc_wait_async_h (a1, a2)
118 integer a1, a2
119 end subroutine
120 end interface
121
122 interface acc_wait_all
123 subroutine acc_wait_all_h ()
124 end subroutine
125 end interface
126
0e1c7764 127! acc_async_wait_all is an OpenACC 1.0 compatibility name for
128! acc_wait_all.
129 interface acc_async_wait_all
130 procedure :: acc_wait_all_h
131 end interface
132
ca4c3545 133 interface acc_wait_all_async
134 subroutine acc_wait_all_async_h (a)
135 integer a
136 end subroutine
137 end interface
138
139 interface acc_init
140 subroutine acc_init_h (devicetype)
141 import acc_device_kind
142 integer (acc_device_kind) devicetype
143 end subroutine
144 end interface
145
146 interface acc_shutdown
147 subroutine acc_shutdown_h (devicetype)
148 import acc_device_kind
149 integer (acc_device_kind) devicetype
150 end subroutine
151 end interface
152
153 interface acc_on_device
154 function acc_on_device_h (devicetype)
155 import acc_device_kind
156 logical acc_on_device_h
157 integer (acc_device_kind) devicetype
158 end function
159 end interface
160
161 ! acc_malloc: Only available in C/C++
162 ! acc_free: Only available in C/C++
163
164 interface acc_copyin
165 subroutine acc_copyin_32_h (a, len)
166 use iso_c_binding, only: c_int32_t
167 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
168 type (*), dimension (*) :: a
169 integer (c_int32_t) len
170 end subroutine
171
172 subroutine acc_copyin_64_h (a, len)
173 use iso_c_binding, only: c_int64_t
174 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
175 type (*), dimension (*) :: a
176 integer (c_int64_t) len
177 end subroutine
178
179 subroutine acc_copyin_array_h (a)
180 type (*), dimension (..), contiguous :: a
181 end subroutine
182 end interface
183
184 interface acc_present_or_copyin
185 subroutine acc_present_or_copyin_32_h (a, len)
186 use iso_c_binding, only: c_int32_t
187 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
188 type (*), dimension (*) :: a
189 integer (c_int32_t) len
190 end subroutine
191
192 subroutine acc_present_or_copyin_64_h (a, len)
193 use iso_c_binding, only: c_int64_t
194 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
195 type (*), dimension (*) :: a
196 integer (c_int64_t) len
197 end subroutine
198
199 subroutine acc_present_or_copyin_array_h (a)
200 type (*), dimension (..), contiguous :: a
201 end subroutine
202 end interface
203
204 interface acc_pcopyin
b70df211 205 procedure :: acc_present_or_copyin_32_h
206 procedure :: acc_present_or_copyin_64_h
207 procedure :: acc_present_or_copyin_array_h
ca4c3545 208 end interface
209
210 interface acc_create
211 subroutine acc_create_32_h (a, len)
212 use iso_c_binding, only: c_int32_t
213 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
214 type (*), dimension (*) :: a
215 integer (c_int32_t) len
216 end subroutine
217
218 subroutine acc_create_64_h (a, len)
219 use iso_c_binding, only: c_int64_t
220 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
221 type (*), dimension (*) :: a
222 integer (c_int64_t) len
223 end subroutine
224
225 subroutine acc_create_array_h (a)
226 type (*), dimension (..), contiguous :: a
227 end subroutine
228 end interface
229
230 interface acc_present_or_create
231 subroutine acc_present_or_create_32_h (a, len)
232 use iso_c_binding, only: c_int32_t
233 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
234 type (*), dimension (*) :: a
235 integer (c_int32_t) len
236 end subroutine
237
238 subroutine acc_present_or_create_64_h (a, len)
239 use iso_c_binding, only: c_int64_t
240 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
241 type (*), dimension (*) :: a
242 integer (c_int64_t) len
243 end subroutine
244
245 subroutine acc_present_or_create_array_h (a)
246 type (*), dimension (..), contiguous :: a
247 end subroutine
248 end interface
249
250 interface acc_pcreate
b70df211 251 procedure :: acc_present_or_create_32_h
252 procedure :: acc_present_or_create_64_h
253 procedure :: acc_present_or_create_array_h
ca4c3545 254 end interface
255
256 interface acc_copyout
257 subroutine acc_copyout_32_h (a, len)
258 use iso_c_binding, only: c_int32_t
259 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
260 type (*), dimension (*) :: a
261 integer (c_int32_t) len
262 end subroutine
263
264 subroutine acc_copyout_64_h (a, len)
265 use iso_c_binding, only: c_int64_t
266 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
267 type (*), dimension (*) :: a
268 integer (c_int64_t) len
269 end subroutine
270
271 subroutine acc_copyout_array_h (a)
272 type (*), dimension (..), contiguous :: a
273 end subroutine
274 end interface
275
737cc978 276 interface acc_copyout_finalize
277 subroutine acc_copyout_finalize_32_h (a, len)
278 use iso_c_binding, only: c_int32_t
279 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
280 type (*), dimension (*) :: a
281 integer (c_int32_t) len
282 end subroutine
283
284 subroutine acc_copyout_finalize_64_h (a, len)
285 use iso_c_binding, only: c_int64_t
286 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
287 type (*), dimension (*) :: a
288 integer (c_int64_t) len
289 end subroutine
290
291 subroutine acc_copyout_finalize_array_h (a)
292 type (*), dimension (..), contiguous :: a
293 end subroutine
294 end interface
295
ca4c3545 296 interface acc_delete
297 subroutine acc_delete_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_delete_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_delete_array_h (a)
312 type (*), dimension (..), contiguous :: a
313 end subroutine
314 end interface
315
737cc978 316 interface acc_delete_finalize
317 subroutine acc_delete_finalize_32_h (a, len)
318 use iso_c_binding, only: c_int32_t
319 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
320 type (*), dimension (*) :: a
321 integer (c_int32_t) len
322 end subroutine
323
324 subroutine acc_delete_finalize_64_h (a, len)
325 use iso_c_binding, only: c_int64_t
326 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
327 type (*), dimension (*) :: a
328 integer (c_int64_t) len
329 end subroutine
330
331 subroutine acc_delete_finalize_array_h (a)
332 type (*), dimension (..), contiguous :: a
333 end subroutine
334 end interface
335
ca4c3545 336 interface acc_update_device
337 subroutine acc_update_device_32_h (a, len)
338 use iso_c_binding, only: c_int32_t
339 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
340 type (*), dimension (*) :: a
341 integer (c_int32_t) len
342 end subroutine
343
344 subroutine acc_update_device_64_h (a, len)
345 use iso_c_binding, only: c_int64_t
346 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
347 type (*), dimension (*) :: a
348 integer (c_int64_t) len
349 end subroutine
350
351 subroutine acc_update_device_array_h (a)
352 type (*), dimension (..), contiguous :: a
353 end subroutine
354 end interface
355
356 interface acc_update_self
357 subroutine acc_update_self_32_h (a, len)
358 use iso_c_binding, only: c_int32_t
359 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
360 type (*), dimension (*) :: a
361 integer (c_int32_t) len
362 end subroutine
363
364 subroutine acc_update_self_64_h (a, len)
365 use iso_c_binding, only: c_int64_t
366 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
367 type (*), dimension (*) :: a
368 integer (c_int64_t) len
369 end subroutine
370
371 subroutine acc_update_self_array_h (a)
372 type (*), dimension (..), contiguous :: a
373 end subroutine
374 end interface
375
376 ! acc_map_data: Only available in C/C++
377 ! acc_unmap_data: Only available in C/C++
378 ! acc_deviceptr: Only available in C/C++
b70df211 379 ! acc_hostptr: Only available in C/C++
ca4c3545 380
381 interface acc_is_present
382 function acc_is_present_32_h (a, len)
383 use iso_c_binding, only: c_int32_t
384 logical acc_is_present_32_h
385 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
386 type (*), dimension (*) :: a
387 integer (c_int32_t) len
388 end function
389
390 function acc_is_present_64_h (a, len)
391 use iso_c_binding, only: c_int64_t
392 logical acc_is_present_64_h
393 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
394 type (*), dimension (*) :: a
395 integer (c_int64_t) len
396 end function
397
398 function acc_is_present_array_h (a)
399 logical acc_is_present_array_h
400 type (*), dimension (..), contiguous :: a
401 end function
402 end interface
403
404 ! acc_memcpy_to_device: Only available in C/C++
405 ! acc_memcpy_from_device: Only available in C/C++
2e51c6a2 406
407 interface acc_copyin_async
408 subroutine acc_copyin_async_32_h (a, len, async)
409 use iso_c_binding, only: c_int32_t
410 import 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_copyin_async_64_h (a, len, async)
418 use iso_c_binding, only: c_int64_t
419 import 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_copyin_async_array_h (a, async_)
427 import acc_handle_kind
428 type (*), dimension (..), contiguous :: a
429 integer (acc_handle_kind) async_
430 end subroutine
431 end interface
432
433 interface acc_create_async
434 subroutine acc_create_async_32_h (a, len, async)
435 use iso_c_binding, only: c_int32_t
436 import acc_handle_kind
437 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
438 type (*), dimension (*) :: a
439 integer (c_int32_t) len
440 integer (acc_handle_kind) async
441 end subroutine
442
443 subroutine acc_create_async_64_h (a, len, async)
444 use iso_c_binding, only: c_int64_t
445 import acc_handle_kind
446 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
447 type (*), dimension (*) :: a
448 integer (c_int64_t) len
449 integer (acc_handle_kind) async
450 end subroutine
451
452 subroutine acc_create_async_array_h (a, async_)
453 import acc_handle_kind
454 type (*), dimension (..), contiguous :: a
455 integer (acc_handle_kind) async_
456 end subroutine
457 end interface
458
459 interface acc_copyout_async
460 subroutine acc_copyout_async_32_h (a, len, async)
461 use iso_c_binding, only: c_int32_t
462 import acc_handle_kind
463 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
464 type (*), dimension (*) :: a
465 integer (c_int32_t) len
466 integer (acc_handle_kind) async
467 end subroutine
468
469 subroutine acc_copyout_async_64_h (a, len, async)
470 use iso_c_binding, only: c_int64_t
471 import acc_handle_kind
472 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
473 type (*), dimension (*) :: a
474 integer (c_int64_t) len
475 integer (acc_handle_kind) async
476 end subroutine
477
478 subroutine acc_copyout_async_array_h (a, async_)
479 import acc_handle_kind
480 type (*), dimension (..), contiguous :: a
481 integer (acc_handle_kind) async_
482 end subroutine
483 end interface
484
485 interface acc_delete_async
486 subroutine acc_delete_async_32_h (a, len, async)
487 use iso_c_binding, only: c_int32_t
488 import acc_handle_kind
489 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
490 type (*), dimension (*) :: a
491 integer (c_int32_t) len
492 integer (acc_handle_kind) async
493 end subroutine
494
495 subroutine acc_delete_async_64_h (a, len, async)
496 use iso_c_binding, only: c_int64_t
497 import acc_handle_kind
498 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
499 type (*), dimension (*) :: a
500 integer (c_int64_t) len
501 integer (acc_handle_kind) async
502 end subroutine
503
504 subroutine acc_delete_async_array_h (a, async_)
505 import acc_handle_kind
506 type (*), dimension (..), contiguous :: a
507 integer (acc_handle_kind) async_
508 end subroutine
509 end interface
510
511 interface acc_update_device_async
512 subroutine acc_update_device_async_32_h (a, len, async)
513 use iso_c_binding, only: c_int32_t
514 import acc_handle_kind
515 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
516 type (*), dimension (*) :: a
517 integer (c_int32_t) len
518 integer (acc_handle_kind) async
519 end subroutine
520
521 subroutine acc_update_device_async_64_h (a, len, async)
522 use iso_c_binding, only: c_int64_t
523 import acc_handle_kind
524 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
525 type (*), dimension (*) :: a
526 integer (c_int64_t) len
527 integer (acc_handle_kind) async
528 end subroutine
529
530 subroutine acc_update_device_async_array_h (a, async_)
531 import acc_handle_kind
532 type (*), dimension (..), contiguous :: a
533 integer (acc_handle_kind) async_
534 end subroutine
535 end interface
536
537 interface acc_update_self_async
538 subroutine acc_update_self_async_32_h (a, len, async)
539 use iso_c_binding, only: c_int32_t
540 import acc_handle_kind
541 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
542 type (*), dimension (*) :: a
543 integer (c_int32_t) len
544 integer (acc_handle_kind) async
545 end subroutine
546
547 subroutine acc_update_self_async_64_h (a, len, async)
548 use iso_c_binding, only: c_int64_t
549 import acc_handle_kind
550 !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
551 type (*), dimension (*) :: a
552 integer (c_int64_t) len
553 integer (acc_handle_kind) async
554 end subroutine
555
556 subroutine acc_update_self_async_array_h (a, async_)
557 import acc_handle_kind
558 type (*), dimension (..), contiguous :: a
559 integer (acc_handle_kind) async_
560 end subroutine
561 end interface