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