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