xref: /netbsd-src/external/gpl3/gcc.old/dist/libgomp/openacc_lib.h (revision c38e7cc395b1472a774ff828e46123de44c628e9)
1 !  OpenACC Runtime Library Definitions.			-*- mode: fortran -*-
2 
3 !  Copyright (C) 2014-2015 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       integer (acc_device_kind), parameter :: acc_device_not_host = 4
43       integer (acc_device_kind), parameter :: acc_device_nvidia = 5
44 
45       integer, parameter :: acc_handle_kind = 4
46 
47 !     Keep in sync with include/gomp-constants.h.
48       integer (acc_handle_kind), parameter :: acc_async_noval = -1
49       integer (acc_handle_kind), parameter :: acc_async_sync = -2
50 
51       integer, parameter :: openacc_version = 201306
52 
53       interface acc_get_num_devices
54         function acc_get_num_devices_h (d)
55           import acc_device_kind
56           integer acc_get_num_devices_h
57           integer (acc_device_kind) d
58         end function
59       end interface
60 
61       interface acc_set_device_type
62         subroutine acc_set_device_type_h (d)
63           import acc_device_kind
64           integer (acc_device_kind) d
65         end subroutine
66       end interface
67 
68       interface acc_get_device_type
69         function acc_get_device_type_h ()
70           import acc_device_kind
71           integer (acc_device_kind) acc_get_device_type_h
72         end function
73       end interface
74 
75       interface acc_set_device_num
76         subroutine acc_set_device_num_h (n, d)
77           import acc_device_kind
78           integer n
79           integer (acc_device_kind) d
80         end subroutine
81       end interface
82 
83       interface acc_get_device_num
84         function acc_get_device_num_h (d)
85           import acc_device_kind
86           integer acc_get_device_num_h
87           integer (acc_device_kind) d
88         end function
89       end interface
90 
91       interface acc_async_test
92         function acc_async_test_h (a)
93           logical acc_async_test_h
94           integer a
95         end function
96       end interface
97 
98       interface acc_async_test_all
99         function acc_async_test_all_h ()
100           logical acc_async_test_all_h
101         end function
102       end interface
103 
104       interface acc_wait
105         subroutine acc_wait_h (a)
106           integer a
107         end subroutine
108       end interface
109 
110       interface acc_wait_async
111         subroutine acc_wait_async_h (a1, a2)
112           integer a1, a2
113         end subroutine
114       end interface
115 
116       interface acc_wait_all
117         subroutine acc_wait_all_h ()
118         end subroutine
119       end interface
120 
121       interface acc_wait_all_async
122         subroutine acc_wait_all_async_h (a)
123           integer a
124         end subroutine
125       end interface
126 
127       interface acc_init
128         subroutine acc_init_h (devicetype)
129           import acc_device_kind
130           integer (acc_device_kind) devicetype
131         end subroutine
132       end interface
133 
134       interface acc_shutdown
135         subroutine acc_shutdown_h (devicetype)
136           import acc_device_kind
137           integer (acc_device_kind) devicetype
138         end subroutine
139       end interface
140 
141       interface acc_on_device
142         function acc_on_device_h (devicetype)
143           import acc_device_kind
144           logical acc_on_device_h
145           integer (acc_device_kind) devicetype
146         end function
147       end interface
148 
149       ! acc_malloc: Only available in C/C++
150       ! acc_free: Only available in C/C++
151 
152       interface acc_copyin
153         subroutine acc_copyin_32_h (a, len)
154           use iso_c_binding, only: c_int32_t
155           !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
156           type (*), dimension (*) :: a
157           integer (c_int32_t) len
158         end subroutine
159 
160         subroutine acc_copyin_64_h (a, len)
161           use iso_c_binding, only: c_int64_t
162           !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
163           type (*), dimension (*) :: a
164           integer (c_int64_t) len
165         end subroutine
166 
167         subroutine acc_copyin_array_h (a)
168           type (*), dimension (..), contiguous :: a
169           end subroutine
170       end interface
171 
172       interface acc_present_or_copyin
173         subroutine acc_present_or_copyin_32_h (a, len)
174           use iso_c_binding, only: c_int32_t
175           !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
176           type (*), dimension (*) :: a
177           integer (c_int32_t) len
178         end subroutine
179 
180         subroutine acc_present_or_copyin_64_h (a, len)
181           use iso_c_binding, only: c_int64_t
182           !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
183           type (*), dimension (*) :: a
184           integer (c_int64_t) len
185         end subroutine
186 
187         subroutine acc_present_or_copyin_array_h (a)
188           type (*), dimension (..), contiguous :: a
189           end subroutine
190       end interface
191 
192       interface acc_pcopyin
193         subroutine acc_pcopyin_32_h (a, len)
194           use iso_c_binding, only: c_int32_t
195           !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
196           type (*), dimension (*) :: a
197           integer (c_int32_t) len
198         end subroutine
199 
200         subroutine acc_pcopyin_64_h (a, len)
201           use iso_c_binding, only: c_int64_t
202           !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
203           type (*), dimension (*) :: a
204           integer (c_int64_t) len
205         end subroutine
206 
207         subroutine acc_pcopyin_array_h (a)
208           type (*), dimension (..), contiguous :: a
209           end subroutine
210       end interface
211 
212       interface acc_create
213         subroutine acc_create_32_h (a, len)
214           use iso_c_binding, only: c_int32_t
215           !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
216           type (*), dimension (*) :: a
217           integer (c_int32_t) len
218         end subroutine
219 
220         subroutine acc_create_64_h (a, len)
221           use iso_c_binding, only: c_int64_t
222           !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
223           type (*), dimension (*) :: a
224           integer (c_int64_t) len
225         end subroutine
226 
227         subroutine acc_create_array_h (a)
228           type (*), dimension (..), contiguous :: a
229           end subroutine
230       end interface
231 
232       interface acc_present_or_create
233         subroutine acc_present_or_create_32_h (a, len)
234           use iso_c_binding, only: c_int32_t
235           !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
236           type (*), dimension (*) :: a
237           integer (c_int32_t) len
238         end subroutine
239 
240         subroutine acc_present_or_create_64_h (a, len)
241           use iso_c_binding, only: c_int64_t
242           !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
243           type (*), dimension (*) :: a
244           integer (c_int64_t) len
245         end subroutine
246 
247         subroutine acc_present_or_create_array_h (a)
248           type (*), dimension (..), contiguous :: a
249           end subroutine
250       end interface
251 
252       interface acc_pcreate
253         subroutine acc_pcreate_32_h (a, len)
254           use iso_c_binding, only: c_int32_t
255           !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
256           type (*), dimension (*) :: a
257           integer (c_int32_t) len
258         end subroutine
259 
260         subroutine acc_pcreate_64_h (a, len)
261           use iso_c_binding, only: c_int64_t
262           !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
263           type (*), dimension (*) :: a
264           integer (c_int64_t) len
265         end subroutine
266 
267         subroutine acc_pcreate_array_h (a)
268           type (*), dimension (..), contiguous :: a
269           end subroutine
270       end interface
271 
272       interface acc_copyout
273         subroutine acc_copyout_32_h (a, len)
274           use iso_c_binding, only: c_int32_t
275           !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
276           type (*), dimension (*) :: a
277           integer (c_int32_t) len
278         end subroutine
279 
280         subroutine acc_copyout_64_h (a, len)
281           use iso_c_binding, only: c_int64_t
282           !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
283           type (*), dimension (*) :: a
284           integer (c_int64_t) len
285         end subroutine
286 
287         subroutine acc_copyout_array_h (a)
288           type (*), dimension (..), contiguous :: a
289         end subroutine
290       end interface
291 
292       interface acc_delete
293         subroutine acc_delete_32_h (a, len)
294           use iso_c_binding, only: c_int32_t
295           !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
296           type (*), dimension (*) :: a
297           integer (c_int32_t) len
298         end subroutine
299 
300         subroutine acc_delete_64_h (a, len)
301           use iso_c_binding, only: c_int64_t
302           !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
303           type (*), dimension (*) :: a
304           integer (c_int64_t) len
305         end subroutine
306 
307         subroutine acc_delete_array_h (a)
308           type (*), dimension (..), contiguous :: a
309         end subroutine
310       end interface
311 
312       interface acc_update_device
313         subroutine acc_update_device_32_h (a, len)
314           use iso_c_binding, only: c_int32_t
315           !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
316           type (*), dimension (*) :: a
317           integer (c_int32_t) len
318         end subroutine
319 
320         subroutine acc_update_device_64_h (a, len)
321           use iso_c_binding, only: c_int64_t
322           !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
323           type (*), dimension (*) :: a
324           integer (c_int64_t) len
325         end subroutine
326 
327         subroutine acc_update_device_array_h (a)
328           type (*), dimension (..), contiguous :: a
329         end subroutine
330       end interface
331 
332       interface acc_update_self
333         subroutine acc_update_self_32_h (a, len)
334           use iso_c_binding, only: c_int32_t
335           !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
336           type (*), dimension (*) :: a
337           integer (c_int32_t) len
338         end subroutine
339 
340         subroutine acc_update_self_64_h (a, len)
341           use iso_c_binding, only: c_int64_t
342           !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
343           type (*), dimension (*) :: a
344           integer (c_int64_t) len
345         end subroutine
346 
347         subroutine acc_update_self_array_h (a)
348           type (*), dimension (..), contiguous :: a
349         end subroutine
350       end interface
351 
352       ! acc_map_data: Only available in C/C++
353       ! acc_unmap_data: Only available in C/C++
354       ! acc_deviceptr: Only available in C/C++
355       ! acc_ostptr: Only available in C/C++
356 
357       interface acc_is_present
358         function acc_is_present_32_h (a, len)
359           use iso_c_binding, only: c_int32_t
360           logical acc_is_present_32_h
361           !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
362           type (*), dimension (*) :: a
363           integer (c_int32_t) len
364         end function
365 
366         function acc_is_present_64_h (a, len)
367           use iso_c_binding, only: c_int64_t
368           logical acc_is_present_64_h
369           !GCC$ ATTRIBUTES NO_ARG_CHECK :: a
370           type (*), dimension (*) :: a
371           integer (c_int64_t) len
372         end function
373 
374         function acc_is_present_array_h (a)
375           logical acc_is_present_array_h
376           type (*), dimension (..), contiguous :: a
377         end function
378       end interface
379 
380       ! acc_memcpy_to_device: Only available in C/C++
381       ! acc_memcpy_from_device: Only available in C/C++
382