1! Copyright (C) 2005-2022 Free Software Foundation, Inc. 2! Contributed by Jakub Jelinek <jakub@redhat.com>. 3 4! This file is part of the GNU Offloading and Multi Processing Library 5! (libgomp). 6 7! Libgomp is free software; you can redistribute it and/or modify it 8! under the terms of the GNU General Public License as published by 9! the Free Software Foundation; either version 3, or (at your option) 10! any later version. 11 12! Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY 13! WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 14! FOR A PARTICULAR PURPOSE. See the GNU General Public License for 15! more details. 16 17! Under Section 7 of GPL version 3, you are granted additional 18! permissions described in the GCC Runtime Library Exception, version 19! 3.1, as published by the Free Software Foundation. 20 21! You should have received a copy of the GNU General Public License and 22! a copy of the GCC Runtime Library Exception along with this program; 23! see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 24! <http://www.gnu.org/licenses/>. 25 26 module omp_lib_kinds 27 use iso_c_binding, only: c_int, c_intptr_t 28 implicit none 29 private :: c_int, c_intptr_t 30 integer, parameter :: omp_lock_kind = @OMP_LOCK_KIND@ 31 integer, parameter :: omp_nest_lock_kind = @OMP_NEST_LOCK_KIND@ 32 integer, parameter :: omp_sched_kind = 4 33 integer, parameter :: omp_proc_bind_kind = 4 34 integer, parameter :: omp_sync_hint_kind = 4 35 integer, parameter :: omp_lock_hint_kind = omp_sync_hint_kind 36 integer, parameter :: omp_pause_resource_kind = 4 37 integer, parameter :: omp_allocator_handle_kind = c_intptr_t 38 integer, parameter :: omp_alloctrait_key_kind = c_int 39 integer, parameter :: omp_alloctrait_val_kind = c_intptr_t 40 integer, parameter :: omp_memspace_handle_kind = c_intptr_t 41 integer, parameter :: omp_depend_kind = @OMP_DEPEND_KIND@ 42 integer, parameter :: omp_event_handle_kind = c_intptr_t 43 integer (omp_sched_kind), parameter :: omp_sched_static = 1 44 integer (omp_sched_kind), parameter :: omp_sched_dynamic = 2 45 integer (omp_sched_kind), parameter :: omp_sched_guided = 3 46 integer (omp_sched_kind), parameter :: omp_sched_auto = 4 47 integer (omp_proc_bind_kind), & 48 parameter :: omp_proc_bind_false = 0 49 integer (omp_proc_bind_kind), & 50 parameter :: omp_proc_bind_true = 1 51 integer (omp_proc_bind_kind), & 52 parameter :: omp_proc_bind_primary = 2 53 integer (omp_proc_bind_kind), & 54 parameter :: omp_proc_bind_master = 2 55 integer (omp_proc_bind_kind), & 56 parameter :: omp_proc_bind_close = 3 57 integer (omp_proc_bind_kind), & 58 parameter :: omp_proc_bind_spread = 4 59 integer (omp_lock_hint_kind), & 60 parameter :: omp_sync_hint_none = 0 61 integer (omp_lock_hint_kind), & 62 parameter :: omp_lock_hint_none = omp_sync_hint_none 63 integer (omp_lock_hint_kind), & 64 parameter :: omp_sync_hint_uncontended = 1 65 integer (omp_lock_hint_kind), & 66 parameter :: omp_lock_hint_uncontended & 67 = omp_sync_hint_uncontended 68 integer (omp_lock_hint_kind), & 69 parameter :: omp_sync_hint_contended = 2 70 integer (omp_lock_hint_kind), & 71 parameter :: omp_lock_hint_contended & 72 = omp_sync_hint_contended 73 integer (omp_lock_hint_kind), & 74 parameter :: omp_sync_hint_nonspeculative = 4 75 integer (omp_lock_hint_kind), & 76 parameter :: omp_lock_hint_nonspeculative & 77 = omp_sync_hint_nonspeculative 78 integer (omp_lock_hint_kind), & 79 parameter :: omp_sync_hint_speculative = 8 80 integer (omp_lock_hint_kind), & 81 parameter :: omp_lock_hint_speculative & 82 = omp_sync_hint_speculative 83 integer (kind=omp_pause_resource_kind), & 84 parameter :: omp_pause_soft = 1 85 integer (kind=omp_pause_resource_kind), & 86 parameter :: omp_pause_hard = 2 87 integer (kind=omp_alloctrait_key_kind), & 88 parameter :: omp_atk_sync_hint = 1 89 integer (kind=omp_alloctrait_key_kind), & 90 parameter :: omp_atk_alignment = 2 91 integer (kind=omp_alloctrait_key_kind), & 92 parameter :: omp_atk_access = 3 93 integer (kind=omp_alloctrait_key_kind), & 94 parameter :: omp_atk_pool_size = 4 95 integer (kind=omp_alloctrait_key_kind), & 96 parameter :: omp_atk_fallback = 5 97 integer (kind=omp_alloctrait_key_kind), & 98 parameter :: omp_atk_fb_data = 6 99 integer (kind=omp_alloctrait_key_kind), & 100 parameter :: omp_atk_pinned = 7 101 integer (kind=omp_alloctrait_key_kind), & 102 parameter :: omp_atk_partition = 8 103 integer (kind=omp_alloctrait_val_kind), & 104 parameter :: omp_atv_default = -1 105 integer (kind=omp_alloctrait_val_kind), & 106 parameter :: omp_atv_false = 0 107 integer (kind=omp_alloctrait_val_kind), & 108 parameter :: omp_atv_true = 1 109 integer (kind=omp_alloctrait_val_kind), & 110 parameter :: omp_atv_contended = 3 111 integer (kind=omp_alloctrait_val_kind), & 112 parameter :: omp_atv_uncontended = 4 113 integer (kind=omp_alloctrait_val_kind), & 114 parameter :: omp_atv_serialized = 5 115 integer (kind=omp_alloctrait_val_kind), & 116 parameter :: omp_atv_sequential = omp_atv_serialized 117 integer (kind=omp_alloctrait_val_kind), & 118 parameter :: omp_atv_private = 6 119 integer (kind=omp_alloctrait_val_kind), & 120 parameter :: omp_atv_all = 7 121 integer (kind=omp_alloctrait_val_kind), & 122 parameter :: omp_atv_thread = 8 123 integer (kind=omp_alloctrait_val_kind), & 124 parameter :: omp_atv_pteam = 9 125 integer (kind=omp_alloctrait_val_kind), & 126 parameter :: omp_atv_cgroup = 10 127 integer (kind=omp_alloctrait_val_kind), & 128 parameter :: omp_atv_default_mem_fb = 11 129 integer (kind=omp_alloctrait_val_kind), & 130 parameter :: omp_atv_null_fb = 12 131 integer (kind=omp_alloctrait_val_kind), & 132 parameter :: omp_atv_abort_fb = 13 133 integer (kind=omp_alloctrait_val_kind), & 134 parameter :: omp_atv_allocator_fb = 14 135 integer (kind=omp_alloctrait_val_kind), & 136 parameter :: omp_atv_environment = 15 137 integer (kind=omp_alloctrait_val_kind), & 138 parameter :: omp_atv_nearest = 16 139 integer (kind=omp_alloctrait_val_kind), & 140 parameter :: omp_atv_blocked = 17 141 integer (kind=omp_alloctrait_val_kind), & 142 parameter :: omp_atv_interleaved = 18 143 integer (kind=omp_allocator_handle_kind), & 144 parameter :: omp_null_allocator = 0 145 integer (kind=omp_allocator_handle_kind), & 146 parameter :: omp_default_mem_alloc = 1 147 integer (kind=omp_allocator_handle_kind), & 148 parameter :: omp_large_cap_mem_alloc = 2 149 integer (kind=omp_allocator_handle_kind), & 150 parameter :: omp_const_mem_alloc = 3 151 integer (kind=omp_allocator_handle_kind), & 152 parameter :: omp_high_bw_mem_alloc = 4 153 integer (kind=omp_allocator_handle_kind), & 154 parameter :: omp_low_lat_mem_alloc = 5 155 integer (kind=omp_allocator_handle_kind), & 156 parameter :: omp_cgroup_mem_alloc = 6 157 integer (kind=omp_allocator_handle_kind), & 158 parameter :: omp_pteam_mem_alloc = 7 159 integer (kind=omp_allocator_handle_kind), & 160 parameter :: omp_thread_mem_alloc = 8 161 integer (omp_memspace_handle_kind), & 162 parameter :: omp_default_mem_space = 0 163 integer (omp_memspace_handle_kind), & 164 parameter :: omp_large_cap_mem_space = 1 165 integer (omp_memspace_handle_kind), & 166 parameter :: omp_const_mem_space = 2 167 integer (omp_memspace_handle_kind), & 168 parameter :: omp_high_bw_mem_space = 3 169 integer (omp_memspace_handle_kind), & 170 parameter :: omp_low_lat_mem_space = 4 171 172 type omp_alloctrait 173 integer (kind=omp_alloctrait_key_kind) key 174 integer (kind=omp_alloctrait_val_kind) value 175 end type omp_alloctrait 176 end module 177 178 module omp_lib 179 use omp_lib_kinds 180 implicit none 181 integer, parameter :: openmp_version = 201511 182 183 interface 184 subroutine omp_init_lock (svar) 185 use omp_lib_kinds 186 integer (omp_lock_kind), intent (out) :: svar 187 end subroutine omp_init_lock 188 end interface 189 190 interface 191 subroutine omp_init_lock_with_hint (svar, hint) 192 use omp_lib_kinds 193 integer (omp_lock_kind), intent (out) :: svar 194 integer (omp_lock_hint_kind), intent (in) :: hint 195 end subroutine omp_init_lock_with_hint 196 end interface 197 198 interface 199 subroutine omp_init_nest_lock (nvar) 200 use omp_lib_kinds 201 integer (omp_nest_lock_kind), intent (out) :: nvar 202 end subroutine omp_init_nest_lock 203 end interface 204 205 interface 206 subroutine omp_init_nest_lock_with_hint (nvar, hint) 207 use omp_lib_kinds 208 integer (omp_nest_lock_kind), intent (out) :: nvar 209 integer (omp_lock_hint_kind), intent (in) :: hint 210 end subroutine omp_init_nest_lock_with_hint 211 end interface 212 213 interface 214 subroutine omp_destroy_lock (svar) 215 use omp_lib_kinds 216 integer (omp_lock_kind), intent (inout) :: svar 217 end subroutine omp_destroy_lock 218 end interface 219 220 interface 221 subroutine omp_destroy_nest_lock (nvar) 222 use omp_lib_kinds 223 integer (omp_nest_lock_kind), intent (inout) :: nvar 224 end subroutine omp_destroy_nest_lock 225 end interface 226 227 interface 228 subroutine omp_set_lock (svar) 229 use omp_lib_kinds 230 integer (omp_lock_kind), intent (inout) :: svar 231 end subroutine omp_set_lock 232 end interface 233 234 interface 235 subroutine omp_set_nest_lock (nvar) 236 use omp_lib_kinds 237 integer (omp_nest_lock_kind), intent (inout) :: nvar 238 end subroutine omp_set_nest_lock 239 end interface 240 241 interface 242 subroutine omp_unset_lock (svar) 243 use omp_lib_kinds 244 integer (omp_lock_kind), intent (inout) :: svar 245 end subroutine omp_unset_lock 246 end interface 247 248 interface 249 subroutine omp_unset_nest_lock (nvar) 250 use omp_lib_kinds 251 integer (omp_nest_lock_kind), intent (inout) :: nvar 252 end subroutine omp_unset_nest_lock 253 end interface 254 255 interface omp_set_dynamic 256 subroutine omp_set_dynamic (dynamic_threads) 257 logical (4), intent (in) :: dynamic_threads 258 end subroutine omp_set_dynamic 259 subroutine omp_set_dynamic_8 (dynamic_threads) 260 logical (8), intent (in) :: dynamic_threads 261 end subroutine omp_set_dynamic_8 262 end interface 263 264 interface omp_set_nested 265 subroutine omp_set_nested (nested) 266 logical (4), intent (in) :: nested 267 end subroutine omp_set_nested 268 subroutine omp_set_nested_8 (nested) 269 logical (8), intent (in) :: nested 270 end subroutine omp_set_nested_8 271 end interface 272 273 interface omp_set_num_threads 274 subroutine omp_set_num_threads (num_threads) 275 integer (4), intent (in) :: num_threads 276 end subroutine omp_set_num_threads 277 subroutine omp_set_num_threads_8 (num_threads) 278 integer (8), intent (in) :: num_threads 279 end subroutine omp_set_num_threads_8 280 end interface 281 282 interface 283 function omp_get_dynamic () 284 logical (4) :: omp_get_dynamic 285 end function omp_get_dynamic 286 end interface 287 288 interface 289 function omp_get_nested () 290 logical (4) :: omp_get_nested 291 end function omp_get_nested 292 end interface 293 294 interface 295 function omp_in_parallel () 296 logical (4) :: omp_in_parallel 297 end function omp_in_parallel 298 end interface 299 300 interface 301 function omp_test_lock (svar) 302 use omp_lib_kinds 303 logical (4) :: omp_test_lock 304 integer (omp_lock_kind), intent (inout) :: svar 305 end function omp_test_lock 306 end interface 307 308 interface 309 function omp_get_max_threads () 310 integer (4) :: omp_get_max_threads 311 end function omp_get_max_threads 312 end interface 313 314 interface 315 function omp_get_num_procs () 316 integer (4) :: omp_get_num_procs 317 end function omp_get_num_procs 318 end interface 319 320 interface 321 function omp_get_num_threads () 322 integer (4) :: omp_get_num_threads 323 end function omp_get_num_threads 324 end interface 325 326 interface 327 function omp_get_thread_num () 328 integer (4) :: omp_get_thread_num 329 end function omp_get_thread_num 330 end interface 331 332 interface 333 function omp_test_nest_lock (nvar) 334 use omp_lib_kinds 335 integer (4) :: omp_test_nest_lock 336 integer (omp_nest_lock_kind), intent (inout) :: nvar 337 end function omp_test_nest_lock 338 end interface 339 340 interface 341 function omp_get_wtick () 342 double precision :: omp_get_wtick 343 end function omp_get_wtick 344 end interface 345 346 interface 347 function omp_get_wtime () 348 double precision :: omp_get_wtime 349 end function omp_get_wtime 350 end interface 351 352 interface omp_set_schedule 353 subroutine omp_set_schedule (kind, chunk_size) 354 use omp_lib_kinds 355 integer (omp_sched_kind), intent (in) :: kind 356 integer (4), intent (in) :: chunk_size 357 end subroutine omp_set_schedule 358 subroutine omp_set_schedule_8 (kind, chunk_size) 359 use omp_lib_kinds 360 integer (omp_sched_kind), intent (in) :: kind 361 integer (8), intent (in) :: chunk_size 362 end subroutine omp_set_schedule_8 363 end interface 364 365 interface omp_get_schedule 366 subroutine omp_get_schedule (kind, chunk_size) 367 use omp_lib_kinds 368 integer (omp_sched_kind), intent (out) :: kind 369 integer (4), intent (out) :: chunk_size 370 end subroutine omp_get_schedule 371 subroutine omp_get_schedule_8 (kind, chunk_size) 372 use omp_lib_kinds 373 integer (omp_sched_kind), intent (out) :: kind 374 integer (8), intent (out) :: chunk_size 375 end subroutine omp_get_schedule_8 376 end interface 377 378 interface 379 function omp_get_thread_limit () 380 integer (4) :: omp_get_thread_limit 381 end function omp_get_thread_limit 382 end interface 383 384 interface omp_set_max_active_levels 385 subroutine omp_set_max_active_levels (max_levels) 386 integer (4), intent (in) :: max_levels 387 end subroutine omp_set_max_active_levels 388 subroutine omp_set_max_active_levels_8 (max_levels) 389 integer (8), intent (in) :: max_levels 390 end subroutine omp_set_max_active_levels_8 391 end interface 392 393 interface 394 function omp_get_max_active_levels () 395 integer (4) :: omp_get_max_active_levels 396 end function omp_get_max_active_levels 397 end interface 398 399 interface 400 function omp_get_supported_active_levels () 401 integer (4) :: omp_get_supported_active_levels 402 end function omp_get_supported_active_levels 403 end interface 404 405 interface 406 function omp_get_level () 407 integer (4) :: omp_get_level 408 end function omp_get_level 409 end interface 410 411 interface omp_get_ancestor_thread_num 412 function omp_get_ancestor_thread_num (level) 413 integer (4), intent (in) :: level 414 integer (4) :: omp_get_ancestor_thread_num 415 end function omp_get_ancestor_thread_num 416 function omp_get_ancestor_thread_num_8 (level) 417 integer (8), intent (in) :: level 418 integer (4) :: omp_get_ancestor_thread_num_8 419 end function omp_get_ancestor_thread_num_8 420 end interface 421 422 interface omp_get_team_size 423 function omp_get_team_size (level) 424 integer (4), intent (in) :: level 425 integer (4) :: omp_get_team_size 426 end function omp_get_team_size 427 function omp_get_team_size_8 (level) 428 integer (8), intent (in) :: level 429 integer (4) :: omp_get_team_size_8 430 end function omp_get_team_size_8 431 end interface 432 433 interface 434 function omp_get_active_level () 435 integer (4) :: omp_get_active_level 436 end function omp_get_active_level 437 end interface 438 439 interface 440 function omp_in_final () 441 logical (4) :: omp_in_final 442 end function omp_in_final 443 end interface 444 445 interface 446 function omp_get_cancellation () 447 logical (4) :: omp_get_cancellation 448 end function omp_get_cancellation 449 end interface 450 451 interface 452 function omp_get_proc_bind () 453 use omp_lib_kinds 454 integer (omp_proc_bind_kind) :: omp_get_proc_bind 455 end function omp_get_proc_bind 456 end interface 457 458 interface 459 function omp_get_num_places () 460 integer (4) :: omp_get_num_places 461 end function omp_get_num_places 462 end interface 463 464 interface omp_get_place_num_procs 465 function omp_get_place_num_procs (place_num) 466 integer (4), intent(in) :: place_num 467 integer (4) :: omp_get_place_num_procs 468 end function omp_get_place_num_procs 469 470 function omp_get_place_num_procs_8 (place_num) 471 integer (8), intent(in) :: place_num 472 integer (4) :: omp_get_place_num_procs_8 473 end function omp_get_place_num_procs_8 474 end interface 475 476 interface omp_get_place_proc_ids 477 subroutine omp_get_place_proc_ids (place_num, ids) 478 integer (4), intent(in) :: place_num 479 integer (4), intent(out) :: ids(*) 480 end subroutine omp_get_place_proc_ids 481 482 subroutine omp_get_place_proc_ids_8 (place_num, ids) 483 integer (8), intent(in) :: place_num 484 integer (8), intent(out) :: ids(*) 485 end subroutine omp_get_place_proc_ids_8 486 end interface 487 488 interface 489 function omp_get_place_num () 490 integer (4) :: omp_get_place_num 491 end function omp_get_place_num 492 end interface 493 494 interface 495 function omp_get_partition_num_places () 496 integer (4) :: omp_get_partition_num_places 497 end function omp_get_partition_num_places 498 end interface 499 500 interface omp_get_partition_place_nums 501 subroutine omp_get_partition_place_nums (place_nums) 502 integer (4), intent(out) :: place_nums(*) 503 end subroutine omp_get_partition_place_nums 504 505 subroutine omp_get_partition_place_nums_8 (place_nums) 506 integer (8), intent(out) :: place_nums(*) 507 end subroutine omp_get_partition_place_nums_8 508 end interface 509 510 interface omp_set_default_device 511 subroutine omp_set_default_device (device_num) 512 integer (4), intent (in) :: device_num 513 end subroutine omp_set_default_device 514 subroutine omp_set_default_device_8 (device_num) 515 integer (8), intent (in) :: device_num 516 end subroutine omp_set_default_device_8 517 end interface 518 519 interface 520 function omp_get_default_device () 521 integer (4) :: omp_get_default_device 522 end function omp_get_default_device 523 end interface 524 525 interface 526 function omp_get_num_devices () 527 integer (4) :: omp_get_num_devices 528 end function omp_get_num_devices 529 end interface 530 531 interface 532 function omp_get_num_teams () 533 integer (4) :: omp_get_num_teams 534 end function omp_get_num_teams 535 end interface 536 537 interface 538 function omp_get_team_num () 539 integer (4) :: omp_get_team_num 540 end function omp_get_team_num 541 end interface 542 543 interface 544 function omp_is_initial_device () 545 logical (4) :: omp_is_initial_device 546 end function omp_is_initial_device 547 end interface 548 549 interface 550 function omp_get_initial_device () 551 integer (4) :: omp_get_initial_device 552 end function omp_get_initial_device 553 end interface 554 555 interface 556 function omp_get_device_num () 557 integer (4) :: omp_get_device_num 558 end function omp_get_device_num 559 end interface 560 561 interface 562 function omp_get_max_task_priority () 563 integer (4) :: omp_get_max_task_priority 564 end function omp_get_max_task_priority 565 end interface 566 567 interface omp_set_num_teams 568 subroutine omp_set_num_teams (num_teams) 569 integer (4), intent (in) :: num_teams 570 end subroutine omp_set_num_teams 571 subroutine omp_set_num_teams_8 (num_teams) 572 integer (8), intent (in) :: num_teams 573 end subroutine omp_set_num_teams_8 574 end interface 575 576 interface 577 function omp_get_max_teams () 578 integer (4) :: omp_get_max_teams 579 end function omp_get_max_teams 580 end interface 581 582 interface omp_set_teams_thread_limit 583 subroutine omp_set_teams_thread_limit (thread_limit) 584 integer (4), intent (in) :: thread_limit 585 end subroutine omp_set_teams_thread_limit 586 subroutine omp_set_teams_thread_limit_8 (thread_limit) 587 integer (8), intent (in) :: thread_limit 588 end subroutine omp_set_teams_thread_limit_8 589 end interface 590 591 interface 592 function omp_get_teams_thread_limit () 593 integer (4) :: omp_get_teams_thread_limit 594 end function omp_get_teams_thread_limit 595 end interface 596 597 interface 598 subroutine omp_fulfill_event (event) 599 use omp_lib_kinds 600 integer (kind=omp_event_handle_kind), & 601 value, intent(in) :: event 602 end subroutine omp_fulfill_event 603 end interface 604 605 interface 606 subroutine omp_set_affinity_format (format) 607 character(len=*), intent(in) :: format 608 end subroutine omp_set_affinity_format 609 end interface 610 611 interface 612 function omp_get_affinity_format (buffer) 613 integer (4) :: omp_get_affinity_format 614 character(len=*), intent(out) :: buffer 615 end function omp_get_affinity_format 616 end interface 617 618 interface 619 subroutine omp_display_affinity (format) 620 character(len=*), intent(in) :: format 621 end subroutine omp_display_affinity 622 end interface 623 624 interface 625 function omp_capture_affinity (buffer, format) 626 integer (4) :: omp_capture_affinity 627 character(len=*), intent(out) :: buffer 628 character(len=*), intent(in) :: format 629 end function omp_capture_affinity 630 end interface 631 632 interface 633 function omp_pause_resource (kind, device_num) 634 use omp_lib_kinds 635 integer (4) :: omp_pause_resource 636 integer (kind=omp_pause_resource_kind), & 637 intent(in) :: kind 638 integer (4) :: device_num 639 end function 640 end interface 641 642 interface 643 function omp_pause_resource_all (kind) 644 use omp_lib_kinds 645 integer (4) :: omp_pause_resource_all 646 integer (kind=omp_pause_resource_kind), & 647 intent(in) :: kind 648 end function 649 end interface 650 651 interface omp_init_allocator 652 function omp_init_allocator (memspace, ntraits, traits) 653 use omp_lib_kinds 654 integer (kind=omp_allocator_handle_kind) omp_init_allocator 655 integer (kind=omp_memspace_handle_kind), & 656 intent(in) :: memspace 657 integer (4), intent(in) :: ntraits 658 type (omp_alloctrait), intent(in) :: traits(*) 659 end function 660 function omp_init_allocator_8 (memspace, ntraits, traits) 661 use omp_lib_kinds 662 integer (kind=omp_allocator_handle_kind) omp_init_allocator_8 663 integer (kind=omp_memspace_handle_kind), & 664 intent(in) :: memspace 665 integer (8), intent(in) :: ntraits 666 type (omp_alloctrait), intent(in) :: traits(*) 667 end function 668 end interface 669 670 interface 671 subroutine omp_destroy_allocator (allocator) 672 use omp_lib_kinds 673 integer (kind=omp_allocator_handle_kind), & 674 intent(in) :: allocator 675 end subroutine 676 end interface 677 678 interface 679 subroutine omp_set_default_allocator (allocator) 680 use omp_lib_kinds 681 integer (kind=omp_allocator_handle_kind), & 682 intent(in) :: allocator 683 end subroutine 684 end interface 685 686 interface 687 function omp_get_default_allocator () 688 use omp_lib_kinds 689 integer (kind=omp_allocator_handle_kind) & 690 omp_get_default_allocator 691 end function 692 end interface 693 694 interface omp_display_env 695 subroutine omp_display_env (verbose) 696 logical (4),intent (in) :: verbose 697 end subroutine omp_display_env 698 subroutine omp_display_env_8 (verbose) 699 logical (8),intent (in) :: verbose 700 end subroutine omp_display_env_8 701 end interface 702 703 interface 704 function omp_alloc (size, allocator) bind(c) 705 use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t 706 import :: omp_allocator_handle_kind 707 type(c_ptr) :: omp_alloc 708 integer(c_size_t), value :: size 709 integer(omp_allocator_handle_kind), value :: allocator 710 end function omp_alloc 711 end interface 712 713 interface 714 function omp_aligned_alloc (alignment, size, allocator) bind(c) 715 use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t 716 import :: omp_allocator_handle_kind 717 type(c_ptr) :: omp_aligned_alloc 718 integer(c_size_t), value :: alignment, size 719 integer(omp_allocator_handle_kind), value :: allocator 720 end function omp_aligned_alloc 721 end interface 722 723 interface 724 subroutine omp_free(ptr, allocator) bind(c) 725 use, intrinsic :: iso_c_binding, only : c_ptr 726 import :: omp_allocator_handle_kind 727 type(c_ptr), value :: ptr 728 integer(omp_allocator_handle_kind), value :: allocator 729 end subroutine omp_free 730 end interface 731 732 interface 733 function omp_calloc (nmemb, size, allocator) bind(c) 734 use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t 735 import :: omp_allocator_handle_kind 736 type(c_ptr) :: omp_calloc 737 integer(c_size_t), value :: nmemb, size 738 integer(omp_allocator_handle_kind), value :: allocator 739 end function omp_calloc 740 end interface 741 742 interface 743 function omp_aligned_calloc (alignment, nmemb, size, allocator) bind(c) 744 use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t 745 import :: omp_allocator_handle_kind 746 type(c_ptr) :: omp_aligned_calloc 747 integer(c_size_t), value :: alignment, nmemb, size 748 integer(omp_allocator_handle_kind), value :: allocator 749 end function omp_aligned_calloc 750 end interface 751 752 interface 753 function omp_realloc (ptr, size, allocator, free_allocator) bind(c) 754 use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t 755 import :: omp_allocator_handle_kind 756 type(c_ptr) :: omp_realloc 757 type(c_ptr), value :: ptr 758 integer(c_size_t), value :: size 759 integer(omp_allocator_handle_kind), value :: allocator, free_allocator 760 end function omp_realloc 761 end interface 762 763 interface 764 function omp_target_alloc (size, device_num) bind(c) 765 use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t, c_int 766 type(c_ptr) :: omp_target_alloc 767 integer(c_size_t), value :: size 768 integer(c_int), value :: device_num 769 end function omp_target_alloc 770 end interface 771 772 interface 773 subroutine omp_target_free (device_ptr, device_num) bind(c) 774 use, intrinsic :: iso_c_binding, only : c_ptr, c_int 775 type(c_ptr), value :: device_ptr 776 integer(c_int), value :: device_num 777 end subroutine omp_target_free 778 end interface 779 780 interface 781 function omp_target_is_present (ptr, device_num) bind(c) 782 use, intrinsic :: iso_c_binding, only : c_ptr, c_int 783 integer(c_int) :: omp_target_is_present 784 type(c_ptr), value :: ptr 785 integer(c_int), value :: device_num 786 end function omp_target_is_present 787 end interface 788 789 interface 790 function omp_target_memcpy (dst, src, length, dst_offset, & 791 src_offset, dst_device_num, & 792 src_device_num) bind(c) 793 use, intrinsic :: iso_c_binding, only : c_ptr, c_int, c_size_t 794 integer(c_int) :: omp_target_memcpy 795 type(c_ptr), value :: dst, src 796 integer(c_size_t), value :: length, dst_offset, src_offset 797 integer(c_int), value :: dst_device_num, src_device_num 798 end function omp_target_memcpy 799 end interface 800 801 interface 802 function omp_target_memcpy_rect (dst,src,element_size, num_dims, & 803 volume, dst_offsets, src_offsets, & 804 dst_dimensions, src_dimensions, & 805 dst_device_num, src_device_num) & 806 bind(c) 807 use, intrinsic :: iso_c_binding, only : c_ptr, c_int, c_size_t 808 integer(c_int) :: omp_target_memcpy_rect 809 type(c_ptr), value :: dst, src 810 integer(c_size_t), value :: element_size 811 integer(c_int), value :: num_dims, dst_device_num, src_device_num 812 integer(c_size_t), intent(in) :: volume(*), dst_offsets(*), & 813 src_offsets(*), dst_dimensions(*), & 814 src_dimensions(*) 815 end function omp_target_memcpy_rect 816 end interface 817 818 interface 819 function omp_target_associate_ptr (host_ptr, device_ptr, size, & 820 device_offset, device_num) bind(c) 821 use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t, c_int 822 integer(c_int) :: omp_target_associate_ptr 823 type(c_ptr), value :: host_ptr, device_ptr 824 integer(c_size_t), value :: size, device_offset 825 integer(c_int), value :: device_num 826 end function omp_target_associate_ptr 827 end interface 828 829 interface 830 function omp_target_disassociate_ptr (ptr, device_num) bind(c) 831 use, intrinsic :: iso_c_binding, only : c_ptr, c_int 832 integer(c_int) :: omp_target_disassociate_ptr 833 type(c_ptr), value :: ptr 834 integer(c_int), value :: device_num 835 end function omp_target_disassociate_ptr 836 end interface 837 838#if _OPENMP >= 201811 839!GCC$ ATTRIBUTES DEPRECATED :: omp_get_nested, omp_set_nested 840#endif 841 842#if _OPENMP >= 202011 843!GCC$ ATTRIBUTES DEPRECATED :: omp_proc_bind_master, omp_atv_sequential 844#endif 845 846 end module omp_lib 847