10b57cec5SDimitry Andric/* 20b57cec5SDimitry Andric * include/omp.h.var 30b57cec5SDimitry Andric */ 40b57cec5SDimitry Andric 50b57cec5SDimitry Andric 60b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 70b57cec5SDimitry Andric// 80b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 90b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 100b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 110b57cec5SDimitry Andric// 120b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 130b57cec5SDimitry Andric 140b57cec5SDimitry Andric 150b57cec5SDimitry Andric#ifndef __OMP_H 160b57cec5SDimitry Andric# define __OMP_H 170b57cec5SDimitry Andric 180b57cec5SDimitry Andric# include <stdlib.h> 190b57cec5SDimitry Andric# include <stdint.h> 200b57cec5SDimitry Andric 210b57cec5SDimitry Andric# define KMP_VERSION_MAJOR @LIBOMP_VERSION_MAJOR@ 220b57cec5SDimitry Andric# define KMP_VERSION_MINOR @LIBOMP_VERSION_MINOR@ 230b57cec5SDimitry Andric# define KMP_VERSION_BUILD @LIBOMP_VERSION_BUILD@ 240b57cec5SDimitry Andric# define KMP_BUILD_DATE "@LIBOMP_BUILD_DATE@" 250b57cec5SDimitry Andric 260b57cec5SDimitry Andric# ifdef __cplusplus 270b57cec5SDimitry Andric extern "C" { 280b57cec5SDimitry Andric# endif 290b57cec5SDimitry Andric 300b57cec5SDimitry Andric# define omp_set_affinity_format ompc_set_affinity_format 310b57cec5SDimitry Andric# define omp_get_affinity_format ompc_get_affinity_format 320b57cec5SDimitry Andric# define omp_display_affinity ompc_display_affinity 330b57cec5SDimitry Andric# define omp_capture_affinity ompc_capture_affinity 340b57cec5SDimitry Andric 350b57cec5SDimitry Andric# if defined(_WIN32) 360b57cec5SDimitry Andric# define __KAI_KMPC_CONVENTION __cdecl 370b57cec5SDimitry Andric# ifndef __KMP_IMP 380b57cec5SDimitry Andric# define __KMP_IMP __declspec(dllimport) 390b57cec5SDimitry Andric# endif 400b57cec5SDimitry Andric# else 410b57cec5SDimitry Andric# define __KAI_KMPC_CONVENTION 420b57cec5SDimitry Andric# ifndef __KMP_IMP 430b57cec5SDimitry Andric# define __KMP_IMP 440b57cec5SDimitry Andric# endif 450b57cec5SDimitry Andric# endif 460b57cec5SDimitry Andric 470b57cec5SDimitry Andric /* schedule kind constants */ 480b57cec5SDimitry Andric typedef enum omp_sched_t { 490b57cec5SDimitry Andric omp_sched_static = 1, 500b57cec5SDimitry Andric omp_sched_dynamic = 2, 510b57cec5SDimitry Andric omp_sched_guided = 3, 520b57cec5SDimitry Andric omp_sched_auto = 4, 530b57cec5SDimitry Andric omp_sched_monotonic = 0x80000000 540b57cec5SDimitry Andric } omp_sched_t; 550b57cec5SDimitry Andric 560b57cec5SDimitry Andric /* set API functions */ 570b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_set_num_threads (int); 580b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_set_dynamic (int); 590b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_set_nested (int); 600b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_set_max_active_levels (int); 610b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_set_schedule (omp_sched_t, int); 620b57cec5SDimitry Andric 630b57cec5SDimitry Andric /* query API functions */ 640b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_num_threads (void); 650b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_dynamic (void); 660b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_nested (void); 670b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_max_threads (void); 680b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_thread_num (void); 690b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_num_procs (void); 700b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_in_parallel (void); 710b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_in_final (void); 720b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_active_level (void); 730b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_level (void); 740b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_ancestor_thread_num (int); 750b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_team_size (int); 760b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_thread_limit (void); 770b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_max_active_levels (void); 780b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_get_schedule (omp_sched_t *, int *); 790b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_max_task_priority (void); 800b57cec5SDimitry Andric 810b57cec5SDimitry Andric /* lock API functions */ 820b57cec5SDimitry Andric typedef struct omp_lock_t { 830b57cec5SDimitry Andric void * _lk; 840b57cec5SDimitry Andric } omp_lock_t; 850b57cec5SDimitry Andric 860b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_init_lock (omp_lock_t *); 870b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_set_lock (omp_lock_t *); 880b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_unset_lock (omp_lock_t *); 890b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_destroy_lock (omp_lock_t *); 900b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_test_lock (omp_lock_t *); 910b57cec5SDimitry Andric 920b57cec5SDimitry Andric /* nested lock API functions */ 930b57cec5SDimitry Andric typedef struct omp_nest_lock_t { 940b57cec5SDimitry Andric void * _lk; 950b57cec5SDimitry Andric } omp_nest_lock_t; 960b57cec5SDimitry Andric 970b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_init_nest_lock (omp_nest_lock_t *); 980b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_set_nest_lock (omp_nest_lock_t *); 990b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_unset_nest_lock (omp_nest_lock_t *); 1000b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_destroy_nest_lock (omp_nest_lock_t *); 1010b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_test_nest_lock (omp_nest_lock_t *); 1020b57cec5SDimitry Andric 1030b57cec5SDimitry Andric /* OpenMP 5.0 Synchronization hints*/ 1040b57cec5SDimitry Andric typedef enum omp_sync_hint_t { 1050b57cec5SDimitry Andric omp_sync_hint_none = 0, 1060b57cec5SDimitry Andric omp_lock_hint_none = omp_sync_hint_none, 1070b57cec5SDimitry Andric omp_sync_hint_uncontended = 1, 1080b57cec5SDimitry Andric omp_lock_hint_uncontended = omp_sync_hint_uncontended, 1090b57cec5SDimitry Andric omp_sync_hint_contended = (1<<1), 1100b57cec5SDimitry Andric omp_lock_hint_contended = omp_sync_hint_contended, 1110b57cec5SDimitry Andric omp_sync_hint_nonspeculative = (1<<2), 1120b57cec5SDimitry Andric omp_lock_hint_nonspeculative = omp_sync_hint_nonspeculative, 1130b57cec5SDimitry Andric omp_sync_hint_speculative = (1<<3), 1140b57cec5SDimitry Andric omp_lock_hint_speculative = omp_sync_hint_speculative, 1150b57cec5SDimitry Andric kmp_lock_hint_hle = (1<<16), 1160b57cec5SDimitry Andric kmp_lock_hint_rtm = (1<<17), 1170b57cec5SDimitry Andric kmp_lock_hint_adaptive = (1<<18) 1180b57cec5SDimitry Andric } omp_sync_hint_t; 1190b57cec5SDimitry Andric 1200b57cec5SDimitry Andric /* lock hint type for dynamic user lock */ 1210b57cec5SDimitry Andric typedef omp_sync_hint_t omp_lock_hint_t; 1220b57cec5SDimitry Andric 1230b57cec5SDimitry Andric /* hinted lock initializers */ 1240b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_init_lock_with_hint(omp_lock_t *, omp_lock_hint_t); 1250b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_init_nest_lock_with_hint(omp_nest_lock_t *, omp_lock_hint_t); 1260b57cec5SDimitry Andric 1270b57cec5SDimitry Andric /* time API functions */ 1280b57cec5SDimitry Andric extern double __KAI_KMPC_CONVENTION omp_get_wtime (void); 1290b57cec5SDimitry Andric extern double __KAI_KMPC_CONVENTION omp_get_wtick (void); 1300b57cec5SDimitry Andric 1310b57cec5SDimitry Andric /* OpenMP 4.0 */ 1320b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_default_device (void); 1330b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_set_default_device (int); 1340b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_is_initial_device (void); 1350b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_num_devices (void); 1360b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_num_teams (void); 1370b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_team_num (void); 1380b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_cancellation (void); 1390b57cec5SDimitry Andric 1400b57cec5SDimitry Andric /* OpenMP 4.5 */ 1410b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_initial_device (void); 1420b57cec5SDimitry Andric extern void* __KAI_KMPC_CONVENTION omp_target_alloc(size_t, int); 1430b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_target_free(void *, int); 1440b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_target_is_present(void *, int); 1450b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_target_memcpy(void *, void *, size_t, size_t, size_t, int, int); 1460b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_target_memcpy_rect(void *, void *, size_t, int, const size_t *, 1470b57cec5SDimitry Andric const size_t *, const size_t *, const size_t *, const size_t *, int, int); 1480b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_target_associate_ptr(void *, void *, size_t, size_t, int); 1490b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_target_disassociate_ptr(void *, int); 1500b57cec5SDimitry Andric 1510b57cec5SDimitry Andric /* OpenMP 5.0 */ 1520b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_device_num (void); 1530b57cec5SDimitry Andric typedef void * omp_depend_t; 1540b57cec5SDimitry Andric 1550b57cec5SDimitry Andric /* kmp API functions */ 1560b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION kmp_get_stacksize (void); 1570b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_set_stacksize (int); 1580b57cec5SDimitry Andric extern size_t __KAI_KMPC_CONVENTION kmp_get_stacksize_s (void); 1590b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_set_stacksize_s (size_t); 1600b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION kmp_get_blocktime (void); 1610b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION kmp_get_library (void); 1620b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_set_blocktime (int); 1630b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_set_library (int); 1640b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_set_library_serial (void); 1650b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_set_library_turnaround (void); 1660b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_set_library_throughput (void); 1670b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_set_defaults (char const *); 1680b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_set_disp_num_buffers (int); 1690b57cec5SDimitry Andric 1700b57cec5SDimitry Andric /* Intel affinity API */ 1710b57cec5SDimitry Andric typedef void * kmp_affinity_mask_t; 1720b57cec5SDimitry Andric 1730b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION kmp_set_affinity (kmp_affinity_mask_t *); 1740b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION kmp_get_affinity (kmp_affinity_mask_t *); 1750b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION kmp_get_affinity_max_proc (void); 1760b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_create_affinity_mask (kmp_affinity_mask_t *); 1770b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_destroy_affinity_mask (kmp_affinity_mask_t *); 1780b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION kmp_set_affinity_mask_proc (int, kmp_affinity_mask_t *); 1790b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION kmp_unset_affinity_mask_proc (int, kmp_affinity_mask_t *); 1800b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION kmp_get_affinity_mask_proc (int, kmp_affinity_mask_t *); 1810b57cec5SDimitry Andric 1820b57cec5SDimitry Andric /* OpenMP 4.0 affinity API */ 1830b57cec5SDimitry Andric typedef enum omp_proc_bind_t { 1840b57cec5SDimitry Andric omp_proc_bind_false = 0, 1850b57cec5SDimitry Andric omp_proc_bind_true = 1, 1860b57cec5SDimitry Andric omp_proc_bind_master = 2, 1870b57cec5SDimitry Andric omp_proc_bind_close = 3, 1880b57cec5SDimitry Andric omp_proc_bind_spread = 4 1890b57cec5SDimitry Andric } omp_proc_bind_t; 1900b57cec5SDimitry Andric 1910b57cec5SDimitry Andric extern omp_proc_bind_t __KAI_KMPC_CONVENTION omp_get_proc_bind (void); 1920b57cec5SDimitry Andric 1930b57cec5SDimitry Andric /* OpenMP 4.5 affinity API */ 1940b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_num_places (void); 1950b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_place_num_procs (int); 1960b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_get_place_proc_ids (int, int *); 1970b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_place_num (void); 1980b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_partition_num_places (void); 1990b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_get_partition_place_nums (int *); 2000b57cec5SDimitry Andric 2010b57cec5SDimitry Andric extern void * __KAI_KMPC_CONVENTION kmp_malloc (size_t); 2020b57cec5SDimitry Andric extern void * __KAI_KMPC_CONVENTION kmp_aligned_malloc (size_t, size_t); 2030b57cec5SDimitry Andric extern void * __KAI_KMPC_CONVENTION kmp_calloc (size_t, size_t); 2040b57cec5SDimitry Andric extern void * __KAI_KMPC_CONVENTION kmp_realloc (void *, size_t); 2050b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_free (void *); 2060b57cec5SDimitry Andric 2070b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_set_warnings_on(void); 2080b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_set_warnings_off(void); 2090b57cec5SDimitry Andric 2100b57cec5SDimitry Andric /* OpenMP 5.0 Tool Control */ 2110b57cec5SDimitry Andric typedef enum omp_control_tool_result_t { 2120b57cec5SDimitry Andric omp_control_tool_notool = -2, 2130b57cec5SDimitry Andric omp_control_tool_nocallback = -1, 2140b57cec5SDimitry Andric omp_control_tool_success = 0, 2150b57cec5SDimitry Andric omp_control_tool_ignored = 1 2160b57cec5SDimitry Andric } omp_control_tool_result_t; 2170b57cec5SDimitry Andric 2180b57cec5SDimitry Andric typedef enum omp_control_tool_t { 2190b57cec5SDimitry Andric omp_control_tool_start = 1, 2200b57cec5SDimitry Andric omp_control_tool_pause = 2, 2210b57cec5SDimitry Andric omp_control_tool_flush = 3, 2220b57cec5SDimitry Andric omp_control_tool_end = 4 2230b57cec5SDimitry Andric } omp_control_tool_t; 2240b57cec5SDimitry Andric 2250b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_control_tool(int, int, void*); 2260b57cec5SDimitry Andric 2270b57cec5SDimitry Andric /* OpenMP 5.0 Memory Management */ 2280b57cec5SDimitry Andric typedef uintptr_t omp_uintptr_t; 2290b57cec5SDimitry Andric 2300b57cec5SDimitry Andric typedef enum { 231*5ffd83dbSDimitry Andric omp_atk_threadmodel = 1, 232*5ffd83dbSDimitry Andric omp_atk_alignment = 2, 233*5ffd83dbSDimitry Andric omp_atk_access = 3, 234*5ffd83dbSDimitry Andric omp_atk_pool_size = 4, 235*5ffd83dbSDimitry Andric omp_atk_fallback = 5, 236*5ffd83dbSDimitry Andric omp_atk_fb_data = 6, 237*5ffd83dbSDimitry Andric omp_atk_pinned = 7, 238*5ffd83dbSDimitry Andric omp_atk_partition = 8 2390b57cec5SDimitry Andric } omp_alloctrait_key_t; 2400b57cec5SDimitry Andric 2410b57cec5SDimitry Andric typedef enum { 242*5ffd83dbSDimitry Andric omp_atv_false = 0, 243*5ffd83dbSDimitry Andric omp_atv_true = 1, 244*5ffd83dbSDimitry Andric omp_atv_default = 2, 245*5ffd83dbSDimitry Andric omp_atv_contended = 3, 246*5ffd83dbSDimitry Andric omp_atv_uncontended = 4, 247*5ffd83dbSDimitry Andric omp_atv_sequential = 5, 248*5ffd83dbSDimitry Andric omp_atv_private = 6, 249*5ffd83dbSDimitry Andric omp_atv_all = 7, 250*5ffd83dbSDimitry Andric omp_atv_thread = 8, 251*5ffd83dbSDimitry Andric omp_atv_pteam = 9, 252*5ffd83dbSDimitry Andric omp_atv_cgroup = 10, 253*5ffd83dbSDimitry Andric omp_atv_default_mem_fb = 11, 254*5ffd83dbSDimitry Andric omp_atv_null_fb = 12, 255*5ffd83dbSDimitry Andric omp_atv_abort_fb = 13, 256*5ffd83dbSDimitry Andric omp_atv_allocator_fb = 14, 257*5ffd83dbSDimitry Andric omp_atv_environment = 15, 258*5ffd83dbSDimitry Andric omp_atv_nearest = 16, 259*5ffd83dbSDimitry Andric omp_atv_blocked = 17, 260*5ffd83dbSDimitry Andric omp_atv_interleaved = 18 2610b57cec5SDimitry Andric } omp_alloctrait_value_t; 2620b57cec5SDimitry Andric 2630b57cec5SDimitry Andric typedef struct { 2640b57cec5SDimitry Andric omp_alloctrait_key_t key; 2650b57cec5SDimitry Andric omp_uintptr_t value; 2660b57cec5SDimitry Andric } omp_alloctrait_t; 2670b57cec5SDimitry Andric 2680b57cec5SDimitry Andric# if defined(_WIN32) 2690b57cec5SDimitry Andric // On Windows cl and icl do not support 64-bit enum, let's use integer then. 2700b57cec5SDimitry Andric typedef omp_uintptr_t omp_allocator_handle_t; 2710b57cec5SDimitry Andric extern __KMP_IMP omp_allocator_handle_t const omp_null_allocator; 2720b57cec5SDimitry Andric extern __KMP_IMP omp_allocator_handle_t const omp_default_mem_alloc; 2730b57cec5SDimitry Andric extern __KMP_IMP omp_allocator_handle_t const omp_large_cap_mem_alloc; 2740b57cec5SDimitry Andric extern __KMP_IMP omp_allocator_handle_t const omp_const_mem_alloc; 2750b57cec5SDimitry Andric extern __KMP_IMP omp_allocator_handle_t const omp_high_bw_mem_alloc; 2760b57cec5SDimitry Andric extern __KMP_IMP omp_allocator_handle_t const omp_low_lat_mem_alloc; 2770b57cec5SDimitry Andric extern __KMP_IMP omp_allocator_handle_t const omp_cgroup_mem_alloc; 2780b57cec5SDimitry Andric extern __KMP_IMP omp_allocator_handle_t const omp_pteam_mem_alloc; 2790b57cec5SDimitry Andric extern __KMP_IMP omp_allocator_handle_t const omp_thread_mem_alloc; 2800b57cec5SDimitry Andric typedef omp_uintptr_t omp_memspace_handle_t; 2810b57cec5SDimitry Andric extern __KMP_IMP omp_memspace_handle_t const omp_default_mem_space; 2820b57cec5SDimitry Andric extern __KMP_IMP omp_memspace_handle_t const omp_large_cap_mem_space; 2830b57cec5SDimitry Andric extern __KMP_IMP omp_memspace_handle_t const omp_const_mem_space; 2840b57cec5SDimitry Andric extern __KMP_IMP omp_memspace_handle_t const omp_high_bw_mem_space; 2850b57cec5SDimitry Andric extern __KMP_IMP omp_memspace_handle_t const omp_low_lat_mem_space; 2860b57cec5SDimitry Andric# else 2870b57cec5SDimitry Andric# if __cplusplus >= 201103 2880b57cec5SDimitry Andric typedef enum omp_allocator_handle_t : omp_uintptr_t 2890b57cec5SDimitry Andric# else 2900b57cec5SDimitry Andric typedef enum omp_allocator_handle_t 2910b57cec5SDimitry Andric# endif 2920b57cec5SDimitry Andric { 2930b57cec5SDimitry Andric omp_null_allocator = 0, 2940b57cec5SDimitry Andric omp_default_mem_alloc = 1, 2950b57cec5SDimitry Andric omp_large_cap_mem_alloc = 2, 2960b57cec5SDimitry Andric omp_const_mem_alloc = 3, 2970b57cec5SDimitry Andric omp_high_bw_mem_alloc = 4, 2980b57cec5SDimitry Andric omp_low_lat_mem_alloc = 5, 2990b57cec5SDimitry Andric omp_cgroup_mem_alloc = 6, 3000b57cec5SDimitry Andric omp_pteam_mem_alloc = 7, 3010b57cec5SDimitry Andric omp_thread_mem_alloc = 8, 3020b57cec5SDimitry Andric KMP_ALLOCATOR_MAX_HANDLE = UINTPTR_MAX 3030b57cec5SDimitry Andric } omp_allocator_handle_t; 3040b57cec5SDimitry Andric# if __cplusplus >= 201103 3050b57cec5SDimitry Andric typedef enum omp_memspace_handle_t : omp_uintptr_t 3060b57cec5SDimitry Andric# else 3070b57cec5SDimitry Andric typedef enum omp_memspace_handle_t 3080b57cec5SDimitry Andric# endif 3090b57cec5SDimitry Andric { 3100b57cec5SDimitry Andric omp_default_mem_space = 0, 3110b57cec5SDimitry Andric omp_large_cap_mem_space = 1, 3120b57cec5SDimitry Andric omp_const_mem_space = 2, 3130b57cec5SDimitry Andric omp_high_bw_mem_space = 3, 3140b57cec5SDimitry Andric omp_low_lat_mem_space = 4, 3150b57cec5SDimitry Andric KMP_MEMSPACE_MAX_HANDLE = UINTPTR_MAX 3160b57cec5SDimitry Andric } omp_memspace_handle_t; 3170b57cec5SDimitry Andric# endif 3180b57cec5SDimitry Andric extern omp_allocator_handle_t __KAI_KMPC_CONVENTION omp_init_allocator(omp_memspace_handle_t m, 3190b57cec5SDimitry Andric int ntraits, omp_alloctrait_t traits[]); 3200b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_destroy_allocator(omp_allocator_handle_t allocator); 3210b57cec5SDimitry Andric 3220b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_set_default_allocator(omp_allocator_handle_t a); 3230b57cec5SDimitry Andric extern omp_allocator_handle_t __KAI_KMPC_CONVENTION omp_get_default_allocator(void); 3240b57cec5SDimitry Andric# ifdef __cplusplus 3250b57cec5SDimitry Andric extern void *__KAI_KMPC_CONVENTION omp_alloc(size_t size, omp_allocator_handle_t a = omp_null_allocator); 3260b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_free(void * ptr, omp_allocator_handle_t a = omp_null_allocator); 3270b57cec5SDimitry Andric# else 3280b57cec5SDimitry Andric extern void *__KAI_KMPC_CONVENTION omp_alloc(size_t size, omp_allocator_handle_t a); 3290b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_free(void *ptr, omp_allocator_handle_t a); 3300b57cec5SDimitry Andric# endif 3310b57cec5SDimitry Andric 3320b57cec5SDimitry Andric /* OpenMP 5.0 Affinity Format */ 3330b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_set_affinity_format(char const *); 3340b57cec5SDimitry Andric extern size_t __KAI_KMPC_CONVENTION omp_get_affinity_format(char *, size_t); 3350b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_display_affinity(char const *); 3360b57cec5SDimitry Andric extern size_t __KAI_KMPC_CONVENTION omp_capture_affinity(char *, size_t, char const *); 3370b57cec5SDimitry Andric 3380b57cec5SDimitry Andric /* OpenMP 5.0 events */ 3390b57cec5SDimitry Andric# if defined(_WIN32) 3400b57cec5SDimitry Andric // On Windows cl and icl do not support 64-bit enum, let's use integer then. 3410b57cec5SDimitry Andric typedef omp_uintptr_t omp_event_handle_t; 3420b57cec5SDimitry Andric# else 3430b57cec5SDimitry Andric typedef enum omp_event_handle_t { KMP_EVENT_MAX_HANDLE = UINTPTR_MAX } omp_event_handle_t; 3440b57cec5SDimitry Andric# endif 3450b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_fulfill_event ( omp_event_handle_t event ); 3460b57cec5SDimitry Andric 3470b57cec5SDimitry Andric /* OpenMP 5.0 Pause Resources */ 3480b57cec5SDimitry Andric typedef enum omp_pause_resource_t { 3490b57cec5SDimitry Andric omp_pause_resume = 0, 3500b57cec5SDimitry Andric omp_pause_soft = 1, 3510b57cec5SDimitry Andric omp_pause_hard = 2 3520b57cec5SDimitry Andric } omp_pause_resource_t; 3530b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_pause_resource(omp_pause_resource_t, int); 3540b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_pause_resource_all(omp_pause_resource_t); 3550b57cec5SDimitry Andric 3560b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_supported_active_levels(void); 3570b57cec5SDimitry Andric 358*5ffd83dbSDimitry Andric /* OpenMP 5.1 Display Environment */ 359*5ffd83dbSDimitry Andric extern void omp_display_env(int verbose); 360*5ffd83dbSDimitry Andric 3610b57cec5SDimitry Andric# undef __KAI_KMPC_CONVENTION 3620b57cec5SDimitry Andric# undef __KMP_IMP 3630b57cec5SDimitry Andric 3640b57cec5SDimitry Andric /* Warning: 3650b57cec5SDimitry Andric The following typedefs are not standard, deprecated and will be removed in a future release. 3660b57cec5SDimitry Andric */ 3670b57cec5SDimitry Andric typedef int omp_int_t; 3680b57cec5SDimitry Andric typedef double omp_wtime_t; 3690b57cec5SDimitry Andric 3700b57cec5SDimitry Andric# ifdef __cplusplus 3710b57cec5SDimitry Andric } 3720b57cec5SDimitry Andric# endif 3730b57cec5SDimitry Andric 3740b57cec5SDimitry Andric#endif /* __OMP_H */ 375