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 integer (kind=omp_allocator_handle_kind), parameter :: llvm_omp_target_host_mem_alloc = 100 143 integer (kind=omp_allocator_handle_kind), parameter :: llvm_omp_target_shared_mem_alloc = 101 144 integer (kind=omp_allocator_handle_kind), parameter :: llvm_omp_target_device_mem_alloc = 102 145 146 integer (kind=omp_memspace_handle_kind), parameter :: omp_default_mem_space = 0 147 integer (kind=omp_memspace_handle_kind), parameter :: omp_large_cap_mem_space = 1 148 integer (kind=omp_memspace_handle_kind), parameter :: omp_const_mem_space = 2 149 integer (kind=omp_memspace_handle_kind), parameter :: omp_high_bw_mem_space = 3 150 integer (kind=omp_memspace_handle_kind), parameter :: omp_low_lat_mem_space = 4 151 integer (kind=omp_memspace_handle_kind), parameter :: llvm_omp_target_host_mem_space = 100 152 integer (kind=omp_memspace_handle_kind), parameter :: llvm_omp_target_shared_mem_space = 101 153 integer (kind=omp_memspace_handle_kind), parameter :: llvm_omp_target_device_mem_space = 102 154 155 integer (kind=omp_pause_resource_kind), parameter :: omp_pause_resume = 0 156 integer (kind=omp_pause_resource_kind), parameter :: omp_pause_soft = 1 157 integer (kind=omp_pause_resource_kind), parameter :: omp_pause_hard = 2 158 159 integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_cuda = 1 160 integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_cuda_driver = 2 161 integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_opencl = 3 162 integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_sycl = 4 163 integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_hip = 5 164 integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_level_zero = 6 165 integer (kind=omp_interop_fr_kind), parameter :: omp_ifr_last = 7 166 167 integer (kind=omp_interop_kind), parameter :: omp_interop_none = 0 168 169 interface 170 171! *** 172! *** omp_* entry points 173! *** 174 175 subroutine omp_set_num_threads(num_threads) bind(c) 176 use omp_lib_kinds 177 integer (kind=omp_integer_kind), value :: num_threads 178 end subroutine omp_set_num_threads 179 180 subroutine omp_set_dynamic(dynamic_threads) bind(c) 181 use omp_lib_kinds 182 logical (kind=omp_logical_kind), value :: dynamic_threads 183 end subroutine omp_set_dynamic 184 185 subroutine omp_set_nested(nested) bind(c) 186 use omp_lib_kinds 187 logical (kind=omp_logical_kind), value :: nested 188 end subroutine omp_set_nested 189 190 function omp_get_num_threads() bind(c) 191 use omp_lib_kinds 192 integer (kind=omp_integer_kind) omp_get_num_threads 193 end function omp_get_num_threads 194 195 function omp_get_max_threads() bind(c) 196 use omp_lib_kinds 197 integer (kind=omp_integer_kind) omp_get_max_threads 198 end function omp_get_max_threads 199 200 function omp_get_thread_num() bind(c) 201 use omp_lib_kinds 202 integer (kind=omp_integer_kind) omp_get_thread_num 203 end function omp_get_thread_num 204 205 function omp_get_num_procs() bind(c) 206 use omp_lib_kinds 207 integer (kind=omp_integer_kind) omp_get_num_procs 208 end function omp_get_num_procs 209 210 function omp_in_parallel() bind(c) 211 use omp_lib_kinds 212 logical (kind=omp_logical_kind) omp_in_parallel 213 end function omp_in_parallel 214 215 function omp_in_final() bind(c) 216 use omp_lib_kinds 217 logical (kind=omp_logical_kind) omp_in_final 218 end function omp_in_final 219 220 function omp_get_dynamic() bind(c) 221 use omp_lib_kinds 222 logical (kind=omp_logical_kind) omp_get_dynamic 223 end function omp_get_dynamic 224 225 function omp_get_nested() bind(c) 226 use omp_lib_kinds 227 logical (kind=omp_logical_kind) omp_get_nested 228 end function omp_get_nested 229 230 function omp_get_thread_limit() bind(c) 231 use omp_lib_kinds 232 integer (kind=omp_integer_kind) omp_get_thread_limit 233 end function omp_get_thread_limit 234 235 subroutine omp_set_max_active_levels(max_levels) bind(c) 236 use omp_lib_kinds 237 integer (kind=omp_integer_kind), value :: max_levels 238 end subroutine omp_set_max_active_levels 239 240 function omp_get_max_active_levels() bind(c) 241 use omp_lib_kinds 242 integer (kind=omp_integer_kind) omp_get_max_active_levels 243 end function omp_get_max_active_levels 244 245 function omp_get_level() bind(c) 246 use omp_lib_kinds 247 integer (kind=omp_integer_kind) omp_get_level 248 end function omp_get_level 249 250 function omp_get_active_level() bind(c) 251 use omp_lib_kinds 252 integer (kind=omp_integer_kind) omp_get_active_level 253 end function omp_get_active_level 254 255 function omp_get_ancestor_thread_num(level) bind(c) 256 use omp_lib_kinds 257 integer (kind=omp_integer_kind) omp_get_ancestor_thread_num 258 integer (kind=omp_integer_kind), value :: level 259 end function omp_get_ancestor_thread_num 260 261 function omp_get_team_size(level) bind(c) 262 use omp_lib_kinds 263 integer (kind=omp_integer_kind) omp_get_team_size 264 integer (kind=omp_integer_kind), value :: level 265 end function omp_get_team_size 266 267 subroutine omp_set_schedule(kind, chunk_size) bind(c) 268 use omp_lib_kinds 269 integer (kind=omp_sched_kind), value :: kind 270 integer (kind=omp_integer_kind), value :: chunk_size 271 end subroutine omp_set_schedule 272 273 subroutine omp_get_schedule(kind, chunk_size) bind(c) 274 use omp_lib_kinds 275 integer (kind=omp_sched_kind) kind 276 integer (kind=omp_integer_kind) chunk_size 277 end subroutine omp_get_schedule 278 279 function omp_get_proc_bind() bind(c) 280 use omp_lib_kinds 281 integer (kind=omp_proc_bind_kind) omp_get_proc_bind 282 end function omp_get_proc_bind 283 284 function omp_get_num_places() bind(c) 285 use omp_lib_kinds 286 integer (kind=omp_integer_kind) omp_get_num_places 287 end function omp_get_num_places 288 289 function omp_get_place_num_procs(place_num) bind(c) 290 use omp_lib_kinds 291 integer (kind=omp_integer_kind), value :: place_num 292 integer (kind=omp_integer_kind) omp_get_place_num_procs 293 end function omp_get_place_num_procs 294 295 subroutine omp_get_place_proc_ids(place_num, ids) bind(c) 296 use omp_lib_kinds 297 integer (kind=omp_integer_kind), value :: place_num 298 integer (kind=omp_integer_kind) ids(*) 299 end subroutine omp_get_place_proc_ids 300 301 function omp_get_place_num() bind(c) 302 use omp_lib_kinds 303 integer (kind=omp_integer_kind) omp_get_place_num 304 end function omp_get_place_num 305 306 function omp_get_partition_num_places() bind(c) 307 use omp_lib_kinds 308 integer (kind=omp_integer_kind) omp_get_partition_num_places 309 end function omp_get_partition_num_places 310 311 subroutine omp_get_partition_place_nums(place_nums) bind(c) 312 use omp_lib_kinds 313 integer (kind=omp_integer_kind) place_nums(*) 314 end subroutine omp_get_partition_place_nums 315 316 function omp_get_wtime() bind(c) 317 use omp_lib_kinds 318 real (kind=kmp_double_kind) omp_get_wtime 319 end function omp_get_wtime 320 321 function omp_get_wtick() bind(c) 322 use omp_lib_kinds 323 real (kind=kmp_double_kind) omp_get_wtick 324 end function omp_get_wtick 325 326 function omp_get_default_device() bind(c) 327 use omp_lib_kinds 328 integer (kind=omp_integer_kind) omp_get_default_device 329 end function omp_get_default_device 330 331 subroutine omp_set_default_device(device_num) bind(c) 332 use omp_lib_kinds 333 integer (kind=omp_integer_kind), value :: device_num 334 end subroutine omp_set_default_device 335 336 function omp_get_num_devices() bind(c) 337 use omp_lib_kinds 338 integer (kind=omp_integer_kind) omp_get_num_devices 339 end function omp_get_num_devices 340 341 function omp_get_num_teams() bind(c) 342 use omp_lib_kinds 343 integer (kind=omp_integer_kind) omp_get_num_teams 344 end function omp_get_num_teams 345 346 function omp_get_team_num() bind(c) 347 use omp_lib_kinds 348 integer (kind=omp_integer_kind) omp_get_team_num 349 end function omp_get_team_num 350 351 function omp_get_cancellation() bind(c) 352 use omp_lib_kinds 353 integer (kind=omp_integer_kind) omp_get_cancellation 354 end function omp_get_cancellation 355 356 function omp_is_initial_device() bind(c) 357 use omp_lib_kinds 358 logical (kind=omp_logical_kind) omp_is_initial_device 359 end function omp_is_initial_device 360 361 function omp_get_initial_device() bind(c) 362 use omp_lib_kinds 363 integer (kind=omp_integer_kind) omp_get_initial_device 364 end function omp_get_initial_device 365 366 function omp_get_device_num() bind(c) 367 use omp_lib_kinds 368 integer (kind=omp_integer_kind) omp_get_device_num 369 end function omp_get_device_num 370 371 function omp_pause_resource(kind, device_num) bind(c) 372 use omp_lib_kinds 373 integer (kind=omp_pause_resource_kind), value :: kind 374 integer (kind=omp_integer_kind), value :: device_num 375 integer (kind=omp_integer_kind) omp_pause_resource 376 end function omp_pause_resource 377 378 function omp_pause_resource_all(kind) bind(c) 379 use omp_lib_kinds 380 integer (kind=omp_pause_resource_kind), value :: kind 381 integer (kind=omp_integer_kind) omp_pause_resource_all 382 end function omp_pause_resource_all 383 384 function omp_get_supported_active_levels() bind(c) 385 use omp_lib_kinds 386 integer (kind=omp_integer_kind) omp_get_supported_active_levels 387 end function omp_get_supported_active_levels 388 389 subroutine omp_fulfill_event(event) bind(c) 390 use omp_lib_kinds 391 integer (kind=omp_event_handle_kind), value :: event 392 end subroutine omp_fulfill_event 393 394 subroutine omp_init_lock(svar) bind(c) 395!DIR$ IF(__INTEL_COMPILER.GE.1400) 396!DIR$ attributes known_intrinsic :: omp_init_lock 397!DIR$ ENDIF 398 use omp_lib_kinds 399 integer (kind=omp_lock_kind) svar 400 end subroutine omp_init_lock 401 402 subroutine omp_destroy_lock(svar) bind(c) 403!DIR$ IF(__INTEL_COMPILER.GE.1400) 404!DIR$ attributes known_intrinsic :: omp_destroy_lock 405!DIR$ ENDIF 406 use omp_lib_kinds 407 integer (kind=omp_lock_kind) svar 408 end subroutine omp_destroy_lock 409 410 subroutine omp_set_lock(svar) bind(c) 411!DIR$ IF(__INTEL_COMPILER.GE.1400) 412!DIR$ attributes known_intrinsic :: omp_set_lock 413!DIR$ ENDIF 414 use omp_lib_kinds 415 integer (kind=omp_lock_kind) svar 416 end subroutine omp_set_lock 417 418 subroutine omp_unset_lock(svar) bind(c) 419!DIR$ IF(__INTEL_COMPILER.GE.1400) 420!DIR$ attributes known_intrinsic :: omp_unset_lock 421!DIR$ ENDIF 422 use omp_lib_kinds 423 integer (kind=omp_lock_kind) svar 424 end subroutine omp_unset_lock 425 426 function omp_test_lock(svar) bind(c) 427!DIR$ IF(__INTEL_COMPILER.GE.1400) 428!DIR$ attributes known_intrinsic :: omp_test_lock 429!DIR$ ENDIF 430 use omp_lib_kinds 431 logical (kind=omp_logical_kind) omp_test_lock 432 integer (kind=omp_lock_kind) svar 433 end function omp_test_lock 434 435 subroutine omp_init_nest_lock(nvar) bind(c) 436!DIR$ IF(__INTEL_COMPILER.GE.1400) 437!DIR$ attributes known_intrinsic :: omp_init_nest_lock 438!DIR$ ENDIF 439 use omp_lib_kinds 440 integer (kind=omp_nest_lock_kind) nvar 441 end subroutine omp_init_nest_lock 442 443 subroutine omp_destroy_nest_lock(nvar) bind(c) 444!DIR$ IF(__INTEL_COMPILER.GE.1400) 445!DIR$ attributes known_intrinsic :: omp_destroy_nest_lock 446!DIR$ ENDIF 447 use omp_lib_kinds 448 integer (kind=omp_nest_lock_kind) nvar 449 end subroutine omp_destroy_nest_lock 450 451 subroutine omp_set_nest_lock(nvar) bind(c) 452!DIR$ IF(__INTEL_COMPILER.GE.1400) 453!DIR$ attributes known_intrinsic :: omp_set_nest_lock 454!DIR$ ENDIF 455 use omp_lib_kinds 456 integer (kind=omp_nest_lock_kind) nvar 457 end subroutine omp_set_nest_lock 458 459 subroutine omp_unset_nest_lock(nvar) bind(c) 460!DIR$ IF(__INTEL_COMPILER.GE.1400) 461!DIR$ attributes known_intrinsic :: omp_unset_nest_lock 462!DIR$ ENDIF 463 use omp_lib_kinds 464 integer (kind=omp_nest_lock_kind) nvar 465 end subroutine omp_unset_nest_lock 466 467 function omp_test_nest_lock(nvar) bind(c) 468!DIR$ IF(__INTEL_COMPILER.GE.1400) 469!DIR$ attributes known_intrinsic :: omp_test_nest_lock 470!DIR$ ENDIF 471 use omp_lib_kinds 472 integer (kind=omp_integer_kind) omp_test_nest_lock 473 integer (kind=omp_nest_lock_kind) nvar 474 end function omp_test_nest_lock 475 476 function omp_get_max_task_priority() bind(c) 477 use omp_lib_kinds 478 integer (kind=omp_integer_kind) omp_get_max_task_priority 479 end function omp_get_max_task_priority 480 481 subroutine omp_init_lock_with_hint(svar, hint) bind(c) 482 use omp_lib_kinds 483 integer (kind=omp_lock_kind) svar 484 integer (kind=omp_lock_hint_kind), value :: hint 485 end subroutine omp_init_lock_with_hint 486 487 subroutine omp_init_nest_lock_with_hint(nvar, hint) bind(c) 488 use omp_lib_kinds 489 integer (kind=omp_nest_lock_kind) nvar 490 integer (kind=omp_lock_hint_kind), value :: hint 491 end subroutine omp_init_nest_lock_with_hint 492 493 function omp_control_tool(command, modifier, arg) bind(c) 494 use omp_lib_kinds 495 integer (kind=omp_integer_kind) omp_control_tool 496 integer (kind=omp_control_tool_kind), value :: command 497 integer (kind=omp_control_tool_kind), value :: modifier 498 integer (kind=kmp_pointer_kind), optional :: arg 499 end function omp_control_tool 500 501 function omp_init_allocator(memspace, ntraits, traits) 502 use omp_lib_kinds 503 integer (kind=omp_allocator_handle_kind) omp_init_allocator 504 integer (kind=omp_memspace_handle_kind) :: memspace 505 integer (kind=omp_integer_kind) :: ntraits 506 type(omp_alloctrait), intent(in) :: traits(*) 507 end function omp_init_allocator 508 509 subroutine omp_destroy_allocator(allocator) bind(c) 510 use omp_lib_kinds 511 integer (kind=omp_allocator_handle_kind), value :: allocator 512 end subroutine omp_destroy_allocator 513 514 subroutine omp_set_default_allocator(allocator) bind(c) 515 use omp_lib_kinds 516 integer (kind=omp_allocator_handle_kind), value :: allocator 517 end subroutine omp_set_default_allocator 518 519 function omp_get_default_allocator() bind(c) 520 use omp_lib_kinds 521 integer (kind=omp_allocator_handle_kind) omp_get_default_allocator 522 end function omp_get_default_allocator 523 524 subroutine omp_set_affinity_format(format) 525 character (len=*) :: format 526 end subroutine omp_set_affinity_format 527 528 function omp_get_affinity_format(buffer) 529 use omp_lib_kinds 530 character (len=*) :: buffer 531 integer (kind=kmp_size_t_kind) :: omp_get_affinity_format 532 end function omp_get_affinity_format 533 534 subroutine omp_display_affinity(format) 535 character (len=*) :: format 536 end subroutine omp_display_affinity 537 538 function omp_capture_affinity(buffer, format) 539 use omp_lib_kinds 540 character (len=*) :: format 541 character (len=*) :: buffer 542 integer (kind=kmp_size_t_kind) :: omp_capture_affinity 543 end function omp_capture_affinity 544 545 subroutine omp_set_num_teams(num_teams) bind(c) 546 use omp_lib_kinds 547 integer (kind=omp_integer_kind), value :: num_teams 548 end subroutine omp_set_num_teams 549 550 function omp_get_max_teams() bind(c) 551 use omp_lib_kinds 552 integer (kind=omp_integer_kind) omp_get_max_teams 553 end function omp_get_max_teams 554 555 subroutine omp_set_teams_thread_limit(thread_limit) bind(c) 556 use omp_lib_kinds 557 integer (kind=omp_integer_kind), value :: thread_limit 558 end subroutine omp_set_teams_thread_limit 559 560 function omp_get_teams_thread_limit() bind(c) 561 use omp_lib_kinds 562 integer (kind=omp_integer_kind) omp_get_teams_thread_limit 563 end function omp_get_teams_thread_limit 564 565 subroutine omp_display_env(verbose) bind(c) 566 use omp_lib_kinds 567 logical (kind=omp_logical_kind), value :: verbose 568 end subroutine omp_display_env 569 570 function omp_target_alloc(size, device_num) bind(c) 571 use omp_lib_kinds 572 type(c_ptr) omp_target_alloc 573 integer(c_size_t), value :: size 574 integer(c_int), value :: device_num 575 end function omp_target_alloc 576 577 subroutine omp_target_free(device_ptr, device_num) bind(c) 578 use omp_lib_kinds 579 type(c_ptr), value :: device_ptr 580 integer(c_int), value :: device_num 581 end subroutine omp_target_free 582 583 function omp_target_is_present(ptr, device_num) bind(c) 584 use omp_lib_kinds 585 integer(c_int) omp_target_is_present 586 type(c_ptr), value :: ptr 587 integer(c_int), value :: device_num 588 end function omp_target_is_present 589 590 function omp_target_memcpy(dst, src, length, dst_offset, src_offset, & 591 dst_device_num, src_device_num) bind(c) 592 use omp_lib_kinds 593 integer(c_int) omp_target_memcpy 594 type(c_ptr), value :: dst, src 595 integer(c_size_t), value :: length, dst_offset, src_offset 596 integer(c_int), value :: dst_device_num, src_device_num 597 end function omp_target_memcpy 598 599 function omp_target_memcpy_rect(dst, src, element_size, num_dims, & 600 volume, dst_offsets, src_offsets, dst_dimensions, & 601 src_dimensions, dst_device_num, src_device_num) bind(c) 602 use omp_lib_kinds 603 integer(c_int) omp_target_memcpy_rect 604 type(c_ptr), value :: dst, src 605 integer(c_size_t), value :: element_size 606 integer(c_int), value :: num_dims, dst_device_num, src_device_num 607 integer(c_size_t), intent(in) :: volume(*), dst_offsets(*), & 608 src_offsets(*), dst_dimensions(*), src_dimensions(*) 609 end function omp_target_memcpy_rect 610 611 function omp_target_memcpy_async(dst, src, length, dst_offset, & 612 src_offset, dst_device_num, src_device_num, depobj_count, & 613 depobj_list) bind(c) 614 use omp_lib_kinds 615 integer(c_int) omp_target_memcpy_async 616 type(c_ptr), value :: dst, src 617 integer(c_size_t), value :: length, dst_offset, src_offset 618 integer(c_int), value :: dst_device_num, src_device_num, & 619 depobj_count 620 integer(omp_depend_kind), optional :: depobj_list(*) 621 end function omp_target_memcpy_async 622 623 function omp_target_memcpy_rect_async(dst, src, element_size, & 624 num_dims, volume, dst_offsets, src_offsets, dst_dimensions, & 625 src_dimensions, dst_device_num, src_device_num, depobj_count, & 626 depobj_list) bind(c) 627 use omp_lib_kinds 628 integer(c_int) omp_target_memcpy_rect_async 629 type(c_ptr), value :: dst, src 630 integer(c_size_t), value :: element_size 631 integer(c_int), value :: num_dims, dst_device_num, src_device_num, & 632 depobj_count 633 integer(c_size_t), intent(in) :: volume(*), dst_offsets(*), & 634 src_offsets(*), dst_dimensions(*), src_dimensions(*) 635 integer (omp_depend_kind), optional :: depobj_list(*) 636 end function omp_target_memcpy_rect_async 637 638 function omp_target_memset(ptr, val, count, device_num) bind(c) 639 use, intrinsic :: iso_c_binding, only : c_ptr, c_int, c_size_t 640 type(c_ptr) :: omp_target_memset 641 type(c_ptr), value :: ptr 642 integer(c_int), value :: val 643 integer(c_size_t), value :: count 644 integer(c_int), value :: device_num 645 end function 646 647 function omp_target_memset_async(ptr, val, count, device_num, & 648 depobj_count, depobj_list) bind(c) 649 use, intrinsic :: iso_c_binding, only : c_ptr, c_int, c_size_t 650 use omp_lib_kinds 651 type(c_ptr) :: omp_target_memset_async 652 type(c_ptr), value :: ptr 653 integer(c_int), value :: val 654 integer(c_size_t), value :: count 655 integer(c_int), value :: device_num 656 integer(c_int), value :: depobj_count 657 integer(omp_depend_kind), optional :: depobj_list(*) 658 end function 659 660 function omp_target_associate_ptr(host_ptr, device_ptr, size, & 661 device_offset, device_num) bind(c) 662 use omp_lib_kinds 663 integer(c_int) omp_target_associate_ptr 664 type(c_ptr), value :: host_ptr, device_ptr 665 integer(c_size_t), value :: size, device_offset 666 integer(c_int), value :: device_num 667 end function omp_target_associate_ptr 668 669 function omp_get_mapped_ptr(ptr, device_num) bind(c) 670 use omp_lib_kinds 671 type(c_ptr) omp_get_mapped_ptr 672 type(c_ptr), value :: ptr 673 integer(c_int), value :: device_num 674 end function omp_get_mapped_ptr 675 676 function omp_target_disassociate_ptr(ptr, device_num) bind(c) 677 use omp_lib_kinds 678 integer(c_int) omp_target_disassociate_ptr 679 type(c_ptr), value :: ptr 680 integer(c_int), value :: device_num 681 end function omp_target_disassociate_ptr 682 683 function omp_target_is_accessible(ptr, size, device_num) bind(c) 684 use omp_lib_kinds 685 use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t, c_int 686 integer(c_int) omp_target_is_accessible 687 type(c_ptr), value :: ptr 688 integer(c_size_t), value :: size 689 integer(c_int), value :: device_num 690 end function omp_target_is_accessible 691 692 function omp_alloc(size, allocator) bind(c) 693 use omp_lib_kinds 694 use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t 695 type(c_ptr) omp_alloc 696 integer(c_size_t), value :: size 697 integer(omp_allocator_handle_kind), value :: allocator 698 end function omp_alloc 699 700 function omp_aligned_alloc(alignment, size, allocator) bind(c) 701 use omp_lib_kinds 702 use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t 703 type(c_ptr) omp_aligned_alloc 704 integer(c_size_t), value :: alignment, size 705 integer(omp_allocator_handle_kind), value :: allocator 706 end function omp_aligned_alloc 707 708 function omp_calloc(nmemb, size, allocator) bind(c) 709 use omp_lib_kinds 710 use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t 711 type(c_ptr) omp_calloc 712 integer(c_size_t), value :: nmemb, size 713 integer(omp_allocator_handle_kind), value :: allocator 714 end function omp_calloc 715 716 function omp_aligned_calloc(alignment, nmemb, size, allocator) bind(c) 717 use omp_lib_kinds 718 use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t 719 type(c_ptr) omp_aligned_calloc 720 integer(c_size_t), value :: alignment, nmemb, size 721 integer(omp_allocator_handle_kind), value :: allocator 722 end function omp_aligned_calloc 723 724 function omp_realloc(ptr, size, allocator, free_allocator) bind(c) 725 use omp_lib_kinds 726 use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t 727 type(c_ptr) omp_realloc 728 type(c_ptr), value :: ptr 729 integer(c_size_t), value :: size 730 integer(omp_allocator_handle_kind), value :: allocator 731 integer(omp_allocator_handle_kind), value :: free_allocator 732 end function omp_realloc 733 734 subroutine omp_free(ptr, allocator) bind(c) 735 use omp_lib_kinds 736 use, intrinsic :: iso_c_binding, only : c_ptr 737 type(c_ptr), value :: ptr 738 integer(omp_allocator_handle_kind), value :: allocator 739 end subroutine omp_free 740 741 function omp_in_explicit_task() bind(c) 742 use omp_lib_kinds 743 logical (kind=omp_logical_kind) omp_in_explicit_task 744 end function omp_in_explicit_task 745 746! *** 747! *** kmp_* entry points 748! *** 749 750 subroutine kmp_set_stacksize(size) bind(c) 751 use omp_lib_kinds 752 integer (kind=omp_integer_kind), value :: size 753 end subroutine kmp_set_stacksize 754 755 subroutine kmp_set_stacksize_s(size) bind(c) 756 use omp_lib_kinds 757 integer (kind=kmp_size_t_kind), value :: size 758 end subroutine kmp_set_stacksize_s 759 760 subroutine kmp_set_blocktime(msec) bind(c) 761 use omp_lib_kinds 762 integer (kind=omp_integer_kind), value :: msec 763 end subroutine kmp_set_blocktime 764 765 subroutine kmp_set_library_serial() bind(c) 766 end subroutine kmp_set_library_serial 767 768 subroutine kmp_set_library_turnaround() bind(c) 769 end subroutine kmp_set_library_turnaround 770 771 subroutine kmp_set_library_throughput() bind(c) 772 end subroutine kmp_set_library_throughput 773 774 subroutine kmp_set_library(libnum) bind(c) 775 use omp_lib_kinds 776 integer (kind=omp_integer_kind), value :: libnum 777 end subroutine kmp_set_library 778 779 subroutine kmp_set_defaults(string) bind(c) 780 use, intrinsic :: iso_c_binding 781 character (kind=c_char) :: string(*) 782 end subroutine kmp_set_defaults 783 784 function kmp_get_stacksize() bind(c) 785 use omp_lib_kinds 786 integer (kind=omp_integer_kind) kmp_get_stacksize 787 end function kmp_get_stacksize 788 789 function kmp_get_stacksize_s() bind(c) 790 use omp_lib_kinds 791 integer (kind=kmp_size_t_kind) kmp_get_stacksize_s 792 end function kmp_get_stacksize_s 793 794 function kmp_get_blocktime() bind(c) 795 use omp_lib_kinds 796 integer (kind=omp_integer_kind) kmp_get_blocktime 797 end function kmp_get_blocktime 798 799 function kmp_get_library() bind(c) 800 use omp_lib_kinds 801 integer (kind=omp_integer_kind) kmp_get_library 802 end function kmp_get_library 803 804 subroutine kmp_set_disp_num_buffers(num) bind(c) 805 use omp_lib_kinds 806 integer (kind=omp_integer_kind), value :: num 807 end subroutine kmp_set_disp_num_buffers 808 809 function kmp_set_affinity(mask) bind(c) 810 use omp_lib_kinds 811 integer (kind=omp_integer_kind) kmp_set_affinity 812 integer (kind=kmp_affinity_mask_kind) mask 813 end function kmp_set_affinity 814 815 function kmp_get_affinity(mask) bind(c) 816 use omp_lib_kinds 817 integer (kind=omp_integer_kind) kmp_get_affinity 818 integer (kind=kmp_affinity_mask_kind) mask 819 end function kmp_get_affinity 820 821 function kmp_get_affinity_max_proc() bind(c) 822 use omp_lib_kinds 823 integer (kind=omp_integer_kind) kmp_get_affinity_max_proc 824 end function kmp_get_affinity_max_proc 825 826 subroutine kmp_create_affinity_mask(mask) bind(c) 827 use omp_lib_kinds 828 integer (kind=kmp_affinity_mask_kind) mask 829 end subroutine kmp_create_affinity_mask 830 831 subroutine kmp_destroy_affinity_mask(mask) bind(c) 832 use omp_lib_kinds 833 integer (kind=kmp_affinity_mask_kind) mask 834 end subroutine kmp_destroy_affinity_mask 835 836 function kmp_set_affinity_mask_proc(proc, mask) bind(c) 837 use omp_lib_kinds 838 integer (kind=omp_integer_kind) kmp_set_affinity_mask_proc 839 integer (kind=omp_integer_kind), value :: proc 840 integer (kind=kmp_affinity_mask_kind) mask 841 end function kmp_set_affinity_mask_proc 842 843 function kmp_unset_affinity_mask_proc(proc, mask) bind(c) 844 use omp_lib_kinds 845 integer (kind=omp_integer_kind) kmp_unset_affinity_mask_proc 846 integer (kind=omp_integer_kind), value :: proc 847 integer (kind=kmp_affinity_mask_kind) mask 848 end function kmp_unset_affinity_mask_proc 849 850 function kmp_get_affinity_mask_proc(proc, mask) bind(c) 851 use omp_lib_kinds 852 integer (kind=omp_integer_kind) kmp_get_affinity_mask_proc 853 integer (kind=omp_integer_kind), value :: proc 854 integer (kind=kmp_affinity_mask_kind) mask 855 end function kmp_get_affinity_mask_proc 856 857 function kmp_malloc(size) bind(c) 858 use omp_lib_kinds 859 integer (kind=kmp_pointer_kind) kmp_malloc 860 integer (kind=kmp_size_t_kind), value :: size 861 end function kmp_malloc 862 863 function kmp_aligned_malloc(size, alignment) bind(c) 864 use omp_lib_kinds 865 integer (kind=kmp_pointer_kind) kmp_aligned_malloc 866 integer (kind=kmp_size_t_kind), value :: size 867 integer (kind=kmp_size_t_kind), value :: alignment 868 end function kmp_aligned_malloc 869 870 function kmp_calloc(nelem, elsize) bind(c) 871 use omp_lib_kinds 872 integer (kind=kmp_pointer_kind) kmp_calloc 873 integer (kind=kmp_size_t_kind), value :: nelem 874 integer (kind=kmp_size_t_kind), value :: elsize 875 end function kmp_calloc 876 877 function kmp_realloc(ptr, size) bind(c) 878 use omp_lib_kinds 879 integer (kind=kmp_pointer_kind) kmp_realloc 880 integer (kind=kmp_pointer_kind), value :: ptr 881 integer (kind=kmp_size_t_kind), value :: size 882 end function kmp_realloc 883 884 subroutine kmp_free(ptr) bind(c) 885 use omp_lib_kinds 886 integer (kind=kmp_pointer_kind), value :: ptr 887 end subroutine kmp_free 888 889 subroutine kmp_set_warnings_on() bind(c) 890 end subroutine kmp_set_warnings_on 891 892 subroutine kmp_set_warnings_off() bind(c) 893 end subroutine kmp_set_warnings_off 894 895 function kmp_get_cancellation_status(cancelkind) bind(c) 896 use omp_lib_kinds 897 integer (kind=kmp_cancel_kind), value :: cancelkind 898 logical (kind=omp_logical_kind) kmp_get_cancellation_status 899 end function kmp_get_cancellation_status 900 901 end interface 902 903 end module omp_lib 904