diff options
author | Tobias Burnus <tobias@codesourcery.com> | 2020-07-15 08:33:20 +0200 |
---|---|---|
committer | Tobias Burnus <tobias@codesourcery.com> | 2020-07-15 08:33:20 +0200 |
commit | fff15bad1ab571906c37b88380431768d917dcb0 (patch) | |
tree | db37c1397b78b5430555ef4c30fa39d6d288551c /libgomp/omp_lib.f90.in | |
parent | 8ca07a3072438fa5e76f2b2cea9e51a98760a86f (diff) | |
download | gcc-fff15bad1ab571906c37b88380431768d917dcb0.tar.gz |
libgomp: Add Fortran routine support for allocators
libgomp/ChangeLog:
* allocator.c: Add ialias for omp_init_allocator and
omp_destroy_allocator.
* configure.ac: Set INTPTR_T_KIND.
* configure: Regenerate.
* Makefile.in: Regenerate.
* testsuite/Makefile.in: Regenerate.
* fortran.c (omp_init_allocator_, omp_destroy_allocator_,
omp_set_default_allocator_, omp_get_default_allocator_): New
functions and ialias_redirect.
* icv.c: Add ialias for omp_set_default_allocator and
omp_get_default_allocator.
* libgomp.map (OMP_5.0.1): Add omp_init_allocator_,
omp_destroy_allocator_, omp_set_default_allocator_ and
omp_get_default_allocator_.
* omp_lib.f90.in: Add allocator traits parameters, declare
allocator routines and add related kind parameters.
* omp_lib.h.in: Likewise.
* testsuite/libgomp.c-c++-common/alloc-2.c: Fix sizeof.
* testsuite/libgomp.fortran/alloc-1.F90: New test.
* testsuite/libgomp.fortran/alloc-2.F90: New test.
* testsuite/libgomp.fortran/alloc-3.F: New test.
* testsuite/libgomp.fortran/alloc-4.f90: New test.
* testsuite/libgomp.fortran/alloc-5.f90: New test.
Diffstat (limited to 'libgomp/omp_lib.f90.in')
-rw-r--r-- | libgomp/omp_lib.f90.in | 138 |
1 files changed, 138 insertions, 0 deletions
diff --git a/libgomp/omp_lib.f90.in b/libgomp/omp_lib.f90.in index fdbc0f4657d..666b5152a5f 100644 --- a/libgomp/omp_lib.f90.in +++ b/libgomp/omp_lib.f90.in @@ -24,13 +24,19 @@ ! <http://www.gnu.org/licenses/>. module omp_lib_kinds + use iso_c_binding, only: c_int, c_intptr_t implicit none + private :: c_int, c_intptr_t integer, parameter :: omp_lock_kind = @OMP_LOCK_KIND@ integer, parameter :: omp_nest_lock_kind = @OMP_NEST_LOCK_KIND@ integer, parameter :: omp_sched_kind = 4 integer, parameter :: omp_proc_bind_kind = 4 integer, parameter :: omp_lock_hint_kind = 4 integer, parameter :: omp_pause_resource_kind = 4 + integer, parameter :: omp_allocator_handle_kind = c_intptr_t + integer, parameter :: omp_alloctrait_key_kind = c_int + integer, parameter :: omp_alloctrait_val_kind = c_intptr_t + integer, parameter :: omp_memspace_handle_kind = c_intptr_t integer (omp_sched_kind), parameter :: omp_sched_static = 1 integer (omp_sched_kind), parameter :: omp_sched_dynamic = 2 integer (omp_sched_kind), parameter :: omp_sched_guided = 3 @@ -59,6 +65,95 @@ parameter :: omp_pause_soft = 1 integer (kind=omp_pause_resource_kind), & parameter :: omp_pause_hard = 2 + integer (kind=omp_alloctrait_key_kind), & + parameter :: omp_atk_sync_hint = 1 + integer (kind=omp_alloctrait_key_kind), & + parameter :: omp_atk_alignment = 2 + integer (kind=omp_alloctrait_key_kind), & + parameter :: omp_atk_access = 3 + integer (kind=omp_alloctrait_key_kind), & + parameter :: omp_atk_pool_size = 4 + integer (kind=omp_alloctrait_key_kind), & + parameter :: omp_atk_fallback = 5 + integer (kind=omp_alloctrait_key_kind), & + parameter :: omp_atk_fb_data = 6 + integer (kind=omp_alloctrait_key_kind), & + parameter :: omp_atk_pinned = 7 + integer (kind=omp_alloctrait_key_kind), & + parameter :: omp_atk_partition = 8 + integer (kind=omp_alloctrait_val_kind), & + parameter :: omp_atv_default = -1 + integer (kind=omp_alloctrait_val_kind), & + parameter :: omp_atv_false = 0 + integer (kind=omp_alloctrait_val_kind), & + parameter :: omp_atv_true = 1 + integer (kind=omp_alloctrait_val_kind), & + parameter :: omp_atv_contended = 3 + integer (kind=omp_alloctrait_val_kind), & + parameter :: omp_atv_uncontended = 4 + integer (kind=omp_alloctrait_val_kind), & + parameter :: omp_atv_serialized = 5 + integer (kind=omp_alloctrait_val_kind), & + parameter :: omp_atv_sequential = omp_atv_serialized + integer (kind=omp_alloctrait_val_kind), & + parameter :: omp_atv_private = 6 + integer (kind=omp_alloctrait_val_kind), & + parameter :: omp_atv_all = 7 + integer (kind=omp_alloctrait_val_kind), & + parameter :: omp_atv_thread = 8 + integer (kind=omp_alloctrait_val_kind), & + parameter :: omp_atv_pteam = 9 + integer (kind=omp_alloctrait_val_kind), & + parameter :: omp_atv_cgroup = 10 + integer (kind=omp_alloctrait_val_kind), & + parameter :: omp_atv_default_mem_fb = 11 + integer (kind=omp_alloctrait_val_kind), & + parameter :: omp_atv_null_fb = 12 + integer (kind=omp_alloctrait_val_kind), & + parameter :: omp_atv_abort_fb = 13 + integer (kind=omp_alloctrait_val_kind), & + parameter :: omp_atv_allocator_fb = 14 + integer (kind=omp_alloctrait_val_kind), & + parameter :: omp_atv_environment = 15 + integer (kind=omp_alloctrait_val_kind), & + parameter :: omp_atv_nearest = 16 + integer (kind=omp_alloctrait_val_kind), & + parameter :: omp_atv_blocked = 17 + integer (kind=omp_alloctrait_val_kind), & + parameter :: omp_atv_interleaved = 18 + integer (kind=omp_allocator_handle_kind), & + parameter :: omp_null_allocator = 0 + integer (kind=omp_allocator_handle_kind), & + parameter :: omp_default_mem_alloc = 1 + integer (kind=omp_allocator_handle_kind), & + parameter :: omp_large_cap_mem_alloc = 2 + integer (kind=omp_allocator_handle_kind), & + parameter :: omp_const_mem_alloc = 3 + integer (kind=omp_allocator_handle_kind), & + parameter :: omp_high_bw_mem_alloc = 4 + integer (kind=omp_allocator_handle_kind), & + parameter :: omp_low_lat_mem_alloc = 5 + integer (kind=omp_allocator_handle_kind), & + parameter :: omp_cgroup_mem_alloc = 6 + integer (kind=omp_allocator_handle_kind), & + parameter :: omp_pteam_mem_alloc = 7 + integer (kind=omp_allocator_handle_kind), & + parameter :: omp_thread_mem_alloc = 8 + integer (omp_memspace_handle_kind), & + parameter :: omp_default_mem_space = 0 + integer (omp_memspace_handle_kind), & + parameter :: omp_large_cap_mem_space = 1 + integer (omp_memspace_handle_kind), & + parameter :: omp_const_mem_space = 2 + integer (omp_memspace_handle_kind), & + parameter :: omp_high_bw_mem_space = 3 + integer (omp_memspace_handle_kind), & + parameter :: omp_low_lat_mem_space = 4 + + type omp_alloctrait + integer (kind=omp_alloctrait_key_kind) key + integer (kind=omp_alloctrait_val_kind) value + end type omp_alloctrait end module module omp_lib @@ -484,4 +579,47 @@ end function end interface + interface omp_init_allocator + function omp_init_allocator (memspace, ntraits, traits) + use omp_lib_kinds + integer (kind=omp_allocator_handle_kind) omp_init_allocator + integer (kind=omp_memspace_handle_kind), & + intent(in) :: memspace + integer (4), intent(in) :: ntraits + type (omp_alloctrait), intent(in) :: traits(*) + end function + function omp_init_allocator_8 (memspace, ntraits, traits) + use omp_lib_kinds + integer (kind=omp_allocator_handle_kind) omp_init_allocator_8 + integer (kind=omp_memspace_handle_kind), & + intent(in) :: memspace + integer (8), intent(in) :: ntraits + type (omp_alloctrait), intent(in) :: traits(*) + end function + end interface + + interface + subroutine omp_destroy_allocator (allocator) + use omp_lib_kinds + integer (kind=omp_allocator_handle_kind), & + intent(in) :: allocator + end subroutine + end interface + + interface + subroutine omp_set_default_allocator (allocator) + use omp_lib_kinds + integer (kind=omp_allocator_handle_kind), & + intent(in) :: allocator + end subroutine + end interface + + interface + function omp_get_default_allocator () + use omp_lib_kinds + integer (kind=omp_allocator_handle_kind) & + omp_get_default_allocator + end function + end interface + end module omp_lib |