1*0b57cec5SDimitry Andric/* 2*0b57cec5SDimitry Andric * include/omp.h.var 3*0b57cec5SDimitry Andric */ 4*0b57cec5SDimitry Andric 5*0b57cec5SDimitry Andric 6*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 7*0b57cec5SDimitry Andric// 8*0b57cec5SDimitry Andric// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 9*0b57cec5SDimitry Andric// See https://llvm.org/LICENSE.txt for license information. 10*0b57cec5SDimitry Andric// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 11*0b57cec5SDimitry Andric// 12*0b57cec5SDimitry Andric//===----------------------------------------------------------------------===// 13*0b57cec5SDimitry Andric 14*0b57cec5SDimitry Andric 15*0b57cec5SDimitry Andric#ifndef __OMP_H 16*0b57cec5SDimitry Andric# define __OMP_H 17*0b57cec5SDimitry Andric 18*0b57cec5SDimitry Andric# include <stdlib.h> 19*0b57cec5SDimitry Andric# include <stdint.h> 20*0b57cec5SDimitry Andric 21*0b57cec5SDimitry Andric# define KMP_VERSION_MAJOR @LIBOMP_VERSION_MAJOR@ 22*0b57cec5SDimitry Andric# define KMP_VERSION_MINOR @LIBOMP_VERSION_MINOR@ 23*0b57cec5SDimitry Andric# define KMP_VERSION_BUILD @LIBOMP_VERSION_BUILD@ 24*0b57cec5SDimitry Andric# define KMP_BUILD_DATE "@LIBOMP_BUILD_DATE@" 25*0b57cec5SDimitry Andric 26*0b57cec5SDimitry Andric# ifdef __cplusplus 27*0b57cec5SDimitry Andric extern "C" { 28*0b57cec5SDimitry Andric# endif 29*0b57cec5SDimitry Andric 30*0b57cec5SDimitry Andric# define omp_set_affinity_format ompc_set_affinity_format 31*0b57cec5SDimitry Andric# define omp_get_affinity_format ompc_get_affinity_format 32*0b57cec5SDimitry Andric# define omp_display_affinity ompc_display_affinity 33*0b57cec5SDimitry Andric# define omp_capture_affinity ompc_capture_affinity 34*0b57cec5SDimitry Andric 35*0b57cec5SDimitry Andric# if defined(_WIN32) 36*0b57cec5SDimitry Andric# define __KAI_KMPC_CONVENTION __cdecl 37*0b57cec5SDimitry Andric# ifndef __KMP_IMP 38*0b57cec5SDimitry Andric# define __KMP_IMP __declspec(dllimport) 39*0b57cec5SDimitry Andric# endif 40*0b57cec5SDimitry Andric# else 41*0b57cec5SDimitry Andric# define __KAI_KMPC_CONVENTION 42*0b57cec5SDimitry Andric# ifndef __KMP_IMP 43*0b57cec5SDimitry Andric# define __KMP_IMP 44*0b57cec5SDimitry Andric# endif 45*0b57cec5SDimitry Andric# endif 46*0b57cec5SDimitry Andric 47*0b57cec5SDimitry Andric /* schedule kind constants */ 48*0b57cec5SDimitry Andric typedef enum omp_sched_t { 49*0b57cec5SDimitry Andric omp_sched_static = 1, 50*0b57cec5SDimitry Andric omp_sched_dynamic = 2, 51*0b57cec5SDimitry Andric omp_sched_guided = 3, 52*0b57cec5SDimitry Andric omp_sched_auto = 4, 53*0b57cec5SDimitry Andric omp_sched_monotonic = 0x80000000 54*0b57cec5SDimitry Andric } omp_sched_t; 55*0b57cec5SDimitry Andric 56*0b57cec5SDimitry Andric /* set API functions */ 57*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_set_num_threads (int); 58*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_set_dynamic (int); 59*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_set_nested (int); 60*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_set_max_active_levels (int); 61*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_set_schedule (omp_sched_t, int); 62*0b57cec5SDimitry Andric 63*0b57cec5SDimitry Andric /* query API functions */ 64*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_num_threads (void); 65*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_dynamic (void); 66*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_nested (void); 67*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_max_threads (void); 68*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_thread_num (void); 69*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_num_procs (void); 70*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_in_parallel (void); 71*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_in_final (void); 72*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_active_level (void); 73*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_level (void); 74*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_ancestor_thread_num (int); 75*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_team_size (int); 76*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_thread_limit (void); 77*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_max_active_levels (void); 78*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_get_schedule (omp_sched_t *, int *); 79*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_max_task_priority (void); 80*0b57cec5SDimitry Andric 81*0b57cec5SDimitry Andric /* lock API functions */ 82*0b57cec5SDimitry Andric typedef struct omp_lock_t { 83*0b57cec5SDimitry Andric void * _lk; 84*0b57cec5SDimitry Andric } omp_lock_t; 85*0b57cec5SDimitry Andric 86*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_init_lock (omp_lock_t *); 87*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_set_lock (omp_lock_t *); 88*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_unset_lock (omp_lock_t *); 89*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_destroy_lock (omp_lock_t *); 90*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_test_lock (omp_lock_t *); 91*0b57cec5SDimitry Andric 92*0b57cec5SDimitry Andric /* nested lock API functions */ 93*0b57cec5SDimitry Andric typedef struct omp_nest_lock_t { 94*0b57cec5SDimitry Andric void * _lk; 95*0b57cec5SDimitry Andric } omp_nest_lock_t; 96*0b57cec5SDimitry Andric 97*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_init_nest_lock (omp_nest_lock_t *); 98*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_set_nest_lock (omp_nest_lock_t *); 99*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_unset_nest_lock (omp_nest_lock_t *); 100*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_destroy_nest_lock (omp_nest_lock_t *); 101*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_test_nest_lock (omp_nest_lock_t *); 102*0b57cec5SDimitry Andric 103*0b57cec5SDimitry Andric /* OpenMP 5.0 Synchronization hints*/ 104*0b57cec5SDimitry Andric typedef enum omp_sync_hint_t { 105*0b57cec5SDimitry Andric omp_sync_hint_none = 0, 106*0b57cec5SDimitry Andric omp_lock_hint_none = omp_sync_hint_none, 107*0b57cec5SDimitry Andric omp_sync_hint_uncontended = 1, 108*0b57cec5SDimitry Andric omp_lock_hint_uncontended = omp_sync_hint_uncontended, 109*0b57cec5SDimitry Andric omp_sync_hint_contended = (1<<1), 110*0b57cec5SDimitry Andric omp_lock_hint_contended = omp_sync_hint_contended, 111*0b57cec5SDimitry Andric omp_sync_hint_nonspeculative = (1<<2), 112*0b57cec5SDimitry Andric omp_lock_hint_nonspeculative = omp_sync_hint_nonspeculative, 113*0b57cec5SDimitry Andric omp_sync_hint_speculative = (1<<3), 114*0b57cec5SDimitry Andric omp_lock_hint_speculative = omp_sync_hint_speculative, 115*0b57cec5SDimitry Andric kmp_lock_hint_hle = (1<<16), 116*0b57cec5SDimitry Andric kmp_lock_hint_rtm = (1<<17), 117*0b57cec5SDimitry Andric kmp_lock_hint_adaptive = (1<<18) 118*0b57cec5SDimitry Andric } omp_sync_hint_t; 119*0b57cec5SDimitry Andric 120*0b57cec5SDimitry Andric /* lock hint type for dynamic user lock */ 121*0b57cec5SDimitry Andric typedef omp_sync_hint_t omp_lock_hint_t; 122*0b57cec5SDimitry Andric 123*0b57cec5SDimitry Andric /* hinted lock initializers */ 124*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_init_lock_with_hint(omp_lock_t *, omp_lock_hint_t); 125*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_init_nest_lock_with_hint(omp_nest_lock_t *, omp_lock_hint_t); 126*0b57cec5SDimitry Andric 127*0b57cec5SDimitry Andric /* time API functions */ 128*0b57cec5SDimitry Andric extern double __KAI_KMPC_CONVENTION omp_get_wtime (void); 129*0b57cec5SDimitry Andric extern double __KAI_KMPC_CONVENTION omp_get_wtick (void); 130*0b57cec5SDimitry Andric 131*0b57cec5SDimitry Andric /* OpenMP 4.0 */ 132*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_default_device (void); 133*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_set_default_device (int); 134*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_is_initial_device (void); 135*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_num_devices (void); 136*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_num_teams (void); 137*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_team_num (void); 138*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_cancellation (void); 139*0b57cec5SDimitry Andric 140*0b57cec5SDimitry Andric /* OpenMP 4.5 */ 141*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_initial_device (void); 142*0b57cec5SDimitry Andric extern void* __KAI_KMPC_CONVENTION omp_target_alloc(size_t, int); 143*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_target_free(void *, int); 144*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_target_is_present(void *, int); 145*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_target_memcpy(void *, void *, size_t, size_t, size_t, int, int); 146*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_target_memcpy_rect(void *, void *, size_t, int, const size_t *, 147*0b57cec5SDimitry Andric const size_t *, const size_t *, const size_t *, const size_t *, int, int); 148*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_target_associate_ptr(void *, void *, size_t, size_t, int); 149*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_target_disassociate_ptr(void *, int); 150*0b57cec5SDimitry Andric 151*0b57cec5SDimitry Andric /* OpenMP 5.0 */ 152*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_device_num (void); 153*0b57cec5SDimitry Andric typedef void * omp_depend_t; 154*0b57cec5SDimitry Andric 155*0b57cec5SDimitry Andric /* kmp API functions */ 156*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION kmp_get_stacksize (void); 157*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_set_stacksize (int); 158*0b57cec5SDimitry Andric extern size_t __KAI_KMPC_CONVENTION kmp_get_stacksize_s (void); 159*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_set_stacksize_s (size_t); 160*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION kmp_get_blocktime (void); 161*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION kmp_get_library (void); 162*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_set_blocktime (int); 163*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_set_library (int); 164*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_set_library_serial (void); 165*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_set_library_turnaround (void); 166*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_set_library_throughput (void); 167*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_set_defaults (char const *); 168*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_set_disp_num_buffers (int); 169*0b57cec5SDimitry Andric 170*0b57cec5SDimitry Andric /* Intel affinity API */ 171*0b57cec5SDimitry Andric typedef void * kmp_affinity_mask_t; 172*0b57cec5SDimitry Andric 173*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION kmp_set_affinity (kmp_affinity_mask_t *); 174*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION kmp_get_affinity (kmp_affinity_mask_t *); 175*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION kmp_get_affinity_max_proc (void); 176*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_create_affinity_mask (kmp_affinity_mask_t *); 177*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_destroy_affinity_mask (kmp_affinity_mask_t *); 178*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION kmp_set_affinity_mask_proc (int, kmp_affinity_mask_t *); 179*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION kmp_unset_affinity_mask_proc (int, kmp_affinity_mask_t *); 180*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION kmp_get_affinity_mask_proc (int, kmp_affinity_mask_t *); 181*0b57cec5SDimitry Andric 182*0b57cec5SDimitry Andric /* OpenMP 4.0 affinity API */ 183*0b57cec5SDimitry Andric typedef enum omp_proc_bind_t { 184*0b57cec5SDimitry Andric omp_proc_bind_false = 0, 185*0b57cec5SDimitry Andric omp_proc_bind_true = 1, 186*0b57cec5SDimitry Andric omp_proc_bind_master = 2, 187*0b57cec5SDimitry Andric omp_proc_bind_close = 3, 188*0b57cec5SDimitry Andric omp_proc_bind_spread = 4 189*0b57cec5SDimitry Andric } omp_proc_bind_t; 190*0b57cec5SDimitry Andric 191*0b57cec5SDimitry Andric extern omp_proc_bind_t __KAI_KMPC_CONVENTION omp_get_proc_bind (void); 192*0b57cec5SDimitry Andric 193*0b57cec5SDimitry Andric /* OpenMP 4.5 affinity API */ 194*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_num_places (void); 195*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_place_num_procs (int); 196*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_get_place_proc_ids (int, int *); 197*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_place_num (void); 198*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_partition_num_places (void); 199*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_get_partition_place_nums (int *); 200*0b57cec5SDimitry Andric 201*0b57cec5SDimitry Andric extern void * __KAI_KMPC_CONVENTION kmp_malloc (size_t); 202*0b57cec5SDimitry Andric extern void * __KAI_KMPC_CONVENTION kmp_aligned_malloc (size_t, size_t); 203*0b57cec5SDimitry Andric extern void * __KAI_KMPC_CONVENTION kmp_calloc (size_t, size_t); 204*0b57cec5SDimitry Andric extern void * __KAI_KMPC_CONVENTION kmp_realloc (void *, size_t); 205*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_free (void *); 206*0b57cec5SDimitry Andric 207*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_set_warnings_on(void); 208*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION kmp_set_warnings_off(void); 209*0b57cec5SDimitry Andric 210*0b57cec5SDimitry Andric /* OpenMP 5.0 Tool Control */ 211*0b57cec5SDimitry Andric typedef enum omp_control_tool_result_t { 212*0b57cec5SDimitry Andric omp_control_tool_notool = -2, 213*0b57cec5SDimitry Andric omp_control_tool_nocallback = -1, 214*0b57cec5SDimitry Andric omp_control_tool_success = 0, 215*0b57cec5SDimitry Andric omp_control_tool_ignored = 1 216*0b57cec5SDimitry Andric } omp_control_tool_result_t; 217*0b57cec5SDimitry Andric 218*0b57cec5SDimitry Andric typedef enum omp_control_tool_t { 219*0b57cec5SDimitry Andric omp_control_tool_start = 1, 220*0b57cec5SDimitry Andric omp_control_tool_pause = 2, 221*0b57cec5SDimitry Andric omp_control_tool_flush = 3, 222*0b57cec5SDimitry Andric omp_control_tool_end = 4 223*0b57cec5SDimitry Andric } omp_control_tool_t; 224*0b57cec5SDimitry Andric 225*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_control_tool(int, int, void*); 226*0b57cec5SDimitry Andric 227*0b57cec5SDimitry Andric /* OpenMP 5.0 Memory Management */ 228*0b57cec5SDimitry Andric typedef uintptr_t omp_uintptr_t; 229*0b57cec5SDimitry Andric 230*0b57cec5SDimitry Andric typedef enum { 231*0b57cec5SDimitry Andric OMP_ATK_THREADMODEL = 1, 232*0b57cec5SDimitry Andric OMP_ATK_ALIGNMENT = 2, 233*0b57cec5SDimitry Andric OMP_ATK_ACCESS = 3, 234*0b57cec5SDimitry Andric OMP_ATK_POOL_SIZE = 4, 235*0b57cec5SDimitry Andric OMP_ATK_FALLBACK = 5, 236*0b57cec5SDimitry Andric OMP_ATK_FB_DATA = 6, 237*0b57cec5SDimitry Andric OMP_ATK_PINNED = 7, 238*0b57cec5SDimitry Andric OMP_ATK_PARTITION = 8 239*0b57cec5SDimitry Andric } omp_alloctrait_key_t; 240*0b57cec5SDimitry Andric 241*0b57cec5SDimitry Andric typedef enum { 242*0b57cec5SDimitry Andric OMP_ATV_FALSE = 0, 243*0b57cec5SDimitry Andric OMP_ATV_TRUE = 1, 244*0b57cec5SDimitry Andric OMP_ATV_DEFAULT = 2, 245*0b57cec5SDimitry Andric OMP_ATV_CONTENDED = 3, 246*0b57cec5SDimitry Andric OMP_ATV_UNCONTENDED = 4, 247*0b57cec5SDimitry Andric OMP_ATV_SEQUENTIAL = 5, 248*0b57cec5SDimitry Andric OMP_ATV_PRIVATE = 6, 249*0b57cec5SDimitry Andric OMP_ATV_ALL = 7, 250*0b57cec5SDimitry Andric OMP_ATV_THREAD = 8, 251*0b57cec5SDimitry Andric OMP_ATV_PTEAM = 9, 252*0b57cec5SDimitry Andric OMP_ATV_CGROUP = 10, 253*0b57cec5SDimitry Andric OMP_ATV_DEFAULT_MEM_FB = 11, 254*0b57cec5SDimitry Andric OMP_ATV_NULL_FB = 12, 255*0b57cec5SDimitry Andric OMP_ATV_ABORT_FB = 13, 256*0b57cec5SDimitry Andric OMP_ATV_ALLOCATOR_FB = 14, 257*0b57cec5SDimitry Andric OMP_ATV_ENVIRONMENT = 15, 258*0b57cec5SDimitry Andric OMP_ATV_NEAREST = 16, 259*0b57cec5SDimitry Andric OMP_ATV_BLOCKED = 17, 260*0b57cec5SDimitry Andric OMP_ATV_INTERLEAVED = 18 261*0b57cec5SDimitry Andric } omp_alloctrait_value_t; 262*0b57cec5SDimitry Andric 263*0b57cec5SDimitry Andric typedef struct { 264*0b57cec5SDimitry Andric omp_alloctrait_key_t key; 265*0b57cec5SDimitry Andric omp_uintptr_t value; 266*0b57cec5SDimitry Andric } omp_alloctrait_t; 267*0b57cec5SDimitry Andric 268*0b57cec5SDimitry Andric# if defined(_WIN32) 269*0b57cec5SDimitry Andric // On Windows cl and icl do not support 64-bit enum, let's use integer then. 270*0b57cec5SDimitry Andric typedef omp_uintptr_t omp_allocator_handle_t; 271*0b57cec5SDimitry Andric extern __KMP_IMP omp_allocator_handle_t const omp_null_allocator; 272*0b57cec5SDimitry Andric extern __KMP_IMP omp_allocator_handle_t const omp_default_mem_alloc; 273*0b57cec5SDimitry Andric extern __KMP_IMP omp_allocator_handle_t const omp_large_cap_mem_alloc; 274*0b57cec5SDimitry Andric extern __KMP_IMP omp_allocator_handle_t const omp_const_mem_alloc; 275*0b57cec5SDimitry Andric extern __KMP_IMP omp_allocator_handle_t const omp_high_bw_mem_alloc; 276*0b57cec5SDimitry Andric extern __KMP_IMP omp_allocator_handle_t const omp_low_lat_mem_alloc; 277*0b57cec5SDimitry Andric extern __KMP_IMP omp_allocator_handle_t const omp_cgroup_mem_alloc; 278*0b57cec5SDimitry Andric extern __KMP_IMP omp_allocator_handle_t const omp_pteam_mem_alloc; 279*0b57cec5SDimitry Andric extern __KMP_IMP omp_allocator_handle_t const omp_thread_mem_alloc; 280*0b57cec5SDimitry Andric typedef omp_uintptr_t omp_memspace_handle_t; 281*0b57cec5SDimitry Andric extern __KMP_IMP omp_memspace_handle_t const omp_default_mem_space; 282*0b57cec5SDimitry Andric extern __KMP_IMP omp_memspace_handle_t const omp_large_cap_mem_space; 283*0b57cec5SDimitry Andric extern __KMP_IMP omp_memspace_handle_t const omp_const_mem_space; 284*0b57cec5SDimitry Andric extern __KMP_IMP omp_memspace_handle_t const omp_high_bw_mem_space; 285*0b57cec5SDimitry Andric extern __KMP_IMP omp_memspace_handle_t const omp_low_lat_mem_space; 286*0b57cec5SDimitry Andric# else 287*0b57cec5SDimitry Andric# if __cplusplus >= 201103 288*0b57cec5SDimitry Andric typedef enum omp_allocator_handle_t : omp_uintptr_t 289*0b57cec5SDimitry Andric# else 290*0b57cec5SDimitry Andric typedef enum omp_allocator_handle_t 291*0b57cec5SDimitry Andric# endif 292*0b57cec5SDimitry Andric { 293*0b57cec5SDimitry Andric omp_null_allocator = 0, 294*0b57cec5SDimitry Andric omp_default_mem_alloc = 1, 295*0b57cec5SDimitry Andric omp_large_cap_mem_alloc = 2, 296*0b57cec5SDimitry Andric omp_const_mem_alloc = 3, 297*0b57cec5SDimitry Andric omp_high_bw_mem_alloc = 4, 298*0b57cec5SDimitry Andric omp_low_lat_mem_alloc = 5, 299*0b57cec5SDimitry Andric omp_cgroup_mem_alloc = 6, 300*0b57cec5SDimitry Andric omp_pteam_mem_alloc = 7, 301*0b57cec5SDimitry Andric omp_thread_mem_alloc = 8, 302*0b57cec5SDimitry Andric KMP_ALLOCATOR_MAX_HANDLE = UINTPTR_MAX 303*0b57cec5SDimitry Andric } omp_allocator_handle_t; 304*0b57cec5SDimitry Andric# if __cplusplus >= 201103 305*0b57cec5SDimitry Andric typedef enum omp_memspace_handle_t : omp_uintptr_t 306*0b57cec5SDimitry Andric# else 307*0b57cec5SDimitry Andric typedef enum omp_memspace_handle_t 308*0b57cec5SDimitry Andric# endif 309*0b57cec5SDimitry Andric { 310*0b57cec5SDimitry Andric omp_default_mem_space = 0, 311*0b57cec5SDimitry Andric omp_large_cap_mem_space = 1, 312*0b57cec5SDimitry Andric omp_const_mem_space = 2, 313*0b57cec5SDimitry Andric omp_high_bw_mem_space = 3, 314*0b57cec5SDimitry Andric omp_low_lat_mem_space = 4, 315*0b57cec5SDimitry Andric KMP_MEMSPACE_MAX_HANDLE = UINTPTR_MAX 316*0b57cec5SDimitry Andric } omp_memspace_handle_t; 317*0b57cec5SDimitry Andric# endif 318*0b57cec5SDimitry Andric extern omp_allocator_handle_t __KAI_KMPC_CONVENTION omp_init_allocator(omp_memspace_handle_t m, 319*0b57cec5SDimitry Andric int ntraits, omp_alloctrait_t traits[]); 320*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_destroy_allocator(omp_allocator_handle_t allocator); 321*0b57cec5SDimitry Andric 322*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_set_default_allocator(omp_allocator_handle_t a); 323*0b57cec5SDimitry Andric extern omp_allocator_handle_t __KAI_KMPC_CONVENTION omp_get_default_allocator(void); 324*0b57cec5SDimitry Andric# ifdef __cplusplus 325*0b57cec5SDimitry Andric extern void *__KAI_KMPC_CONVENTION omp_alloc(size_t size, omp_allocator_handle_t a = omp_null_allocator); 326*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_free(void * ptr, omp_allocator_handle_t a = omp_null_allocator); 327*0b57cec5SDimitry Andric# else 328*0b57cec5SDimitry Andric extern void *__KAI_KMPC_CONVENTION omp_alloc(size_t size, omp_allocator_handle_t a); 329*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_free(void *ptr, omp_allocator_handle_t a); 330*0b57cec5SDimitry Andric# endif 331*0b57cec5SDimitry Andric 332*0b57cec5SDimitry Andric /* OpenMP 5.0 Affinity Format */ 333*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_set_affinity_format(char const *); 334*0b57cec5SDimitry Andric extern size_t __KAI_KMPC_CONVENTION omp_get_affinity_format(char *, size_t); 335*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_display_affinity(char const *); 336*0b57cec5SDimitry Andric extern size_t __KAI_KMPC_CONVENTION omp_capture_affinity(char *, size_t, char const *); 337*0b57cec5SDimitry Andric 338*0b57cec5SDimitry Andric /* OpenMP 5.0 events */ 339*0b57cec5SDimitry Andric# if defined(_WIN32) 340*0b57cec5SDimitry Andric // On Windows cl and icl do not support 64-bit enum, let's use integer then. 341*0b57cec5SDimitry Andric typedef omp_uintptr_t omp_event_handle_t; 342*0b57cec5SDimitry Andric# else 343*0b57cec5SDimitry Andric typedef enum omp_event_handle_t { KMP_EVENT_MAX_HANDLE = UINTPTR_MAX } omp_event_handle_t; 344*0b57cec5SDimitry Andric# endif 345*0b57cec5SDimitry Andric extern void __KAI_KMPC_CONVENTION omp_fulfill_event ( omp_event_handle_t event ); 346*0b57cec5SDimitry Andric 347*0b57cec5SDimitry Andric /* OpenMP 5.0 Pause Resources */ 348*0b57cec5SDimitry Andric typedef enum omp_pause_resource_t { 349*0b57cec5SDimitry Andric omp_pause_resume = 0, 350*0b57cec5SDimitry Andric omp_pause_soft = 1, 351*0b57cec5SDimitry Andric omp_pause_hard = 2 352*0b57cec5SDimitry Andric } omp_pause_resource_t; 353*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_pause_resource(omp_pause_resource_t, int); 354*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_pause_resource_all(omp_pause_resource_t); 355*0b57cec5SDimitry Andric 356*0b57cec5SDimitry Andric extern int __KAI_KMPC_CONVENTION omp_get_supported_active_levels(void); 357*0b57cec5SDimitry Andric 358*0b57cec5SDimitry Andric# undef __KAI_KMPC_CONVENTION 359*0b57cec5SDimitry Andric# undef __KMP_IMP 360*0b57cec5SDimitry Andric 361*0b57cec5SDimitry Andric /* Warning: 362*0b57cec5SDimitry Andric The following typedefs are not standard, deprecated and will be removed in a future release. 363*0b57cec5SDimitry Andric */ 364*0b57cec5SDimitry Andric typedef int omp_int_t; 365*0b57cec5SDimitry Andric typedef double omp_wtime_t; 366*0b57cec5SDimitry Andric 367*0b57cec5SDimitry Andric# ifdef __cplusplus 368*0b57cec5SDimitry Andric } 369*0b57cec5SDimitry Andric# endif 370*0b57cec5SDimitry Andric 371*0b57cec5SDimitry Andric#endif /* __OMP_H */ 372