1! Copyright (C) 2005-2022 Free Software Foundation, Inc. 2! Contributed by Jakub Jelinek <jakub@redhat.com>. 3 4! This file is part of the GNU Offloading and Multi Processing Library 5! (libgomp). 6 7! Libgomp is free software; you can redistribute it and/or modify it 8! under the terms of the GNU General Public License as published by 9! the Free Software Foundation; either version 3, or (at your option) 10! any later version. 11 12! Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY 13! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 14! FOR A PARTICULAR PURPOSE. See the GNU General Public License for 15! more details. 16 17! Under Section 7 of GPL version 3, you are granted additional 18! permissions described in the GCC Runtime Library Exception, version 19! 3.1, as published by the Free Software Foundation. 20 21! You should have received a copy of the GNU General Public License and 22! a copy of the GCC Runtime Library Exception along with this program; 23! see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 24! <http://www.gnu.org/licenses/>. 25 26 integer omp_lock_kind, omp_nest_lock_kind, openmp_version 27 parameter (omp_lock_kind = @OMP_LOCK_KIND@) 28 parameter (omp_nest_lock_kind = @OMP_NEST_LOCK_KIND@) 29 integer omp_depend_kind 30 parameter (omp_depend_kind = @OMP_DEPEND_KIND@) 31 integer omp_sched_kind 32 parameter (omp_sched_kind = 4) 33 integer (omp_sched_kind) omp_sched_static, omp_sched_dynamic 34 integer (omp_sched_kind) omp_sched_guided, omp_sched_auto 35 parameter (omp_sched_static = 1) 36 parameter (omp_sched_dynamic = 2) 37 parameter (omp_sched_guided = 3) 38 parameter (omp_sched_auto = 4) 39 integer omp_proc_bind_kind 40 parameter (omp_proc_bind_kind = 4) 41 integer (omp_proc_bind_kind) omp_proc_bind_false 42 integer (omp_proc_bind_kind) omp_proc_bind_true 43 integer (omp_proc_bind_kind) omp_proc_bind_primary 44 integer (omp_proc_bind_kind) omp_proc_bind_master 45 integer (omp_proc_bind_kind) omp_proc_bind_close 46 integer (omp_proc_bind_kind) omp_proc_bind_spread 47 parameter (omp_proc_bind_false = 0) 48 parameter (omp_proc_bind_true = 1) 49 parameter (omp_proc_bind_primary = 2) 50 parameter (omp_proc_bind_master = 2) 51 parameter (omp_proc_bind_close = 3) 52 parameter (omp_proc_bind_spread = 4) 53 integer omp_sync_hint_kind 54 integer omp_lock_hint_kind 55 parameter (omp_sync_hint_kind = 4) 56 parameter (omp_lock_hint_kind = omp_sync_hint_kind) 57 integer (omp_sync_hint_kind) omp_sync_hint_none 58 integer (omp_lock_hint_kind) omp_lock_hint_none 59 integer (omp_sync_hint_kind) omp_sync_hint_uncontended 60 integer (omp_lock_hint_kind) omp_lock_hint_uncontended 61 integer (omp_sync_hint_kind) omp_sync_hint_contended 62 integer (omp_sync_hint_kind) omp_lock_hint_contended 63 integer (omp_lock_hint_kind) omp_sync_hint_nonspeculative 64 integer (omp_lock_hint_kind) omp_lock_hint_nonspeculative 65 integer (omp_sync_hint_kind) omp_sync_hint_speculative 66 integer (omp_lock_hint_kind) omp_lock_hint_speculative 67 parameter (omp_sync_hint_none = 0) 68 parameter (omp_lock_hint_none = 0) 69 parameter (omp_sync_hint_uncontended = 1) 70 parameter (omp_lock_hint_uncontended = 1) 71 parameter (omp_sync_hint_contended = 2) 72 parameter (omp_lock_hint_contended = 2) 73 parameter (omp_sync_hint_nonspeculative = 4) 74 parameter (omp_lock_hint_nonspeculative = 4) 75 parameter (omp_sync_hint_speculative = 8) 76 parameter (omp_lock_hint_speculative = 8) 77 parameter (openmp_version = 201511) 78 integer omp_pause_resource_kind 79 parameter (omp_pause_resource_kind = 4) 80 integer (omp_pause_resource_kind) omp_pause_soft 81 integer (omp_pause_resource_kind) omp_pause_hard 82 parameter (omp_pause_soft = 1) 83 parameter (omp_pause_hard = 2) 84 85 integer omp_allocator_handle_kind, omp_alloctrait_key_kind 86 integer omp_alloctrait_val_kind, omp_memspace_handle_kind 87 integer omp_event_handle_kind 88 parameter (omp_allocator_handle_kind = @INTPTR_T_KIND@) 89 parameter (omp_alloctrait_key_kind = 4) 90 parameter (omp_alloctrait_val_kind = @INTPTR_T_KIND@) 91 parameter (omp_memspace_handle_kind = @INTPTR_T_KIND@) 92 parameter (omp_event_handle_kind = @INTPTR_T_KIND@) 93 integer (omp_alloctrait_key_kind) omp_atk_sync_hint 94 integer (omp_alloctrait_key_kind) omp_atk_alignment 95 integer (omp_alloctrait_key_kind) omp_atk_access 96 integer (omp_alloctrait_key_kind) omp_atk_pool_size 97 integer (omp_alloctrait_key_kind) omp_atk_fallback 98 integer (omp_alloctrait_key_kind) omp_atk_fb_data 99 integer (omp_alloctrait_key_kind) omp_atk_pinned 100 integer (omp_alloctrait_key_kind) omp_atk_partition 101 parameter (omp_atk_sync_hint = 1) 102 parameter (omp_atk_alignment = 2) 103 parameter (omp_atk_access = 3) 104 parameter (omp_atk_pool_size = 4) 105 parameter (omp_atk_fallback = 5) 106 parameter (omp_atk_fb_data = 6) 107 parameter (omp_atk_pinned = 7) 108 parameter (omp_atk_partition = 8) 109 integer (omp_alloctrait_val_kind) omp_atv_false 110 integer (omp_alloctrait_val_kind) omp_atv_true 111 integer (omp_alloctrait_val_kind) omp_atv_default 112 integer (omp_alloctrait_val_kind) omp_atv_contended 113 integer (omp_alloctrait_val_kind) omp_atv_uncontended 114 integer (omp_alloctrait_val_kind) omp_atv_serialized 115 integer (omp_alloctrait_val_kind) omp_atv_sequential 116 integer (omp_alloctrait_val_kind) omp_atv_private 117 integer (omp_alloctrait_val_kind) omp_atv_all 118 integer (omp_alloctrait_val_kind) omp_atv_thread 119 integer (omp_alloctrait_val_kind) omp_atv_pteam 120 integer (omp_alloctrait_val_kind) omp_atv_cgroup 121 integer (omp_alloctrait_val_kind) omp_atv_default_mem_fb 122 integer (omp_alloctrait_val_kind) omp_atv_null_fb 123 integer (omp_alloctrait_val_kind) omp_atv_abort_fb 124 integer (omp_alloctrait_val_kind) omp_atv_allocator_fb 125 integer (omp_alloctrait_val_kind) omp_atv_environment 126 integer (omp_alloctrait_val_kind) omp_atv_nearest 127 integer (omp_alloctrait_val_kind) omp_atv_blocked 128 integer (omp_alloctrait_val_kind) omp_atv_interleaved 129 parameter (omp_atv_default = -1) 130 parameter (omp_atv_false = 0) 131 parameter (omp_atv_true = 1) 132 parameter (omp_atv_contended = 3) 133 parameter (omp_atv_uncontended = 4) 134 parameter (omp_atv_serialized = 5) 135 parameter (omp_atv_sequential = omp_atv_serialized) 136 parameter (omp_atv_private = 6) 137 parameter (omp_atv_all = 7) 138 parameter (omp_atv_thread = 8) 139 parameter (omp_atv_pteam = 9) 140 parameter (omp_atv_cgroup = 10) 141 parameter (omp_atv_default_mem_fb = 11) 142 parameter (omp_atv_null_fb = 12) 143 parameter (omp_atv_abort_fb = 13) 144 parameter (omp_atv_allocator_fb = 14) 145 parameter (omp_atv_environment = 15) 146 parameter (omp_atv_nearest = 16) 147 parameter (omp_atv_blocked = 17) 148 parameter (omp_atv_interleaved = 18) 149 integer (omp_allocator_handle_kind) omp_null_allocator 150 integer (omp_allocator_handle_kind) omp_default_mem_alloc 151 integer (omp_allocator_handle_kind) omp_large_cap_mem_alloc 152 integer (omp_allocator_handle_kind) omp_const_mem_alloc 153 integer (omp_allocator_handle_kind) omp_high_bw_mem_alloc 154 integer (omp_allocator_handle_kind) omp_low_lat_mem_alloc 155 integer (omp_allocator_handle_kind) omp_cgroup_mem_alloc 156 integer (omp_allocator_handle_kind) omp_pteam_mem_alloc 157 integer (omp_allocator_handle_kind) omp_thread_mem_alloc 158 parameter (omp_null_allocator = 0) 159 parameter (omp_default_mem_alloc = 1) 160 parameter (omp_large_cap_mem_alloc = 2) 161 parameter (omp_const_mem_alloc = 3) 162 parameter (omp_high_bw_mem_alloc = 4) 163 parameter (omp_low_lat_mem_alloc = 5) 164 parameter (omp_cgroup_mem_alloc = 6) 165 parameter (omp_pteam_mem_alloc = 7) 166 parameter (omp_thread_mem_alloc = 8) 167 integer (omp_memspace_handle_kind) omp_default_mem_space 168 integer (omp_memspace_handle_kind) omp_large_cap_mem_space 169 integer (omp_memspace_handle_kind) omp_const_mem_space 170 integer (omp_memspace_handle_kind) omp_high_bw_mem_space 171 integer (omp_memspace_handle_kind) omp_low_lat_mem_space 172 parameter (omp_default_mem_space = 0) 173 parameter (omp_large_cap_mem_space = 1) 174 parameter (omp_const_mem_space = 2) 175 parameter (omp_high_bw_mem_space = 3) 176 parameter (omp_low_lat_mem_space = 4) 177 178 type omp_alloctrait 179 integer (omp_alloctrait_key_kind) key 180 integer (omp_alloctrait_val_kind) value 181 end type omp_alloctrait 182 183 external omp_init_lock, omp_init_nest_lock 184 external omp_init_lock_with_hint 185 external omp_init_nest_lock_with_hint 186 external omp_destroy_lock, omp_destroy_nest_lock 187 external omp_set_lock, omp_set_nest_lock 188 external omp_unset_lock, omp_unset_nest_lock 189 external omp_set_dynamic, omp_set_nested 190 external omp_set_num_threads 191 192 external omp_get_dynamic, omp_get_nested 193 logical(4) omp_get_dynamic, omp_get_nested 194 external omp_test_lock, omp_in_parallel 195 logical(4) omp_test_lock, omp_in_parallel 196 197 external omp_get_max_threads, omp_get_num_procs 198 integer(4) omp_get_max_threads, omp_get_num_procs 199 external omp_get_num_threads, omp_get_thread_num 200 integer(4) omp_get_num_threads, omp_get_thread_num 201 external omp_test_nest_lock 202 integer(4) omp_test_nest_lock 203 204 external omp_get_wtick, omp_get_wtime 205 double precision omp_get_wtick, omp_get_wtime 206 207 external omp_set_schedule, omp_get_schedule 208 external omp_get_thread_limit, omp_set_max_active_levels 209 external omp_get_max_active_levels, omp_get_level 210 external omp_get_ancestor_thread_num, omp_get_team_size 211 external omp_get_active_level 212 external omp_get_supported_active_levels 213 integer(4) omp_get_thread_limit, omp_get_max_active_levels 214 integer(4) omp_get_level, omp_get_ancestor_thread_num 215 integer(4) omp_get_team_size, omp_get_active_level 216 integer(4) omp_get_supported_active_levels 217 218 external omp_in_final 219 logical(4) omp_in_final 220 221 external omp_get_cancellation 222 logical(4) omp_get_cancellation 223 224 external omp_get_proc_bind 225 integer(omp_proc_bind_kind) omp_get_proc_bind 226 227 integer(4) omp_get_num_places 228 external omp_get_num_places 229 integer(4) omp_get_place_num_procs 230 external omp_get_place_num_procs 231 external omp_get_place_proc_ids 232 integer(4) omp_get_place_num 233 external omp_get_place_num 234 integer(4) omp_get_partition_num_places 235 external omp_get_partition_num_places 236 external omp_get_partition_place_nums 237 238 external omp_set_default_device, omp_get_default_device 239 external omp_get_num_devices, omp_get_num_teams 240 external omp_get_team_num 241 integer(4) omp_get_default_device, omp_get_num_devices 242 integer(4) omp_get_num_teams, omp_get_team_num 243 244 external omp_is_initial_device 245 logical(4) omp_is_initial_device 246 external omp_get_initial_device 247 integer(4) omp_get_initial_device 248 249 external omp_get_device_num 250 integer(4) omp_get_device_num 251 252 external omp_get_max_task_priority 253 integer(4) omp_get_max_task_priority 254 255 external omp_set_num_teams, omp_set_teams_thread_limit 256 external omp_get_max_teams, omp_get_teams_thread_limit 257 integer(4) omp_get_max_teams, omp_get_teams_thread_limit 258 259 external omp_fulfill_event 260 261 external omp_set_affinity_format, omp_get_affinity_format 262 external omp_display_affinity, omp_capture_affinity 263 integer(4) omp_get_affinity_format 264 integer(4) omp_capture_affinity 265 266 external omp_pause_resource, omp_pause_resource_all 267 integer(4) omp_pause_resource 268 integer(4) omp_pause_resource_all 269 270 external omp_init_allocator 271 integer (omp_allocator_handle_kind) omp_init_allocator 272 external omp_destroy_allocator 273 external omp_set_default_allocator 274 external omp_get_default_allocator 275 integer (omp_allocator_handle_kind) omp_get_default_allocator 276 277 external omp_display_env 278 279 interface 280 function omp_alloc (size, allocator) bind(c) 281 use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t 282 use, intrinsic :: omp_lib_kinds 283 type(c_ptr) :: omp_alloc 284 integer(c_size_t), value :: size 285 integer(omp_allocator_handle_kind), value :: allocator 286 end function omp_alloc 287 end interface 288 289 interface 290 function omp_aligned_alloc (alignment, size, allocator) bind(c) 291 use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t 292 use, intrinsic :: omp_lib_kinds 293 type(c_ptr) :: omp_aligned_alloc 294 integer(c_size_t), value :: alignment, size 295 integer(omp_allocator_handle_kind), value :: allocator 296 end function omp_aligned_alloc 297 end interface 298 299 interface 300 subroutine omp_free(ptr, allocator) bind(c) 301 use, intrinsic :: iso_c_binding, only : c_ptr 302 use, intrinsic :: omp_lib_kinds 303 type(c_ptr), value :: ptr 304 integer(omp_allocator_handle_kind), value :: allocator 305 end subroutine omp_free 306 end interface 307 308 interface 309 function omp_calloc (nmemb, size, allocator) bind(c) 310 use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t 311 use, intrinsic :: omp_lib_kinds 312 type(c_ptr) :: omp_calloc 313 integer(c_size_t), value :: nmemb, size 314 integer(omp_allocator_handle_kind), value :: allocator 315 end function omp_calloc 316 end interface 317 318 interface 319 function omp_aligned_calloc (alignment, nmemb, size, allocator) & 320 & bind(c) 321 use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t 322 use, intrinsic :: omp_lib_kinds 323 type(c_ptr) :: omp_aligned_calloc 324 integer(c_size_t), value :: alignment, nmemb, size 325 integer(omp_allocator_handle_kind), value :: allocator 326 end function omp_aligned_calloc 327 end interface 328 329 interface 330 function omp_realloc (ptr, size, allocator, free_allocator) & 331 & bind(c) 332 use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t 333 use, intrinsic :: omp_lib_kinds 334 type(c_ptr) :: omp_realloc 335 type(c_ptr), value :: ptr 336 integer(c_size_t), value :: size 337 integer(omp_allocator_handle_kind), value :: allocator 338 integer(omp_allocator_handle_kind), value :: free_allocator 339 end function omp_realloc 340 end interface 341 342 interface 343 function omp_target_alloc (size, device_num) bind(c) 344 use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t, c_int 345 type(c_ptr) :: omp_target_alloc 346 integer(c_size_t), value :: size 347 integer(c_int), value :: device_num 348 end function omp_target_alloc 349 end interface 350 351 interface 352 subroutine omp_target_free (device_ptr, device_num) bind(c) 353 use, intrinsic :: iso_c_binding, only : c_ptr, c_int 354 type(c_ptr), value :: device_ptr 355 integer(c_int), value :: device_num 356 end subroutine omp_target_free 357 end interface 358 359 interface 360 function omp_target_is_present (ptr, device_num) bind(c) 361 use, intrinsic :: iso_c_binding, only : c_ptr, c_int 362 integer(c_int) :: omp_target_is_present 363 type(c_ptr), value :: ptr 364 integer(c_int), value :: device_num 365 end function omp_target_is_present 366 end interface 367 368 interface 369 function omp_target_memcpy (dst, src, length, dst_offset, & 370 & src_offset, dst_device_num, & 371 & src_device_num) bind(c) 372 use, intrinsic :: iso_c_binding, only : c_ptr, c_int, c_size_t 373 integer(c_int) :: omp_target_memcpy 374 type(c_ptr), value :: dst, src 375 integer(c_size_t), value :: length, dst_offset, src_offset 376 integer(c_int), value :: dst_device_num, src_device_num 377 end function omp_target_memcpy 378 end interface 379 380 interface 381 function omp_target_memcpy_rect (dst,src,element_size, num_dims, & 382 & volume, dst_offsets, & 383 & src_offsets, dst_dimensions, & 384 & src_dimensions, dst_device_num, & 385 & src_device_num) bind(c) 386 use, intrinsic :: iso_c_binding, only : c_ptr, c_int, c_size_t 387 integer(c_int) :: omp_target_memcpy_rect 388 type(c_ptr), value :: dst, src 389 integer(c_size_t), value :: element_size 390 integer(c_int), value :: num_dims 391 integer(c_int), value :: dst_device_num, src_device_num 392 integer(c_size_t), intent(in) :: volume(*), dst_offsets(*) 393 integer(c_size_t), intent(in) :: src_offsets(*) 394 integer(c_size_t), intent(in) :: dst_dimensions(*) 395 integer(c_size_t), intent(in) :: src_dimensions(*) 396 end function omp_target_memcpy_rect 397 end interface 398 399 interface 400 function omp_target_associate_ptr (host_ptr, device_ptr, size, & 401 & device_offset, device_num) & 402 & bind(c) 403 use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t, c_int 404 integer(c_int) :: omp_target_associate_ptr 405 type(c_ptr), value :: host_ptr, device_ptr 406 integer(c_size_t), value :: size, device_offset 407 integer(c_int), value :: device_num 408 end function omp_target_associate_ptr 409 end interface 410 411 interface 412 function omp_target_disassociate_ptr (ptr, device_num) bind(c) 413 use, intrinsic :: iso_c_binding, only : c_ptr, c_int 414 integer(c_int) :: omp_target_disassociate_ptr 415 type(c_ptr), value :: ptr 416 integer(c_int), value :: device_num 417 end function omp_target_disassociate_ptr 418 end interface 419