Home | History | Annotate | Line # | Download | only in libgomp
      1 !  Copyright (C) 2005-2022 Free Software Foundation, Inc.
      2 !  Contributed by Jakub Jelinek <jakub (a] 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