xref: /netbsd-src/external/gpl3/gcc/dist/libgomp/openacc_lib.h (revision d90047b5d07facf36e6c01dcc0bded8997ce9cc2)
1 !  OpenACC Runtime Library Definitions.			-*- mode: fortran -*-
2 
3 !  Copyright (C) 2014-2018 Free Software Foundation, Inc.
4 
5 !  Contributed by Tobias Burnus <burnus@net-b.de>
6 !              and Mentor Embedded.
7 
8 !  This file is part of the GNU Offloading and Multi Processing Library
9 !  (libgomp).
10 
11 !  Libgomp is free software; you can redistribute it and/or modify it
12 !  under the terms of the GNU General Public License as published by
13 !  the Free Software Foundation; either version 3, or (at your option)
14 !  any later version.
15 
16 !  Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY
17 !  WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
18 !  FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
19 !  more details.
20 
21 !  Under Section 7 of GPL version 3, you are granted additional
22 !  permissions described in the GCC Runtime Library Exception, version
23 !  3.1, as published by the Free Software Foundation.
24 
25 !  You should have received a copy of the GNU General Public License and
26 !  a copy of the GCC Runtime Library Exception along with this program;
27 !  see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
28 !  <http://www.gnu.org/licenses/>.
29 
30 ! 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
41 !     integer (acc_device_kind), parameter :: acc_device_host_nonshm = 3
42 !     removed.
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 
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 
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 
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 
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
205         procedure :: acc_present_or_copyin_32_h
206         procedure :: acc_present_or_copyin_64_h
207         procedure :: acc_present_or_copyin_array_h
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
251         procedure :: acc_present_or_create_32_h
252         procedure :: acc_present_or_create_64_h
253         procedure :: acc_present_or_create_array_h
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 
276       interface acc_delete
277         subroutine acc_delete_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_delete_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_delete_array_h (a)
292           type (*), dimension (..), contiguous :: a
293         end subroutine
294       end interface
295 
296       interface acc_update_device
297         subroutine acc_update_device_32_h (a, len)
298           use iso_c_binding, only: c_int32_t
299           !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
300           type (*), dimension (*) :: a
301           integer (c_int32_t) len
302         end subroutine
303 
304         subroutine acc_update_device_64_h (a, len)
305           use iso_c_binding, only: c_int64_t
306           !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
307           type (*), dimension (*) :: a
308           integer (c_int64_t) len
309         end subroutine
310 
311         subroutine acc_update_device_array_h (a)
312           type (*), dimension (..), contiguous :: a
313         end subroutine
314       end interface
315 
316       interface acc_update_self
317         subroutine acc_update_self_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_update_self_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_update_self_array_h (a)
332           type (*), dimension (..), contiguous :: a
333         end subroutine
334       end interface
335 
336       ! acc_map_data: Only available in C/C++
337       ! acc_unmap_data: Only available in C/C++
338       ! acc_deviceptr: Only available in C/C++
339       ! acc_hostptr: Only available in C/C++
340 
341       interface acc_is_present
342         function acc_is_present_32_h (a, len)
343           use iso_c_binding, only: c_int32_t
344           logical acc_is_present_32_h
345           !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
346           type (*), dimension (*) :: a
347           integer (c_int32_t) len
348         end function
349 
350         function acc_is_present_64_h (a, len)
351           use iso_c_binding, only: c_int64_t
352           logical acc_is_present_64_h
353           !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
354           type (*), dimension (*) :: a
355           integer (c_int64_t) len
356         end function
357 
358         function acc_is_present_array_h (a)
359           logical acc_is_present_array_h
360           type (*), dimension (..), contiguous :: a
361         end function
362       end interface
363 
364       ! acc_memcpy_to_device: Only available in C/C++
365       ! acc_memcpy_from_device: Only available in C/C++
366