1! include/omp_lib.f90.var 2 3! 4!//===----------------------------------------------------------------------===// 5!// 6!// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 7!// See https://llvm.org/LICENSE.txt for license information. 8!// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 9!// 10!//===----------------------------------------------------------------------===// 11! 12 13 module omp_lib_kinds 14 15 use, intrinsic :: iso_c_binding 16 17 integer, parameter :: omp_integer_kind = c_int 18 integer, parameter :: omp_logical_kind = 4 19 integer, parameter :: omp_real_kind = c_float 20 integer, parameter :: kmp_double_kind = c_double 21 integer, parameter :: omp_lock_kind = c_intptr_t 22 integer, parameter :: omp_nest_lock_kind = c_intptr_t 23 integer, parameter :: omp_sched_kind = omp_integer_kind 24 integer, parameter :: omp_proc_bind_kind = omp_integer_kind 25 integer, parameter :: kmp_pointer_kind = c_intptr_t 26 integer, parameter :: kmp_size_t_kind = c_size_t 27 integer, parameter :: kmp_affinity_mask_kind = c_intptr_t 28 integer, parameter :: kmp_cancel_kind = omp_integer_kind 29 integer, parameter :: omp_sync_hint_kind = omp_integer_kind 30 integer, parameter :: omp_lock_hint_kind = omp_sync_hint_kind 31 integer, parameter :: omp_control_tool_kind = omp_integer_kind 32 integer, parameter :: omp_control_tool_result_kind = omp_integer_kind 33 integer, parameter :: omp_allocator_handle_kind = c_intptr_t 34 integer, parameter :: omp_memspace_handle_kind = c_intptr_t 35 integer, parameter :: omp_alloctrait_key_kind = omp_integer_kind 36 integer, parameter :: omp_alloctrait_val_kind = c_intptr_t 37 integer, parameter :: omp_interop_kind = c_intptr_t 38 integer, parameter :: omp_interop_fr_kind = omp_integer_kind 39 40 type omp_alloctrait 41 integer(kind=omp_alloctrait_key_kind) key 42 integer(kind=omp_alloctrait_val_kind) value 43 end type omp_alloctrait 44 45 integer, parameter :: omp_pause_resource_kind = omp_integer_kind 46 integer, parameter :: omp_depend_kind = c_intptr_t 47 integer, parameter :: omp_event_handle_kind = c_intptr_t 48 49 end module omp_lib_kinds 50 51 module omp_lib 52 53 use omp_lib_kinds 54 55 integer (kind=omp_integer_kind), parameter :: openmp_version = @LIBOMP_OMP_YEAR_MONTH@ 56 integer (kind=omp_integer_kind), parameter :: kmp_version_major = @LIBOMP_VERSION_MAJOR@ 57 integer (kind=omp_integer_kind), parameter :: kmp_version_minor = @LIBOMP_VERSION_MINOR@ 58 integer (kind=omp_integer_kind), parameter :: kmp_version_build = @LIBOMP_VERSION_BUILD@ 59 character(*) kmp_build_date 60 parameter( kmp_build_date = '@LIBOMP_BUILD_DATE@' ) 61 62 integer(kind=omp_sched_kind), parameter :: omp_sched_static = 1 63 integer(kind=omp_sched_kind), parameter :: omp_sched_dynamic = 2 64 integer(kind=omp_sched_kind), parameter :: omp_sched_guided = 3 65 integer(kind=omp_sched_kind), parameter :: omp_sched_auto = 4 66 integer(kind=omp_sched_kind), parameter :: omp_sched_monotonic = int(Z'80000000', kind=omp_sched_kind) 67 68 integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_false = 0 69 integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_true = 1 70 integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_master = 2 71 integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_close = 3 72 integer (kind=omp_proc_bind_kind), parameter :: omp_proc_bind_spread = 4 73 74 integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_parallel = 1 75 integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_loop = 2 76 integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_sections = 3 77 integer (kind=kmp_cancel_kind), parameter :: kmp_cancel_taskgroup = 4 78 79 integer (kind=omp_sync_hint_kind), parameter :: omp_sync_hint_none = 0 80 integer (kind=omp_sync_hint_kind), parameter :: omp_sync_hint_uncontended = 1 81 integer (kind=omp_sync_hint_kind), parameter :: omp_sync_hint_contended = 2 82 integer (kind=omp_sync_hint_kind), parameter :: omp_sync_hint_nonspeculative = 4 83 integer (kind=omp_sync_hint_kind), parameter :: omp_sync_hint_speculative = 8 84 integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_none = omp_sync_hint_none 85 integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_uncontended = omp_sync_hint_uncontended 86 integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_contended = omp_sync_hint_contended 87 integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_nonspeculative = omp_sync_hint_nonspeculative 88 integer (kind=omp_lock_hint_kind), parameter :: omp_lock_hint_speculative = omp_sync_hint_speculative 89 integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_hle = 65536 90 integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_rtm = 131072 91 integer (kind=omp_lock_hint_kind), parameter :: kmp_lock_hint_adaptive = 262144 92 93 integer (kind=omp_control_tool_kind), parameter :: omp_control_tool_start = 1 94 integer (kind=omp_control_tool_kind), parameter :: omp_control_tool_pause = 2 95 integer (kind=omp_control_tool_kind), parameter :: omp_control_tool_flush = 3 96 integer (kind=omp_control_tool_kind), parameter :: omp_control_tool_end = 4 97 98 integer (kind=omp_control_tool_result_kind), parameter :: omp_control_tool_notool = -2 99 integer (kind=omp_control_tool_result_kind), parameter :: omp_control_tool_nocallback = -1 100 integer (kind=omp_control_tool_result_kind), parameter :: omp_control_tool_success = 0 101 integer (kind=omp_control_tool_result_kind), parameter :: omp_control_tool_ignored = 1 102 103 integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_sync_hint = 1 104 integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_alignment = 2 105 integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_access = 3 106 integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_pool_size = 4 107 integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_fallback = 5 108 integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_fb_data = 6 109 integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_pinned = 7 110 integer (kind=omp_alloctrait_key_kind), parameter :: omp_atk_partition = 8 111 112 integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_default = -1 113 integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_false = 0 114 integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_true = 1 115 integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_contended = 3 116 integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_uncontended = 4 117 integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_serialized = 5 118 integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_sequential = omp_atv_serialized 119 integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_private = 6 120 integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_all = 7 121 integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_thread = 8 122 integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_pteam = 9 123 integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_cgroup = 10 124 integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_default_mem_fb = 11 125 integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_null_fb = 12 126 integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_abort_fb = 13 127 integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_allocator_fb = 14 128 integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_environment = 15 129 integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_nearest = 16 130 integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_blocked = 17 131 integer (kind=omp_alloctrait_val_kind), parameter :: omp_atv_interleaved = 18 132 133 integer (kind=omp_allocator_handle_kind), parameter :: omp_null_allocator = 0 134 integer (kind=omp_allocator_handle_kind), parameter :: omp_default_mem_alloc = 1 135 integer (kind=omp_allocator_handle_kind), parameter :: omp_large_cap_mem_alloc = 2 136 integer (kind=omp_allocator_handle_kind), parameter :: omp_const_mem_alloc = 3 137 integer (kind=omp_allocator_handle_kind), parameter :: omp_high_bw_mem_alloc = 4 138 integer (kind=omp_allocator_handle_kind), parameter :: omp_low_lat_mem_alloc = 5 139 integer (kind=omp_allocator_handle_kind), parameter :: omp_cgroup_mem_alloc = 6 140 integer (kind=omp_allocator_handle_kind), parameter :: omp_pteam_mem_alloc = 7 141 integer (kind=omp_allocator_handle_kind), parameter :: omp_thread_mem_alloc = 8 142 ! Preview of target memory support 143 integer (kind=omp_allocator_handle_kind), parameter :: llvm_omp_target_host_mem_alloc = 100 144 integer (kind=omp_allocator_handle_kind), parameter :: llvm_omp_target_shared_mem_alloc = 101 145 integer (kind=omp_allocator_handle_kind), parameter :: llvm_omp_target_device_mem_alloc = 102 146 147 integer (kind=omp_memspace_handle_kind), parameter :: omp_default_mem_space = 0 148 integer (kind=omp_memspace_handle_kind), parameter :: omp_large_cap_mem_space = 1 149 integer (kind=omp_memspace_handle_kind), parameter :: omp_const_mem_space = 2 150 integer (kind=omp_memspace_handle_kind), parameter :: omp_high_bw_mem_space = 3 151 integer (kind=omp_memspace_handle_kind), parameter :: omp_low_lat_mem_space = 4 152 ! Preview of target memory support 153 integer (kind=omp_memspace_handle_kind), parameter :: llvm_omp_target_host_mem_space = 100 154 integer (kind=omp_memspace_handle_kind), parameter :: llvm_omp_target_shared_mem_space = 101 155 integer (kind=omp_memspace_handle_kind), parameter :: llvm_omp_target_device_mem_space = 102 156 157 integer (kind=omp_pause_resource_kind), parameter :: omp_pause_resume = 0 158 integer (kind=omp_pause_resource_kind), parameter :: omp_pause_soft = 1 159 integer (kind=omp_pause_resource_kind), parameter :: omp_pause_hard = 2 160 161 integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_cuda = 1 162 integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_cuda_driver = 2 163 integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_opencl = 3 164 integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_sycl = 4 165 integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_hip = 5 166 integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_level_zero = 6 167 integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_last = 7 168 169 integer (kind=omp_interop_kind), parameter :: omp_interop_none = 0 170 171 interface 172 173! *** 174! *** omp_* entry points 175! *** 176 177 subroutine omp_set_num_threads(num_threads) bind(c) 178 use omp_lib_kinds 179 integer (kind=omp_integer_kind), value :: num_threads 180 end subroutine omp_set_num_threads 181 182 subroutine omp_set_dynamic(dynamic_threads) bind(c) 183 use omp_lib_kinds 184 logical (kind=omp_logical_kind), value :: dynamic_threads 185 end subroutine omp_set_dynamic 186 187 subroutine omp_set_nested(nested) bind(c) 188 use omp_lib_kinds 189 logical (kind=omp_logical_kind), value :: nested 190 end subroutine omp_set_nested 191 192 function omp_get_num_threads() bind(c) 193 use omp_lib_kinds 194 integer (kind=omp_integer_kind) omp_get_num_threads 195 end function omp_get_num_threads 196 197 function omp_get_max_threads() bind(c) 198 use omp_lib_kinds 199 integer (kind=omp_integer_kind) omp_get_max_threads 200 end function omp_get_max_threads 201 202 function omp_get_thread_num() bind(c) 203 use omp_lib_kinds 204 integer (kind=omp_integer_kind) omp_get_thread_num 205 end function omp_get_thread_num 206 207 function omp_get_num_procs() bind(c) 208 use omp_lib_kinds 209 integer (kind=omp_integer_kind) omp_get_num_procs 210 end function omp_get_num_procs 211 212 function omp_in_parallel() bind(c) 213 use omp_lib_kinds 214 logical (kind=omp_logical_kind) omp_in_parallel 215 end function omp_in_parallel 216 217 function omp_in_final() bind(c) 218 use omp_lib_kinds 219 logical (kind=omp_logical_kind) omp_in_final 220 end function omp_in_final 221 222 function omp_get_dynamic() bind(c) 223 use omp_lib_kinds 224 logical (kind=omp_logical_kind) omp_get_dynamic 225 end function omp_get_dynamic 226 227 function omp_get_nested() bind(c) 228 use omp_lib_kinds 229 logical (kind=omp_logical_kind) omp_get_nested 230 end function omp_get_nested 231 232 function omp_get_thread_limit() bind(c) 233 use omp_lib_kinds 234 integer (kind=omp_integer_kind) omp_get_thread_limit 235 end function omp_get_thread_limit 236 237 subroutine omp_set_max_active_levels(max_levels) bind(c) 238 use omp_lib_kinds 239 integer (kind=omp_integer_kind), value :: max_levels 240 end subroutine omp_set_max_active_levels 241 242 function omp_get_max_active_levels() bind(c) 243 use omp_lib_kinds 244 integer (kind=omp_integer_kind) omp_get_max_active_levels 245 end function omp_get_max_active_levels 246 247 function omp_get_level() bind(c) 248 use omp_lib_kinds 249 integer (kind=omp_integer_kind) omp_get_level 250 end function omp_get_level 251 252 function omp_get_active_level() bind(c) 253 use omp_lib_kinds 254 integer (kind=omp_integer_kind) omp_get_active_level 255 end function omp_get_active_level 256 257 function omp_get_ancestor_thread_num(level) bind(c) 258 use omp_lib_kinds 259 integer (kind=omp_integer_kind) omp_get_ancestor_thread_num 260 integer (kind=omp_integer_kind), value :: level 261 end function omp_get_ancestor_thread_num 262 263 function omp_get_team_size(level) bind(c) 264 use omp_lib_kinds 265 integer (kind=omp_integer_kind) omp_get_team_size 266 integer (kind=omp_integer_kind), value :: level 267 end function omp_get_team_size 268 269 subroutine omp_set_schedule(kind, chunk_size) bind(c) 270 use omp_lib_kinds 271 integer (kind=omp_sched_kind), value :: kind 272 integer (kind=omp_integer_kind), value :: chunk_size 273 end subroutine omp_set_schedule 274 275 subroutine omp_get_schedule(kind, chunk_size) bind(c) 276 use omp_lib_kinds 277 integer (kind=omp_sched_kind) kind 278 integer (kind=omp_integer_kind) chunk_size 279 end subroutine omp_get_schedule 280 281 function omp_get_proc_bind() bind(c) 282 use omp_lib_kinds 283 integer (kind=omp_proc_bind_kind) omp_get_proc_bind 284 end function omp_get_proc_bind 285 286 function omp_get_num_places() bind(c) 287 use omp_lib_kinds 288 integer (kind=omp_integer_kind) omp_get_num_places 289 end function omp_get_num_places 290 291 function omp_get_place_num_procs(place_num) bind(c) 292 use omp_lib_kinds 293 integer (kind=omp_integer_kind), value :: place_num 294 integer (kind=omp_integer_kind) omp_get_place_num_procs 295 end function omp_get_place_num_procs 296 297 subroutine omp_get_place_proc_ids(place_num, ids) bind(c) 298 use omp_lib_kinds 299 integer (kind=omp_integer_kind), value :: place_num 300 integer (kind=omp_integer_kind) ids(*) 301 end subroutine omp_get_place_proc_ids 302 303 function omp_get_place_num() bind(c) 304 use omp_lib_kinds 305 integer (kind=omp_integer_kind) omp_get_place_num 306 end function omp_get_place_num 307 308 function omp_get_partition_num_places() bind(c) 309 use omp_lib_kinds 310 integer (kind=omp_integer_kind) omp_get_partition_num_places 311 end function omp_get_partition_num_places 312 313 subroutine omp_get_partition_place_nums(place_nums) bind(c) 314 use omp_lib_kinds 315 integer (kind=omp_integer_kind) place_nums(*) 316 end subroutine omp_get_partition_place_nums 317 318 function omp_get_wtime() bind(c) 319 use omp_lib_kinds 320 real (kind=kmp_double_kind) omp_get_wtime 321 end function omp_get_wtime 322 323 function omp_get_wtick() bind(c) 324 use omp_lib_kinds 325 real (kind=kmp_double_kind) omp_get_wtick 326 end function omp_get_wtick 327 328 function omp_get_default_device() bind(c) 329 use omp_lib_kinds 330 integer (kind=omp_integer_kind) omp_get_default_device 331 end function omp_get_default_device 332 333 subroutine omp_set_default_device(device_num) bind(c) 334 use omp_lib_kinds 335 integer (kind=omp_integer_kind), value :: device_num 336 end subroutine omp_set_default_device 337 338 function omp_get_num_devices() bind(c) 339 use omp_lib_kinds 340 integer (kind=omp_integer_kind) omp_get_num_devices 341 end function omp_get_num_devices 342 343 function omp_get_num_teams() bind(c) 344 use omp_lib_kinds 345 integer (kind=omp_integer_kind) omp_get_num_teams 346 end function omp_get_num_teams 347 348 function omp_get_team_num() bind(c) 349 use omp_lib_kinds 350 integer (kind=omp_integer_kind) omp_get_team_num 351 end function omp_get_team_num 352 353 function omp_get_cancellation() bind(c) 354 use omp_lib_kinds 355 integer (kind=omp_integer_kind) omp_get_cancellation 356 end function omp_get_cancellation 357 358 function omp_is_initial_device() bind(c) 359 use omp_lib_kinds 360 logical (kind=omp_logical_kind) omp_is_initial_device 361 end function omp_is_initial_device 362 363 function omp_get_initial_device() bind(c) 364 use omp_lib_kinds 365 integer (kind=omp_integer_kind) omp_get_initial_device 366 end function omp_get_initial_device 367 368 function omp_get_device_num() bind(c) 369 use omp_lib_kinds 370 integer (kind=omp_integer_kind) omp_get_device_num 371 end function omp_get_device_num 372 373 function omp_pause_resource(kind, device_num) bind(c) 374 use omp_lib_kinds 375 integer (kind=omp_pause_resource_kind), value :: kind 376 integer (kind=omp_integer_kind), value :: device_num 377 integer (kind=omp_integer_kind) omp_pause_resource 378 end function omp_pause_resource 379 380 function omp_pause_resource_all(kind) bind(c) 381 use omp_lib_kinds 382 integer (kind=omp_pause_resource_kind), value :: kind 383 integer (kind=omp_integer_kind) omp_pause_resource_all 384 end function omp_pause_resource_all 385 386 function omp_get_supported_active_levels() bind(c) 387 use omp_lib_kinds 388 integer (kind=omp_integer_kind) omp_get_supported_active_levels 389 end function omp_get_supported_active_levels 390 391 subroutine omp_fulfill_event(event) bind(c) 392 use omp_lib_kinds 393 integer (kind=omp_event_handle_kind), value :: event 394 end subroutine omp_fulfill_event 395 396 subroutine omp_init_lock(svar) bind(c) 397!DIR$ IF(__INTEL_COMPILER.GE.1400) 398!DIR$ attributes known_intrinsic :: omp_init_lock 399!DIR$ ENDIF 400 use omp_lib_kinds 401 integer (kind=omp_lock_kind) svar 402 end subroutine omp_init_lock 403 404 subroutine omp_destroy_lock(svar) bind(c) 405!DIR$ IF(__INTEL_COMPILER.GE.1400) 406!DIR$ attributes known_intrinsic :: omp_destroy_lock 407!DIR$ ENDIF 408 use omp_lib_kinds 409 integer (kind=omp_lock_kind) svar 410 end subroutine omp_destroy_lock 411 412 subroutine omp_set_lock(svar) bind(c) 413!DIR$ IF(__INTEL_COMPILER.GE.1400) 414!DIR$ attributes known_intrinsic :: omp_set_lock 415!DIR$ ENDIF 416 use omp_lib_kinds 417 integer (kind=omp_lock_kind) svar 418 end subroutine omp_set_lock 419 420 subroutine omp_unset_lock(svar) bind(c) 421!DIR$ IF(__INTEL_COMPILER.GE.1400) 422!DIR$ attributes known_intrinsic :: omp_unset_lock 423!DIR$ ENDIF 424 use omp_lib_kinds 425 integer (kind=omp_lock_kind) svar 426 end subroutine omp_unset_lock 427 428 function omp_test_lock(svar) bind(c) 429!DIR$ IF(__INTEL_COMPILER.GE.1400) 430!DIR$ attributes known_intrinsic :: omp_test_lock 431!DIR$ ENDIF 432 use omp_lib_kinds 433 logical (kind=omp_logical_kind) omp_test_lock 434 integer (kind=omp_lock_kind) svar 435 end function omp_test_lock 436 437 subroutine omp_init_nest_lock(nvar) bind(c) 438!DIR$ IF(__INTEL_COMPILER.GE.1400) 439!DIR$ attributes known_intrinsic :: omp_init_nest_lock 440!DIR$ ENDIF 441 use omp_lib_kinds 442 integer (kind=omp_nest_lock_kind) nvar 443 end subroutine omp_init_nest_lock 444 445 subroutine omp_destroy_nest_lock(nvar) bind(c) 446!DIR$ IF(__INTEL_COMPILER.GE.1400) 447!DIR$ attributes known_intrinsic :: omp_destroy_nest_lock 448!DIR$ ENDIF 449 use omp_lib_kinds 450 integer (kind=omp_nest_lock_kind) nvar 451 end subroutine omp_destroy_nest_lock 452 453 subroutine omp_set_nest_lock(nvar) bind(c) 454!DIR$ IF(__INTEL_COMPILER.GE.1400) 455!DIR$ attributes known_intrinsic :: omp_set_nest_lock 456!DIR$ ENDIF 457 use omp_lib_kinds 458 integer (kind=omp_nest_lock_kind) nvar 459 end subroutine omp_set_nest_lock 460 461 subroutine omp_unset_nest_lock(nvar) bind(c) 462!DIR$ IF(__INTEL_COMPILER.GE.1400) 463!DIR$ attributes known_intrinsic :: omp_unset_nest_lock 464!DIR$ ENDIF 465 use omp_lib_kinds 466 integer (kind=omp_nest_lock_kind) nvar 467 end subroutine omp_unset_nest_lock 468 469 function omp_test_nest_lock(nvar) bind(c) 470!DIR$ IF(__INTEL_COMPILER.GE.1400) 471!DIR$ attributes known_intrinsic :: omp_test_nest_lock 472!DIR$ ENDIF 473 use omp_lib_kinds 474 integer (kind=omp_integer_kind) omp_test_nest_lock 475 integer (kind=omp_nest_lock_kind) nvar 476 end function omp_test_nest_lock 477 478 function omp_get_max_task_priority() bind(c) 479 use omp_lib_kinds 480 integer (kind=omp_integer_kind) omp_get_max_task_priority 481 end function omp_get_max_task_priority 482 483 subroutine omp_init_lock_with_hint(svar, hint) bind(c) 484 use omp_lib_kinds 485 integer (kind=omp_lock_kind) svar 486 integer (kind=omp_lock_hint_kind), value :: hint 487 end subroutine omp_init_lock_with_hint 488 489 subroutine omp_init_nest_lock_with_hint(nvar, hint) bind(c) 490 use omp_lib_kinds 491 integer (kind=omp_nest_lock_kind) nvar 492 integer (kind=omp_lock_hint_kind), value :: hint 493 end subroutine omp_init_nest_lock_with_hint 494 495 function omp_control_tool(command, modifier, arg) bind(c) 496 use omp_lib_kinds 497 integer (kind=omp_integer_kind) omp_control_tool 498 integer (kind=omp_control_tool_kind), value :: command 499 integer (kind=omp_control_tool_kind), value :: modifier 500 integer (kind=kmp_pointer_kind), optional :: arg 501 end function omp_control_tool 502 503 function omp_init_allocator(memspace, ntraits, traits) 504 use omp_lib_kinds 505 integer (kind=omp_allocator_handle_kind) omp_init_allocator 506 integer (kind=omp_memspace_handle_kind) :: memspace 507 integer (kind=omp_integer_kind) :: ntraits 508 type(omp_alloctrait), intent(in) :: traits(*) 509 end function omp_init_allocator 510 511 subroutine omp_destroy_allocator(allocator) bind(c) 512 use omp_lib_kinds 513 integer (kind=omp_allocator_handle_kind), value :: allocator 514 end subroutine omp_destroy_allocator 515 516 subroutine omp_set_default_allocator(allocator) bind(c) 517 use omp_lib_kinds 518 integer (kind=omp_allocator_handle_kind), value :: allocator 519 end subroutine omp_set_default_allocator 520 521 function omp_get_default_allocator() bind(c) 522 use omp_lib_kinds 523 integer (kind=omp_allocator_handle_kind) omp_get_default_allocator 524 end function omp_get_default_allocator 525 526 subroutine omp_set_affinity_format(format) 527 character (len=*) :: format 528 end subroutine omp_set_affinity_format 529 530 function omp_get_affinity_format(buffer) 531 use omp_lib_kinds 532 character (len=*) :: buffer 533 integer (kind=kmp_size_t_kind) :: omp_get_affinity_format 534 end function omp_get_affinity_format 535 536 subroutine omp_display_affinity(format) 537 character (len=*) :: format 538 end subroutine omp_display_affinity 539 540 function omp_capture_affinity(buffer, format) 541 use omp_lib_kinds 542 character (len=*) :: format 543 character (len=*) :: buffer 544 integer (kind=kmp_size_t_kind) :: omp_capture_affinity 545 end function omp_capture_affinity 546 547 subroutine omp_set_num_teams(num_teams) bind(c) 548 use omp_lib_kinds 549 integer (kind=omp_integer_kind), value :: num_teams 550 end subroutine omp_set_num_teams 551 552 function omp_get_max_teams() bind(c) 553 use omp_lib_kinds 554 integer (kind=omp_integer_kind) omp_get_max_teams 555 end function omp_get_max_teams 556 557 subroutine omp_set_teams_thread_limit(thread_limit) bind(c) 558 use omp_lib_kinds 559 integer (kind=omp_integer_kind), value :: thread_limit 560 end subroutine omp_set_teams_thread_limit 561 562 function omp_get_teams_thread_limit() bind(c) 563 use omp_lib_kinds 564 integer (kind=omp_integer_kind) omp_get_teams_thread_limit 565 end function omp_get_teams_thread_limit 566 567 subroutine omp_display_env(verbose) bind(c) 568 use omp_lib_kinds 569 logical (kind=omp_logical_kind), value :: verbose 570 end subroutine omp_display_env 571 572 function omp_target_alloc(size, device_num) bind(c) 573 use omp_lib_kinds 574 type(c_ptr) omp_target_alloc 575 integer(c_size_t), value :: size 576 integer(c_int), value :: device_num 577 end function omp_target_alloc 578 579 subroutine omp_target_free(device_ptr, device_num) bind(c) 580 use omp_lib_kinds 581 type(c_ptr), value :: device_ptr 582 integer(c_int), value :: device_num 583 end subroutine omp_target_free 584 585 function omp_target_is_present(ptr, device_num) bind(c) 586 use omp_lib_kinds 587 integer(c_int) omp_target_is_present 588 type(c_ptr), value :: ptr 589 integer(c_int), value :: device_num 590 end function omp_target_is_present 591 592 function omp_target_memcpy(dst, src, length, dst_offset, src_offset, & 593 dst_device_num, src_device_num) bind(c) 594 use omp_lib_kinds 595 integer(c_int) omp_target_memcpy 596 type(c_ptr), value :: dst, src 597 integer(c_size_t), value :: length, dst_offset, src_offset 598 integer(c_int), value :: dst_device_num, src_device_num 599 end function omp_target_memcpy 600 601 function omp_target_memcpy_rect(dst, src, element_size, num_dims, & 602 volume, dst_offsets, src_offsets, dst_dimensions, & 603 src_dimensions, dst_device_num, src_device_num) bind(c) 604 use omp_lib_kinds 605 integer(c_int) omp_target_memcpy_rect 606 type(c_ptr), value :: dst, src 607 integer(c_size_t), value :: element_size 608 integer(c_int), value :: num_dims, dst_device_num, src_device_num 609 integer(c_size_t), intent(in) :: volume(*), dst_offsets(*), & 610 src_offsets(*), dst_dimensions(*), src_dimensions(*) 611 end function omp_target_memcpy_rect 612 613 function omp_target_memcpy_async(dst, src, length, dst_offset, & 614 src_offset, dst_device_num, src_device_num, depobj_count, & 615 depobj_list) bind(c) 616 use omp_lib_kinds 617 integer(c_int) omp_target_memcpy_async 618 type(c_ptr), value :: dst, src 619 integer(c_size_t), value :: length, dst_offset, src_offset 620 integer(c_int), value :: dst_device_num, src_device_num, & 621 depobj_count 622 integer(omp_depend_kind), optional :: depobj_list(*) 623 end function omp_target_memcpy_async 624 625 function omp_target_memcpy_rect_async(dst, src, element_size, & 626 num_dims, volume, dst_offsets, src_offsets, dst_dimensions, & 627 src_dimensions, dst_device_num, src_device_num, depobj_count, & 628 depobj_list) bind(c) 629 use omp_lib_kinds 630 integer(c_int) omp_target_memcpy_rect_async 631 type(c_ptr), value :: dst, src 632 integer(c_size_t), value :: element_size 633 integer(c_int), value :: num_dims, dst_device_num, src_device_num, & 634 depobj_count 635 integer(c_size_t), intent(in) :: volume(*), dst_offsets(*), & 636 src_offsets(*), dst_dimensions(*), src_dimensions(*) 637 integer (omp_depend_kind), optional :: depobj_list(*) 638 end function omp_target_memcpy_rect_async 639 640 function omp_target_associate_ptr(host_ptr, device_ptr, size, & 641 device_offset, device_num) bind(c) 642 use omp_lib_kinds 643 integer(c_int) omp_target_associate_ptr 644 type(c_ptr), value :: host_ptr, device_ptr 645 integer(c_size_t), value :: size, device_offset 646 integer(c_int), value :: device_num 647 end function omp_target_associate_ptr 648 649 function omp_get_mapped_ptr(ptr, device_num) bind(c) 650 use omp_lib_kinds 651 type(c_ptr) omp_get_mapped_ptr 652 type(c_ptr), value :: ptr 653 integer(c_int), value :: device_num 654 end function omp_get_mapped_ptr 655 656 function omp_target_disassociate_ptr(ptr, device_num) bind(c) 657 use omp_lib_kinds 658 integer(c_int) omp_target_disassociate_ptr 659 type(c_ptr), value :: ptr 660 integer(c_int), value :: device_num 661 end function omp_target_disassociate_ptr 662 663 function omp_target_is_accessible(ptr, size, device_num) bind(c) 664 use omp_lib_kinds 665 use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t, c_int 666 integer(c_int) omp_target_is_accessible 667 type(c_ptr), value :: ptr 668 integer(c_size_t), value :: size 669 integer(c_int), value :: device_num 670 end function omp_target_is_accessible 671 672 function omp_alloc(size, allocator) bind(c) 673 use omp_lib_kinds 674 use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t 675 type(c_ptr) omp_alloc 676 integer(c_size_t), value :: size 677 integer(omp_allocator_handle_kind), value :: allocator 678 end function omp_alloc 679 680 function omp_aligned_alloc(alignment, size, allocator) bind(c) 681 use omp_lib_kinds 682 use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t 683 type(c_ptr) omp_aligned_alloc 684 integer(c_size_t), value :: alignment, size 685 integer(omp_allocator_handle_kind), value :: allocator 686 end function omp_aligned_alloc 687 688 function omp_calloc(nmemb, size, allocator) bind(c) 689 use omp_lib_kinds 690 use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t 691 type(c_ptr) omp_calloc 692 integer(c_size_t), value :: nmemb, size 693 integer(omp_allocator_handle_kind), value :: allocator 694 end function omp_calloc 695 696 function omp_aligned_calloc(alignment, nmemb, size, allocator) bind(c) 697 use omp_lib_kinds 698 use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t 699 type(c_ptr) omp_aligned_calloc 700 integer(c_size_t), value :: alignment, nmemb, size 701 integer(omp_allocator_handle_kind), value :: allocator 702 end function omp_aligned_calloc 703 704 function omp_realloc(ptr, size, allocator, free_allocator) bind(c) 705 use omp_lib_kinds 706 use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t 707 type(c_ptr) omp_realloc 708 type(c_ptr), value :: ptr 709 integer(c_size_t), value :: size 710 integer(omp_allocator_handle_kind), value :: allocator 711 integer(omp_allocator_handle_kind), value :: free_allocator 712 end function omp_realloc 713 714 subroutine omp_free(ptr, allocator) bind(c) 715 use omp_lib_kinds 716 use, intrinsic :: iso_c_binding, only : c_ptr 717 type(c_ptr), value :: ptr 718 integer(omp_allocator_handle_kind), value :: allocator 719 end subroutine omp_free 720 721 function omp_in_explicit_task() bind(c) 722 use omp_lib_kinds 723 logical (kind=omp_logical_kind) omp_in_explicit_task 724 end function omp_in_explicit_task 725 726! *** 727! *** kmp_* entry points 728! *** 729 730 subroutine kmp_set_stacksize(size) bind(c) 731 use omp_lib_kinds 732 integer (kind=omp_integer_kind), value :: size 733 end subroutine kmp_set_stacksize 734 735 subroutine kmp_set_stacksize_s(size) bind(c) 736 use omp_lib_kinds 737 integer (kind=kmp_size_t_kind), value :: size 738 end subroutine kmp_set_stacksize_s 739 740 subroutine kmp_set_blocktime(msec) bind(c) 741 use omp_lib_kinds 742 integer (kind=omp_integer_kind), value :: msec 743 end subroutine kmp_set_blocktime 744 745 subroutine kmp_set_library_serial() bind(c) 746 end subroutine kmp_set_library_serial 747 748 subroutine kmp_set_library_turnaround() bind(c) 749 end subroutine kmp_set_library_turnaround 750 751 subroutine kmp_set_library_throughput() bind(c) 752 end subroutine kmp_set_library_throughput 753 754 subroutine kmp_set_library(libnum) bind(c) 755 use omp_lib_kinds 756 integer (kind=omp_integer_kind), value :: libnum 757 end subroutine kmp_set_library 758 759 subroutine kmp_set_defaults(string) bind(c) 760 use, intrinsic :: iso_c_binding 761 character (kind=c_char) :: string(*) 762 end subroutine kmp_set_defaults 763 764 function kmp_get_stacksize() bind(c) 765 use omp_lib_kinds 766 integer (kind=omp_integer_kind) kmp_get_stacksize 767 end function kmp_get_stacksize 768 769 function kmp_get_stacksize_s() bind(c) 770 use omp_lib_kinds 771 integer (kind=kmp_size_t_kind) kmp_get_stacksize_s 772 end function kmp_get_stacksize_s 773 774 function kmp_get_blocktime() bind(c) 775 use omp_lib_kinds 776 integer (kind=omp_integer_kind) kmp_get_blocktime 777 end function kmp_get_blocktime 778 779 function kmp_get_library() bind(c) 780 use omp_lib_kinds 781 integer (kind=omp_integer_kind) kmp_get_library 782 end function kmp_get_library 783 784 subroutine kmp_set_disp_num_buffers(num) bind(c) 785 use omp_lib_kinds 786 integer (kind=omp_integer_kind), value :: num 787 end subroutine kmp_set_disp_num_buffers 788 789 function kmp_set_affinity(mask) bind(c) 790 use omp_lib_kinds 791 integer (kind=omp_integer_kind) kmp_set_affinity 792 integer (kind=kmp_affinity_mask_kind) mask 793 end function kmp_set_affinity 794 795 function kmp_get_affinity(mask) bind(c) 796 use omp_lib_kinds 797 integer (kind=omp_integer_kind) kmp_get_affinity 798 integer (kind=kmp_affinity_mask_kind) mask 799 end function kmp_get_affinity 800 801 function kmp_get_affinity_max_proc() bind(c) 802 use omp_lib_kinds 803 integer (kind=omp_integer_kind) kmp_get_affinity_max_proc 804 end function kmp_get_affinity_max_proc 805 806 subroutine kmp_create_affinity_mask(mask) bind(c) 807 use omp_lib_kinds 808 integer (kind=kmp_affinity_mask_kind) mask 809 end subroutine kmp_create_affinity_mask 810 811 subroutine kmp_destroy_affinity_mask(mask) bind(c) 812 use omp_lib_kinds 813 integer (kind=kmp_affinity_mask_kind) mask 814 end subroutine kmp_destroy_affinity_mask 815 816 function kmp_set_affinity_mask_proc(proc, mask) bind(c) 817 use omp_lib_kinds 818 integer (kind=omp_integer_kind) kmp_set_affinity_mask_proc 819 integer (kind=omp_integer_kind), value :: proc 820 integer (kind=kmp_affinity_mask_kind) mask 821 end function kmp_set_affinity_mask_proc 822 823 function kmp_unset_affinity_mask_proc(proc, mask) bind(c) 824 use omp_lib_kinds 825 integer (kind=omp_integer_kind) kmp_unset_affinity_mask_proc 826 integer (kind=omp_integer_kind), value :: proc 827 integer (kind=kmp_affinity_mask_kind) mask 828 end function kmp_unset_affinity_mask_proc 829 830 function kmp_get_affinity_mask_proc(proc, mask) bind(c) 831 use omp_lib_kinds 832 integer (kind=omp_integer_kind) kmp_get_affinity_mask_proc 833 integer (kind=omp_integer_kind), value :: proc 834 integer (kind=kmp_affinity_mask_kind) mask 835 end function kmp_get_affinity_mask_proc 836 837 function kmp_malloc(size) bind(c) 838 use omp_lib_kinds 839 integer (kind=kmp_pointer_kind) kmp_malloc 840 integer (kind=kmp_size_t_kind), value :: size 841 end function kmp_malloc 842 843 function kmp_aligned_malloc(size, alignment) bind(c) 844 use omp_lib_kinds 845 integer (kind=kmp_pointer_kind) kmp_aligned_malloc 846 integer (kind=kmp_size_t_kind), value :: size 847 integer (kind=kmp_size_t_kind), value :: alignment 848 end function kmp_aligned_malloc 849 850 function kmp_calloc(nelem, elsize) bind(c) 851 use omp_lib_kinds 852 integer (kind=kmp_pointer_kind) kmp_calloc 853 integer (kind=kmp_size_t_kind), value :: nelem 854 integer (kind=kmp_size_t_kind), value :: elsize 855 end function kmp_calloc 856 857 function kmp_realloc(ptr, size) bind(c) 858 use omp_lib_kinds 859 integer (kind=kmp_pointer_kind) kmp_realloc 860 integer (kind=kmp_pointer_kind), value :: ptr 861 integer (kind=kmp_size_t_kind), value :: size 862 end function kmp_realloc 863 864 subroutine kmp_free(ptr) bind(c) 865 use omp_lib_kinds 866 integer (kind=kmp_pointer_kind), value :: ptr 867 end subroutine kmp_free 868 869 subroutine kmp_set_warnings_on() bind(c) 870 end subroutine kmp_set_warnings_on 871 872 subroutine kmp_set_warnings_off() bind(c) 873 end subroutine kmp_set_warnings_off 874 875 function kmp_get_cancellation_status(cancelkind) bind(c) 876 use omp_lib_kinds 877 integer (kind=kmp_cancel_kind), value :: cancelkind 878 logical (kind=omp_logical_kind) kmp_get_cancellation_status 879 end function kmp_get_cancellation_status 880 881 end interface 882 883 end module omp_lib 884