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       integer omp_lock_kind, omp_nest_lock_kind, openmp_version
     27       parameter (omp_lock_kind = @OMP_LOCK_KIND@)
     28       parameter (omp_nest_lock_kind = @OMP_NEST_LOCK_KIND@)
     29       integer omp_depend_kind
     30       parameter (omp_depend_kind = @OMP_DEPEND_KIND@)
     31       integer omp_sched_kind
     32       parameter (omp_sched_kind = 4)
     33       integer (omp_sched_kind) omp_sched_static, omp_sched_dynamic
     34       integer (omp_sched_kind) omp_sched_guided, omp_sched_auto
     35       parameter (omp_sched_static = 1)
     36       parameter (omp_sched_dynamic = 2)
     37       parameter (omp_sched_guided = 3)
     38       parameter (omp_sched_auto = 4)
     39       integer omp_proc_bind_kind
     40       parameter (omp_proc_bind_kind = 4)
     41       integer (omp_proc_bind_kind) omp_proc_bind_false
     42       integer (omp_proc_bind_kind) omp_proc_bind_true
     43       integer (omp_proc_bind_kind) omp_proc_bind_primary
     44       integer (omp_proc_bind_kind) omp_proc_bind_master
     45       integer (omp_proc_bind_kind) omp_proc_bind_close
     46       integer (omp_proc_bind_kind) omp_proc_bind_spread
     47       parameter (omp_proc_bind_false = 0)
     48       parameter (omp_proc_bind_true = 1)
     49       parameter (omp_proc_bind_primary = 2)
     50       parameter (omp_proc_bind_master = 2)
     51       parameter (omp_proc_bind_close = 3)
     52       parameter (omp_proc_bind_spread = 4)
     53       integer omp_sync_hint_kind
     54       integer omp_lock_hint_kind
     55       parameter (omp_sync_hint_kind = 4)
     56       parameter (omp_lock_hint_kind = omp_sync_hint_kind)
     57       integer (omp_sync_hint_kind) omp_sync_hint_none
     58       integer (omp_lock_hint_kind) omp_lock_hint_none
     59       integer (omp_sync_hint_kind) omp_sync_hint_uncontended
     60       integer (omp_lock_hint_kind) omp_lock_hint_uncontended
     61       integer (omp_sync_hint_kind) omp_sync_hint_contended
     62       integer (omp_sync_hint_kind) omp_lock_hint_contended
     63       integer (omp_lock_hint_kind) omp_sync_hint_nonspeculative
     64       integer (omp_lock_hint_kind) omp_lock_hint_nonspeculative
     65       integer (omp_sync_hint_kind) omp_sync_hint_speculative
     66       integer (omp_lock_hint_kind) omp_lock_hint_speculative
     67       parameter (omp_sync_hint_none = 0)
     68       parameter (omp_lock_hint_none = 0)
     69       parameter (omp_sync_hint_uncontended = 1)
     70       parameter (omp_lock_hint_uncontended = 1)
     71       parameter (omp_sync_hint_contended = 2)
     72       parameter (omp_lock_hint_contended = 2)
     73       parameter (omp_sync_hint_nonspeculative = 4)
     74       parameter (omp_lock_hint_nonspeculative = 4)
     75       parameter (omp_sync_hint_speculative = 8)
     76       parameter (omp_lock_hint_speculative = 8)
     77       parameter (openmp_version = 201511)
     78       integer omp_pause_resource_kind
     79       parameter (omp_pause_resource_kind = 4)
     80       integer (omp_pause_resource_kind) omp_pause_soft
     81       integer (omp_pause_resource_kind) omp_pause_hard
     82       parameter (omp_pause_soft = 1)
     83       parameter (omp_pause_hard = 2)
     84 
     85       integer omp_allocator_handle_kind, omp_alloctrait_key_kind
     86       integer omp_alloctrait_val_kind, omp_memspace_handle_kind
     87       integer omp_event_handle_kind
     88       parameter (omp_allocator_handle_kind = @INTPTR_T_KIND@)
     89       parameter (omp_alloctrait_key_kind = 4)
     90       parameter (omp_alloctrait_val_kind = @INTPTR_T_KIND@)
     91       parameter (omp_memspace_handle_kind = @INTPTR_T_KIND@)
     92       parameter (omp_event_handle_kind = @INTPTR_T_KIND@)
     93       integer (omp_alloctrait_key_kind) omp_atk_sync_hint
     94       integer (omp_alloctrait_key_kind) omp_atk_alignment
     95       integer (omp_alloctrait_key_kind) omp_atk_access
     96       integer (omp_alloctrait_key_kind) omp_atk_pool_size
     97       integer (omp_alloctrait_key_kind) omp_atk_fallback
     98       integer (omp_alloctrait_key_kind) omp_atk_fb_data
     99       integer (omp_alloctrait_key_kind) omp_atk_pinned
    100       integer (omp_alloctrait_key_kind) omp_atk_partition
    101       parameter (omp_atk_sync_hint = 1)
    102       parameter (omp_atk_alignment = 2)
    103       parameter (omp_atk_access = 3)
    104       parameter (omp_atk_pool_size = 4)
    105       parameter (omp_atk_fallback = 5)
    106       parameter (omp_atk_fb_data = 6)
    107       parameter (omp_atk_pinned = 7)
    108       parameter (omp_atk_partition = 8)
    109       integer (omp_alloctrait_val_kind) omp_atv_false
    110       integer (omp_alloctrait_val_kind) omp_atv_true
    111       integer (omp_alloctrait_val_kind) omp_atv_default
    112       integer (omp_alloctrait_val_kind) omp_atv_contended
    113       integer (omp_alloctrait_val_kind) omp_atv_uncontended
    114       integer (omp_alloctrait_val_kind) omp_atv_serialized
    115       integer (omp_alloctrait_val_kind) omp_atv_sequential
    116       integer (omp_alloctrait_val_kind) omp_atv_private
    117       integer (omp_alloctrait_val_kind) omp_atv_all
    118       integer (omp_alloctrait_val_kind) omp_atv_thread
    119       integer (omp_alloctrait_val_kind) omp_atv_pteam
    120       integer (omp_alloctrait_val_kind) omp_atv_cgroup
    121       integer (omp_alloctrait_val_kind) omp_atv_default_mem_fb
    122       integer (omp_alloctrait_val_kind) omp_atv_null_fb
    123       integer (omp_alloctrait_val_kind) omp_atv_abort_fb
    124       integer (omp_alloctrait_val_kind) omp_atv_allocator_fb
    125       integer (omp_alloctrait_val_kind) omp_atv_environment
    126       integer (omp_alloctrait_val_kind) omp_atv_nearest
    127       integer (omp_alloctrait_val_kind) omp_atv_blocked
    128       integer (omp_alloctrait_val_kind) omp_atv_interleaved
    129       parameter (omp_atv_default = -1)
    130       parameter (omp_atv_false = 0)
    131       parameter (omp_atv_true = 1)
    132       parameter (omp_atv_contended = 3)
    133       parameter (omp_atv_uncontended = 4)
    134       parameter (omp_atv_serialized = 5)
    135       parameter (omp_atv_sequential = omp_atv_serialized)
    136       parameter (omp_atv_private = 6)
    137       parameter (omp_atv_all = 7)
    138       parameter (omp_atv_thread = 8)
    139       parameter (omp_atv_pteam = 9)
    140       parameter (omp_atv_cgroup = 10)
    141       parameter (omp_atv_default_mem_fb = 11)
    142       parameter (omp_atv_null_fb = 12)
    143       parameter (omp_atv_abort_fb = 13)
    144       parameter (omp_atv_allocator_fb = 14)
    145       parameter (omp_atv_environment = 15)
    146       parameter (omp_atv_nearest = 16)
    147       parameter (omp_atv_blocked = 17)
    148       parameter (omp_atv_interleaved = 18)
    149       integer (omp_allocator_handle_kind) omp_null_allocator
    150       integer (omp_allocator_handle_kind) omp_default_mem_alloc
    151       integer (omp_allocator_handle_kind) omp_large_cap_mem_alloc
    152       integer (omp_allocator_handle_kind) omp_const_mem_alloc
    153       integer (omp_allocator_handle_kind) omp_high_bw_mem_alloc
    154       integer (omp_allocator_handle_kind) omp_low_lat_mem_alloc
    155       integer (omp_allocator_handle_kind) omp_cgroup_mem_alloc
    156       integer (omp_allocator_handle_kind) omp_pteam_mem_alloc
    157       integer (omp_allocator_handle_kind) omp_thread_mem_alloc
    158       parameter (omp_null_allocator = 0)
    159       parameter (omp_default_mem_alloc = 1)
    160       parameter (omp_large_cap_mem_alloc = 2)
    161       parameter (omp_const_mem_alloc = 3)
    162       parameter (omp_high_bw_mem_alloc = 4)
    163       parameter (omp_low_lat_mem_alloc = 5)
    164       parameter (omp_cgroup_mem_alloc = 6)
    165       parameter (omp_pteam_mem_alloc = 7)
    166       parameter (omp_thread_mem_alloc = 8)
    167       integer (omp_memspace_handle_kind) omp_default_mem_space
    168       integer (omp_memspace_handle_kind) omp_large_cap_mem_space
    169       integer (omp_memspace_handle_kind) omp_const_mem_space
    170       integer (omp_memspace_handle_kind) omp_high_bw_mem_space
    171       integer (omp_memspace_handle_kind) omp_low_lat_mem_space
    172       parameter (omp_default_mem_space = 0)
    173       parameter (omp_large_cap_mem_space = 1)
    174       parameter (omp_const_mem_space = 2)
    175       parameter (omp_high_bw_mem_space = 3)
    176       parameter (omp_low_lat_mem_space = 4)
    177 
    178       type omp_alloctrait
    179         integer (omp_alloctrait_key_kind) key
    180         integer (omp_alloctrait_val_kind) value
    181       end type omp_alloctrait
    182 
    183       external omp_init_lock, omp_init_nest_lock
    184       external omp_init_lock_with_hint
    185       external omp_init_nest_lock_with_hint
    186       external omp_destroy_lock, omp_destroy_nest_lock
    187       external omp_set_lock, omp_set_nest_lock
    188       external omp_unset_lock, omp_unset_nest_lock
    189       external omp_set_dynamic, omp_set_nested
    190       external omp_set_num_threads
    191 
    192       external omp_get_dynamic, omp_get_nested
    193       logical(4) omp_get_dynamic, omp_get_nested
    194       external omp_test_lock, omp_in_parallel
    195       logical(4) omp_test_lock, omp_in_parallel
    196 
    197       external omp_get_max_threads, omp_get_num_procs
    198       integer(4) omp_get_max_threads, omp_get_num_procs
    199       external omp_get_num_threads, omp_get_thread_num
    200       integer(4) omp_get_num_threads, omp_get_thread_num
    201       external omp_test_nest_lock
    202       integer(4) omp_test_nest_lock
    203 
    204       external omp_get_wtick, omp_get_wtime
    205       double precision omp_get_wtick, omp_get_wtime
    206 
    207       external omp_set_schedule, omp_get_schedule
    208       external omp_get_thread_limit, omp_set_max_active_levels
    209       external omp_get_max_active_levels, omp_get_level
    210       external omp_get_ancestor_thread_num, omp_get_team_size
    211       external omp_get_active_level
    212       external omp_get_supported_active_levels
    213       integer(4) omp_get_thread_limit, omp_get_max_active_levels
    214       integer(4) omp_get_level, omp_get_ancestor_thread_num
    215       integer(4) omp_get_team_size, omp_get_active_level
    216       integer(4) omp_get_supported_active_levels
    217 
    218       external omp_in_final
    219       logical(4) omp_in_final
    220 
    221       external omp_get_cancellation
    222       logical(4) omp_get_cancellation
    223 
    224       external omp_get_proc_bind
    225       integer(omp_proc_bind_kind) omp_get_proc_bind
    226 
    227       integer(4) omp_get_num_places
    228       external omp_get_num_places
    229       integer(4) omp_get_place_num_procs
    230       external omp_get_place_num_procs
    231       external omp_get_place_proc_ids
    232       integer(4) omp_get_place_num
    233       external omp_get_place_num
    234       integer(4) omp_get_partition_num_places
    235       external omp_get_partition_num_places
    236       external omp_get_partition_place_nums
    237 
    238       external omp_set_default_device, omp_get_default_device
    239       external omp_get_num_devices, omp_get_num_teams
    240       external omp_get_team_num
    241       integer(4) omp_get_default_device, omp_get_num_devices
    242       integer(4) omp_get_num_teams, omp_get_team_num
    243 
    244       external omp_is_initial_device
    245       logical(4) omp_is_initial_device
    246       external omp_get_initial_device
    247       integer(4) omp_get_initial_device
    248 
    249       external omp_get_device_num
    250       integer(4) omp_get_device_num
    251 
    252       external omp_get_max_task_priority
    253       integer(4) omp_get_max_task_priority
    254 
    255       external omp_set_num_teams, omp_set_teams_thread_limit
    256       external omp_get_max_teams, omp_get_teams_thread_limit
    257       integer(4) omp_get_max_teams, omp_get_teams_thread_limit
    258 
    259       external omp_fulfill_event
    260 
    261       external omp_set_affinity_format, omp_get_affinity_format
    262       external omp_display_affinity, omp_capture_affinity
    263       integer(4) omp_get_affinity_format
    264       integer(4) omp_capture_affinity
    265 
    266       external omp_pause_resource, omp_pause_resource_all
    267       integer(4) omp_pause_resource
    268       integer(4) omp_pause_resource_all
    269 
    270       external omp_init_allocator
    271       integer (omp_allocator_handle_kind) omp_init_allocator
    272       external omp_destroy_allocator
    273       external omp_set_default_allocator
    274       external omp_get_default_allocator
    275       integer (omp_allocator_handle_kind) omp_get_default_allocator
    276 
    277       external omp_display_env
    278 
    279       interface
    280         function omp_alloc (size, allocator) bind(c)
    281           use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t
    282           use, intrinsic :: omp_lib_kinds
    283           type(c_ptr) :: omp_alloc
    284           integer(c_size_t), value :: size
    285           integer(omp_allocator_handle_kind), value :: allocator
    286         end function omp_alloc
    287       end interface
    288 
    289       interface
    290         function omp_aligned_alloc (alignment, size, allocator) bind(c)
    291           use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t
    292           use, intrinsic :: omp_lib_kinds
    293           type(c_ptr) :: omp_aligned_alloc
    294           integer(c_size_t), value :: alignment, size
    295           integer(omp_allocator_handle_kind), value :: allocator
    296         end function omp_aligned_alloc
    297       end interface
    298 
    299       interface
    300         subroutine omp_free(ptr, allocator) bind(c)
    301           use, intrinsic :: iso_c_binding, only : c_ptr
    302           use, intrinsic :: omp_lib_kinds
    303           type(c_ptr), value :: ptr
    304           integer(omp_allocator_handle_kind), value :: allocator
    305         end subroutine omp_free
    306       end interface
    307 
    308       interface
    309         function omp_calloc (nmemb, size, allocator) bind(c)
    310           use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t
    311           use, intrinsic :: omp_lib_kinds
    312           type(c_ptr) :: omp_calloc
    313           integer(c_size_t), value :: nmemb, size
    314           integer(omp_allocator_handle_kind), value :: allocator
    315         end function omp_calloc
    316       end interface
    317 
    318       interface
    319         function omp_aligned_calloc (alignment, nmemb, size, allocator)   &
    320      &      bind(c)
    321           use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t
    322           use, intrinsic :: omp_lib_kinds
    323           type(c_ptr) :: omp_aligned_calloc
    324           integer(c_size_t), value :: alignment, nmemb, size
    325           integer(omp_allocator_handle_kind), value :: allocator
    326         end function omp_aligned_calloc
    327       end interface
    328 
    329       interface
    330         function omp_realloc (ptr, size, allocator, free_allocator)      &
    331      &      bind(c)
    332           use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t
    333           use, intrinsic :: omp_lib_kinds
    334           type(c_ptr) :: omp_realloc
    335           type(c_ptr), value :: ptr
    336           integer(c_size_t), value :: size
    337           integer(omp_allocator_handle_kind), value :: allocator
    338           integer(omp_allocator_handle_kind), value :: free_allocator
    339         end function omp_realloc
    340       end interface
    341 
    342       interface
    343         function omp_target_alloc (size, device_num) bind(c)
    344           use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t, c_int
    345           type(c_ptr) :: omp_target_alloc
    346           integer(c_size_t), value :: size
    347           integer(c_int), value :: device_num
    348         end function omp_target_alloc
    349       end interface
    350 
    351       interface
    352         subroutine omp_target_free (device_ptr, device_num) bind(c)
    353           use, intrinsic :: iso_c_binding, only : c_ptr, c_int
    354           type(c_ptr), value :: device_ptr
    355           integer(c_int), value :: device_num
    356         end subroutine omp_target_free
    357       end interface
    358 
    359       interface
    360         function omp_target_is_present (ptr, device_num) bind(c)
    361           use, intrinsic :: iso_c_binding, only : c_ptr, c_int
    362           integer(c_int) :: omp_target_is_present
    363           type(c_ptr), value :: ptr
    364           integer(c_int), value :: device_num
    365         end function omp_target_is_present
    366       end interface
    367 
    368       interface
    369         function omp_target_memcpy (dst, src, length, dst_offset,          &
    370      &                              src_offset, dst_device_num,            &
    371      &                              src_device_num) bind(c)
    372           use, intrinsic :: iso_c_binding, only : c_ptr, c_int, c_size_t
    373           integer(c_int) :: omp_target_memcpy
    374           type(c_ptr), value :: dst, src
    375           integer(c_size_t), value :: length, dst_offset, src_offset
    376           integer(c_int), value :: dst_device_num, src_device_num
    377         end function omp_target_memcpy
    378       end interface
    379 
    380       interface
    381         function omp_target_memcpy_rect (dst,src,element_size, num_dims,   &
    382      &                                   volume, dst_offsets,              &
    383      &                                   src_offsets, dst_dimensions,      &
    384      &                                   src_dimensions, dst_device_num,   &
    385      &                                   src_device_num) bind(c)
    386           use, intrinsic :: iso_c_binding, only : c_ptr, c_int, c_size_t
    387           integer(c_int) :: omp_target_memcpy_rect
    388           type(c_ptr), value :: dst, src
    389           integer(c_size_t), value :: element_size
    390           integer(c_int), value :: num_dims
    391           integer(c_int), value :: dst_device_num, src_device_num
    392           integer(c_size_t), intent(in) :: volume(*), dst_offsets(*)
    393           integer(c_size_t), intent(in) :: src_offsets(*)
    394           integer(c_size_t), intent(in) :: dst_dimensions(*)
    395           integer(c_size_t), intent(in) :: src_dimensions(*)
    396         end function omp_target_memcpy_rect
    397       end interface
    398 
    399       interface
    400         function omp_target_associate_ptr (host_ptr, device_ptr, size,     &
    401      &                                     device_offset, device_num)      &
    402      &      bind(c)
    403           use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t, c_int
    404           integer(c_int) :: omp_target_associate_ptr
    405           type(c_ptr), value :: host_ptr, device_ptr
    406           integer(c_size_t), value :: size, device_offset
    407           integer(c_int), value :: device_num
    408         end function omp_target_associate_ptr
    409       end interface
    410 
    411       interface
    412         function omp_target_disassociate_ptr (ptr, device_num) bind(c)
    413           use, intrinsic :: iso_c_binding, only : c_ptr, c_int
    414           integer(c_int) :: omp_target_disassociate_ptr
    415           type(c_ptr), value :: ptr
    416           integer(c_int), value :: device_num
    417         end function omp_target_disassociate_ptr
    418       end interface
    419