]>
Commit | Line | Data |
---|---|---|
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 |