562 lines · plain
1/*2 * include/omp.h.var3 */4 5 6//===----------------------------------------------------------------------===//7//8// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.9// See https://llvm.org/LICENSE.txt for license information.10// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception11//12//===----------------------------------------------------------------------===//13 14 15#ifndef __OMP_H16# define __OMP_H17 18# ifndef __has_include19# define __has_include(x) 020# endif21 22# include <stddef.h>23# if (__has_include(<stdlib.h>))24# include <stdlib.h>25# endif26# include <stdint.h>27 28# define KMP_VERSION_MAJOR @LIBOMP_VERSION_MAJOR@29# define KMP_VERSION_MINOR @LIBOMP_VERSION_MINOR@30# define KMP_VERSION_BUILD @LIBOMP_VERSION_BUILD@31# define KMP_BUILD_DATE "@LIBOMP_BUILD_DATE@"32 33# ifdef __cplusplus34 extern "C" {35# endif36 37# define omp_set_affinity_format ompc_set_affinity_format38# define omp_get_affinity_format ompc_get_affinity_format39# define omp_display_affinity ompc_display_affinity40# define omp_capture_affinity ompc_capture_affinity41 42# if defined(_WIN32)43# define __KAI_KMPC_CONVENTION __cdecl44# ifndef __KMP_IMP45# define __KMP_IMP __declspec(dllimport)46# endif47# else48# define __KAI_KMPC_CONVENTION49# ifndef __KMP_IMP50# define __KMP_IMP51# endif52# endif53 54 /* schedule kind constants */55 typedef enum omp_sched_t {56 omp_sched_static = 1,57 omp_sched_dynamic = 2,58 omp_sched_guided = 3,59 omp_sched_auto = 4,60 omp_sched_monotonic = 0x8000000061 } omp_sched_t;62 63 /* set API functions */64 extern void __KAI_KMPC_CONVENTION omp_set_num_threads (int);65 extern void __KAI_KMPC_CONVENTION omp_set_dynamic (int);66 extern void __KAI_KMPC_CONVENTION omp_set_nested (int);67 extern void __KAI_KMPC_CONVENTION omp_set_max_active_levels (int);68 extern void __KAI_KMPC_CONVENTION omp_set_schedule (omp_sched_t, int);69 70 /* query API functions */71 extern int __KAI_KMPC_CONVENTION omp_get_num_threads (void);72 extern int __KAI_KMPC_CONVENTION omp_get_dynamic (void);73 extern int __KAI_KMPC_CONVENTION omp_get_nested (void);74 extern int __KAI_KMPC_CONVENTION omp_get_max_threads (void);75 extern int __KAI_KMPC_CONVENTION omp_get_thread_num (void);76 extern int __KAI_KMPC_CONVENTION omp_get_num_procs (void);77 extern int __KAI_KMPC_CONVENTION omp_in_parallel (void);78 extern int __KAI_KMPC_CONVENTION omp_in_final (void);79 extern int __KAI_KMPC_CONVENTION omp_get_active_level (void);80 extern int __KAI_KMPC_CONVENTION omp_get_level (void);81 extern int __KAI_KMPC_CONVENTION omp_get_ancestor_thread_num (int);82 extern int __KAI_KMPC_CONVENTION omp_get_team_size (int);83 extern int __KAI_KMPC_CONVENTION omp_get_thread_limit (void);84 extern int __KAI_KMPC_CONVENTION omp_get_max_active_levels (void);85 extern void __KAI_KMPC_CONVENTION omp_get_schedule (omp_sched_t *, int *);86 extern int __KAI_KMPC_CONVENTION omp_get_max_task_priority (void);87 88 /* lock API functions */89 typedef struct omp_lock_t {90 void * _lk;91 } omp_lock_t;92 93 extern void __KAI_KMPC_CONVENTION omp_init_lock (omp_lock_t *);94 extern void __KAI_KMPC_CONVENTION omp_set_lock (omp_lock_t *);95 extern void __KAI_KMPC_CONVENTION omp_unset_lock (omp_lock_t *);96 extern void __KAI_KMPC_CONVENTION omp_destroy_lock (omp_lock_t *);97 extern int __KAI_KMPC_CONVENTION omp_test_lock (omp_lock_t *);98 99 /* nested lock API functions */100 typedef struct omp_nest_lock_t {101 void * _lk;102 } omp_nest_lock_t;103 104 extern void __KAI_KMPC_CONVENTION omp_init_nest_lock (omp_nest_lock_t *);105 extern void __KAI_KMPC_CONVENTION omp_set_nest_lock (omp_nest_lock_t *);106 extern void __KAI_KMPC_CONVENTION omp_unset_nest_lock (omp_nest_lock_t *);107 extern void __KAI_KMPC_CONVENTION omp_destroy_nest_lock (omp_nest_lock_t *);108 extern int __KAI_KMPC_CONVENTION omp_test_nest_lock (omp_nest_lock_t *);109 110 /* OpenMP 5.0 Synchronization hints*/111 typedef enum omp_sync_hint_t {112 omp_sync_hint_none = 0,113 omp_lock_hint_none = omp_sync_hint_none,114 omp_sync_hint_uncontended = 1,115 omp_lock_hint_uncontended = omp_sync_hint_uncontended,116 omp_sync_hint_contended = (1<<1),117 omp_lock_hint_contended = omp_sync_hint_contended,118 omp_sync_hint_nonspeculative = (1<<2),119 omp_lock_hint_nonspeculative = omp_sync_hint_nonspeculative,120 omp_sync_hint_speculative = (1<<3),121 omp_lock_hint_speculative = omp_sync_hint_speculative,122 kmp_lock_hint_hle = (1<<16),123 kmp_lock_hint_rtm = (1<<17),124 kmp_lock_hint_adaptive = (1<<18)125 } omp_sync_hint_t;126 127 /* lock hint type for dynamic user lock */128 typedef omp_sync_hint_t omp_lock_hint_t;129 130 /* hinted lock initializers */131 extern void __KAI_KMPC_CONVENTION omp_init_lock_with_hint(omp_lock_t *, omp_lock_hint_t);132 extern void __KAI_KMPC_CONVENTION omp_init_nest_lock_with_hint(omp_nest_lock_t *, omp_lock_hint_t);133 134 /* time API functions */135 extern double __KAI_KMPC_CONVENTION omp_get_wtime (void);136 extern double __KAI_KMPC_CONVENTION omp_get_wtick (void);137 138 /* OpenMP 4.0 */139 extern int __KAI_KMPC_CONVENTION omp_get_default_device (void);140 extern void __KAI_KMPC_CONVENTION omp_set_default_device (int);141 extern int __KAI_KMPC_CONVENTION omp_is_initial_device (void);142 extern int __KAI_KMPC_CONVENTION omp_get_num_devices (void);143 extern int __KAI_KMPC_CONVENTION omp_get_num_teams (void);144 extern int __KAI_KMPC_CONVENTION omp_get_team_num (void);145 extern int __KAI_KMPC_CONVENTION omp_get_cancellation (void);146 147 /* OpenMP 4.5 */148 extern int __KAI_KMPC_CONVENTION omp_get_initial_device (void);149 extern void* __KAI_KMPC_CONVENTION omp_target_alloc(size_t, int);150 extern void __KAI_KMPC_CONVENTION omp_target_free(void *, int);151 extern int __KAI_KMPC_CONVENTION omp_target_is_present(const void *, int);152 extern int __KAI_KMPC_CONVENTION omp_target_memcpy(void *, const void *, size_t, size_t, size_t, int, int);153 extern int __KAI_KMPC_CONVENTION omp_target_memcpy_rect(void *, const void *, size_t, int, const size_t *,154 const size_t *, const size_t *, const size_t *, const size_t *, int, int);155 extern int __KAI_KMPC_CONVENTION omp_target_associate_ptr(const void *, const void *, size_t, size_t, int);156 extern int __KAI_KMPC_CONVENTION omp_target_disassociate_ptr(const void *, int);157 158 /* OpenMP 5.0 */159 extern int __KAI_KMPC_CONVENTION omp_get_device_num (void);160 typedef void * omp_depend_t;161 162 /* OpenMP 5.1 interop */163 typedef intptr_t omp_intptr_t;164 165 extern void __KAI_KMPC_CONVENTION ompx_dump_mapping_tables(void);166 167 /* 0..omp_get_num_interop_properties()-1 are reserved for implementation-defined properties */168 typedef enum omp_interop_property {169 omp_ipr_fr_id = -1,170 omp_ipr_fr_name = -2,171 omp_ipr_vendor = -3,172 omp_ipr_vendor_name = -4,173 omp_ipr_device_num = -5,174 omp_ipr_platform = -6,175 omp_ipr_device = -7,176 omp_ipr_device_context = -8,177 omp_ipr_targetsync = -9,178 omp_ipr_first = -9179 } omp_interop_property_t;180 181 #define omp_interop_none 0182 183 typedef enum omp_interop_rc {184 omp_irc_no_value = 1,185 omp_irc_success = 0,186 omp_irc_empty = -1,187 omp_irc_out_of_range = -2,188 omp_irc_type_int = -3,189 omp_irc_type_ptr = -4,190 omp_irc_type_str = -5,191 omp_irc_other = -6192 } omp_interop_rc_t;193 194 typedef enum omp_interop_fr {195 omp_ifr_cuda = 1,196 omp_ifr_cuda_driver = 2,197 omp_ifr_opencl = 3,198 omp_ifr_sycl = 4,199 omp_ifr_hip = 5,200 omp_ifr_level_zero = 6,201 omp_ifr_last = 7202 } omp_interop_fr_t;203 204 typedef void * omp_interop_t;205 206 /*!207 * The `omp_get_num_interop_properties` routine retrieves the number of implementation-defined properties available for an `omp_interop_t` object.208 */209 extern int __KAI_KMPC_CONVENTION omp_get_num_interop_properties(const omp_interop_t);210 /*!211 * The `omp_get_interop_int` routine retrieves an integer property from an `omp_interop_t` object.212 */213 extern omp_intptr_t __KAI_KMPC_CONVENTION omp_get_interop_int(const omp_interop_t, omp_interop_property_t, int *);214 /*!215 * The `omp_get_interop_ptr` routine retrieves a pointer property from an `omp_interop_t` object.216 */217 extern void * __KAI_KMPC_CONVENTION omp_get_interop_ptr(const omp_interop_t, omp_interop_property_t, int *);218 /*!219 * The `omp_get_interop_str` routine retrieves a string property from an `omp_interop_t` object.220 */221 extern const char * __KAI_KMPC_CONVENTION omp_get_interop_str(const omp_interop_t, omp_interop_property_t, int *);222 /*!223 * The `omp_get_interop_name` routine retrieves a property name from an `omp_interop_t` object.224 */225 extern const char * __KAI_KMPC_CONVENTION omp_get_interop_name(const omp_interop_t, omp_interop_property_t);226 /*!227 * The `omp_get_interop_type_desc` routine retrieves a description of the type of a property associated with an `omp_interop_t` object.228 */229 extern const char * __KAI_KMPC_CONVENTION omp_get_interop_type_desc(const omp_interop_t, omp_interop_property_t);230 /*!231 * The `omp_get_interop_rc_desc` routine retrieves a description of the return code associated with an `omp_interop_t` object.232 */233 extern const char * __KAI_KMPC_CONVENTION omp_get_interop_rc_desc(const omp_interop_t, omp_interop_rc_t);234 235 /* OpenMP 5.1 device memory routines */236 237 /*!238 * The `omp_target_memcpy_async` routine asynchronously performs a copy between any combination of host and device pointers.239 */240 extern int __KAI_KMPC_CONVENTION omp_target_memcpy_async(void *, const void *, size_t, size_t, size_t, int,241 int, int, omp_depend_t *);242 /*!243 * The `omp_target_memcpy_rect_async` routine asynchronously performs a copy between any combination of host and device pointers.244 */245 extern int __KAI_KMPC_CONVENTION omp_target_memcpy_rect_async(void *, const void *, size_t, int, const size_t *,246 const size_t *, const size_t *, const size_t *, const size_t *, int, int,247 int, omp_depend_t *);248 249 /* OpenMP 6.0 device memory routines */250 extern void * __KAI_KMPC_CONVENTION omp_target_memset(void *, int, size_t, int);251 extern void * __KAI_KMPC_CONVENTION omp_target_memset_async(void *, int, size_t, int, int, omp_depend_t *);252 253 /*!254 * The `omp_get_mapped_ptr` routine returns the device pointer that is associated with a host pointer for a given device.255 */256 extern void * __KAI_KMPC_CONVENTION omp_get_mapped_ptr(const void *, int);257 extern int __KAI_KMPC_CONVENTION omp_target_is_accessible(const void *, size_t, int);258 259 /* kmp API functions */260 extern int __KAI_KMPC_CONVENTION kmp_get_stacksize (void);261 extern void __KAI_KMPC_CONVENTION kmp_set_stacksize (int);262 extern size_t __KAI_KMPC_CONVENTION kmp_get_stacksize_s (void);263 extern void __KAI_KMPC_CONVENTION kmp_set_stacksize_s (size_t);264 extern int __KAI_KMPC_CONVENTION kmp_get_blocktime (void);265 extern int __KAI_KMPC_CONVENTION kmp_get_library (void);266 extern void __KAI_KMPC_CONVENTION kmp_set_blocktime (int);267 extern void __KAI_KMPC_CONVENTION kmp_set_library (int);268 extern void __KAI_KMPC_CONVENTION kmp_set_library_serial (void);269 extern void __KAI_KMPC_CONVENTION kmp_set_library_turnaround (void);270 extern void __KAI_KMPC_CONVENTION kmp_set_library_throughput (void);271 extern void __KAI_KMPC_CONVENTION kmp_set_defaults (char const *);272 extern void __KAI_KMPC_CONVENTION kmp_set_disp_num_buffers (int);273 274 /* Intel affinity API */275 typedef void * kmp_affinity_mask_t;276 277 extern int __KAI_KMPC_CONVENTION kmp_set_affinity (kmp_affinity_mask_t *);278 extern int __KAI_KMPC_CONVENTION kmp_get_affinity (kmp_affinity_mask_t *);279 extern int __KAI_KMPC_CONVENTION kmp_get_affinity_max_proc (void);280 extern void __KAI_KMPC_CONVENTION kmp_create_affinity_mask (kmp_affinity_mask_t *);281 extern void __KAI_KMPC_CONVENTION kmp_destroy_affinity_mask (kmp_affinity_mask_t *);282 extern int __KAI_KMPC_CONVENTION kmp_set_affinity_mask_proc (int, kmp_affinity_mask_t *);283 extern int __KAI_KMPC_CONVENTION kmp_unset_affinity_mask_proc (int, kmp_affinity_mask_t *);284 extern int __KAI_KMPC_CONVENTION kmp_get_affinity_mask_proc (int, kmp_affinity_mask_t *);285 286 /* OpenMP 4.0 affinity API */287 typedef enum omp_proc_bind_t {288 omp_proc_bind_false = 0,289 omp_proc_bind_true = 1,290 omp_proc_bind_master = 2,291 omp_proc_bind_close = 3,292 omp_proc_bind_spread = 4293 } omp_proc_bind_t;294 295 extern omp_proc_bind_t __KAI_KMPC_CONVENTION omp_get_proc_bind (void);296 297 /* OpenMP 4.5 affinity API */298 extern int __KAI_KMPC_CONVENTION omp_get_num_places (void);299 extern int __KAI_KMPC_CONVENTION omp_get_place_num_procs (int);300 extern void __KAI_KMPC_CONVENTION omp_get_place_proc_ids (int, int *);301 extern int __KAI_KMPC_CONVENTION omp_get_place_num (void);302 extern int __KAI_KMPC_CONVENTION omp_get_partition_num_places (void);303 extern void __KAI_KMPC_CONVENTION omp_get_partition_place_nums (int *);304 305 extern void * __KAI_KMPC_CONVENTION kmp_malloc (size_t);306 extern void * __KAI_KMPC_CONVENTION kmp_aligned_malloc (size_t, size_t);307 extern void * __KAI_KMPC_CONVENTION kmp_calloc (size_t, size_t);308 extern void * __KAI_KMPC_CONVENTION kmp_realloc (void *, size_t);309 extern void __KAI_KMPC_CONVENTION kmp_free (void *);310 311 extern void __KAI_KMPC_CONVENTION kmp_set_warnings_on(void);312 extern void __KAI_KMPC_CONVENTION kmp_set_warnings_off(void);313 314 /* OpenMP 5.0 Tool Control */315 typedef enum omp_control_tool_result_t {316 omp_control_tool_notool = -2,317 omp_control_tool_nocallback = -1,318 omp_control_tool_success = 0,319 omp_control_tool_ignored = 1320 } omp_control_tool_result_t;321 322 typedef enum omp_control_tool_t {323 omp_control_tool_start = 1,324 omp_control_tool_pause = 2,325 omp_control_tool_flush = 3,326 omp_control_tool_end = 4327 } omp_control_tool_t;328 329 extern int __KAI_KMPC_CONVENTION omp_control_tool(int, int, void*);330 331 /* OpenMP 5.0 Memory Management */332 typedef uintptr_t omp_uintptr_t;333 334 typedef enum {335 omp_atk_sync_hint = 1,336 omp_atk_alignment = 2,337 omp_atk_access = 3,338 omp_atk_pool_size = 4,339 omp_atk_fallback = 5,340 omp_atk_fb_data = 6,341 omp_atk_pinned = 7,342 omp_atk_partition = 8,343 omp_atk_pin_device = 9,344 omp_atk_preferred_device = 10,345 omp_atk_device_access = 11,346 omp_atk_target_access = 12,347 omp_atk_atomic_scope = 13,348 omp_atk_part_size = 14349 } omp_alloctrait_key_t;350 351 typedef enum {352 omp_atv_false = 0,353 omp_atv_true = 1,354 omp_atv_contended = 3,355 omp_atv_uncontended = 4,356 omp_atv_serialized = 5,357 omp_atv_sequential = omp_atv_serialized, // (deprecated)358 omp_atv_private = 6,359 omp_atv_device = 7,360 omp_atv_thread = 8,361 omp_atv_pteam = 9,362 omp_atv_cgroup = 10,363 omp_atv_default_mem_fb = 11,364 omp_atv_null_fb = 12,365 omp_atv_abort_fb = 13,366 omp_atv_allocator_fb = 14,367 omp_atv_environment = 15,368 omp_atv_nearest = 16,369 omp_atv_blocked = 17,370 omp_atv_interleaved = 18,371 omp_atv_all = 19,372 omp_atv_single = 20,373 omp_atv_multiple = 21,374 omp_atv_memspace = 22375 } omp_alloctrait_value_t;376 #define omp_atv_default ((omp_uintptr_t)-1)377 378 typedef struct {379 omp_alloctrait_key_t key;380 omp_uintptr_t value;381 } omp_alloctrait_t;382 383# if defined(_WIN32)384 // On Windows cl and icl do not support 64-bit enum, let's use integer then.385 typedef omp_uintptr_t omp_allocator_handle_t;386 extern __KMP_IMP omp_allocator_handle_t const omp_null_allocator;387 extern __KMP_IMP omp_allocator_handle_t const omp_default_mem_alloc;388 extern __KMP_IMP omp_allocator_handle_t const omp_large_cap_mem_alloc;389 extern __KMP_IMP omp_allocator_handle_t const omp_const_mem_alloc;390 extern __KMP_IMP omp_allocator_handle_t const omp_high_bw_mem_alloc;391 extern __KMP_IMP omp_allocator_handle_t const omp_low_lat_mem_alloc;392 extern __KMP_IMP omp_allocator_handle_t const omp_cgroup_mem_alloc;393 extern __KMP_IMP omp_allocator_handle_t const omp_pteam_mem_alloc;394 extern __KMP_IMP omp_allocator_handle_t const omp_thread_mem_alloc;395 extern __KMP_IMP omp_allocator_handle_t const llvm_omp_target_host_mem_alloc;396 extern __KMP_IMP omp_allocator_handle_t const llvm_omp_target_shared_mem_alloc;397 extern __KMP_IMP omp_allocator_handle_t const llvm_omp_target_device_mem_alloc;398 399 typedef omp_uintptr_t omp_memspace_handle_t;400 extern __KMP_IMP omp_memspace_handle_t const omp_null_mem_space;401 extern __KMP_IMP omp_memspace_handle_t const omp_default_mem_space;402 extern __KMP_IMP omp_memspace_handle_t const omp_large_cap_mem_space;403 extern __KMP_IMP omp_memspace_handle_t const omp_const_mem_space;404 extern __KMP_IMP omp_memspace_handle_t const omp_high_bw_mem_space;405 extern __KMP_IMP omp_memspace_handle_t const omp_low_lat_mem_space;406 extern __KMP_IMP omp_memspace_handle_t const llvm_omp_target_host_mem_space;407 extern __KMP_IMP omp_memspace_handle_t const llvm_omp_target_shared_mem_space;408 extern __KMP_IMP omp_memspace_handle_t const llvm_omp_target_device_mem_space;409# else410# if __cplusplus >= 201103411 typedef enum omp_allocator_handle_t : omp_uintptr_t412# else413 typedef enum omp_allocator_handle_t414# endif415 {416 omp_null_allocator = 0,417 omp_default_mem_alloc = 1,418 omp_large_cap_mem_alloc = 2,419 omp_const_mem_alloc = 3,420 omp_high_bw_mem_alloc = 4,421 omp_low_lat_mem_alloc = 5,422 omp_cgroup_mem_alloc = 6,423 omp_pteam_mem_alloc = 7,424 omp_thread_mem_alloc = 8,425 llvm_omp_target_host_mem_alloc = 100,426 llvm_omp_target_shared_mem_alloc = 101,427 llvm_omp_target_device_mem_alloc = 102,428 KMP_ALLOCATOR_MAX_HANDLE = UINTPTR_MAX429 } omp_allocator_handle_t;430# if __cplusplus >= 201103431 typedef enum omp_memspace_handle_t : omp_uintptr_t432# else433 typedef enum omp_memspace_handle_t434# endif435 {436 omp_null_mem_space = 0,437 omp_default_mem_space = 99,438 omp_large_cap_mem_space = 1,439 omp_const_mem_space = 2,440 omp_high_bw_mem_space = 3,441 omp_low_lat_mem_space = 4,442 llvm_omp_target_host_mem_space = 100,443 llvm_omp_target_shared_mem_space = 101,444 llvm_omp_target_device_mem_space = 102,445 KMP_MEMSPACE_MAX_HANDLE = UINTPTR_MAX446 } omp_memspace_handle_t;447# endif448 extern omp_allocator_handle_t __KAI_KMPC_CONVENTION omp_init_allocator(omp_memspace_handle_t m,449 int ntraits, omp_alloctrait_t traits[]);450 extern void __KAI_KMPC_CONVENTION omp_destroy_allocator(omp_allocator_handle_t allocator);451 452 extern void __KAI_KMPC_CONVENTION omp_set_default_allocator(omp_allocator_handle_t a);453 extern omp_allocator_handle_t __KAI_KMPC_CONVENTION omp_get_default_allocator(void);454# ifdef __cplusplus455 extern void *__KAI_KMPC_CONVENTION omp_alloc(size_t size, omp_allocator_handle_t a = omp_null_allocator);456 extern void *__KAI_KMPC_CONVENTION omp_aligned_alloc(size_t align, size_t size,457 omp_allocator_handle_t a = omp_null_allocator);458 extern void *__KAI_KMPC_CONVENTION omp_calloc(size_t nmemb, size_t size,459 omp_allocator_handle_t a = omp_null_allocator);460 extern void *__KAI_KMPC_CONVENTION omp_aligned_calloc(size_t align, size_t nmemb, size_t size,461 omp_allocator_handle_t a = omp_null_allocator);462 extern void *__KAI_KMPC_CONVENTION omp_realloc(void *ptr, size_t size,463 omp_allocator_handle_t allocator = omp_null_allocator,464 omp_allocator_handle_t free_allocator = omp_null_allocator);465 extern void __KAI_KMPC_CONVENTION omp_free(void * ptr, omp_allocator_handle_t a = omp_null_allocator);466# else467 extern void *__KAI_KMPC_CONVENTION omp_alloc(size_t size, omp_allocator_handle_t a);468 extern void *__KAI_KMPC_CONVENTION omp_aligned_alloc(size_t align, size_t size,469 omp_allocator_handle_t a);470 extern void *__KAI_KMPC_CONVENTION omp_calloc(size_t nmemb, size_t size, omp_allocator_handle_t a);471 extern void *__KAI_KMPC_CONVENTION omp_aligned_calloc(size_t align, size_t nmemb, size_t size,472 omp_allocator_handle_t a);473 extern void *__KAI_KMPC_CONVENTION omp_realloc(void *ptr, size_t size, omp_allocator_handle_t allocator,474 omp_allocator_handle_t free_allocator);475 extern void __KAI_KMPC_CONVENTION omp_free(void *ptr, omp_allocator_handle_t a);476# endif477 478 /* OpenMP TR11 routines to get memory spaces and allocators */479 extern omp_memspace_handle_t omp_get_devices_memspace(int ndevs, const int *devs, omp_memspace_handle_t memspace);480 extern omp_memspace_handle_t omp_get_device_memspace(int dev, omp_memspace_handle_t memspace);481 extern omp_memspace_handle_t omp_get_devices_and_host_memspace(int ndevs, const int *devs, omp_memspace_handle_t memspace);482 extern omp_memspace_handle_t omp_get_device_and_host_memspace(int dev, omp_memspace_handle_t memspace);483 extern omp_memspace_handle_t omp_get_devices_all_memspace(omp_memspace_handle_t memspace);484 extern omp_allocator_handle_t omp_get_devices_allocator(int ndevs, const int *devs, omp_memspace_handle_t memspace);485 extern omp_allocator_handle_t omp_get_device_allocator(int dev, omp_memspace_handle_t memspace);486 extern omp_allocator_handle_t omp_get_devices_and_host_allocator(int ndevs, const int *devs, omp_memspace_handle_t memspace);487 extern omp_allocator_handle_t omp_get_device_and_host_allocator(int dev, omp_memspace_handle_t memspace);488 extern omp_allocator_handle_t omp_get_devices_all_allocator(omp_memspace_handle_t memspace);489 extern int omp_get_memspace_num_resources(omp_memspace_handle_t memspace);490 extern omp_memspace_handle_t omp_get_submemspace(omp_memspace_handle_t memspace, int num_resources, int *resources);491 492 /* OpenMP 5.0 Affinity Format */493 extern void __KAI_KMPC_CONVENTION omp_set_affinity_format(char const *);494 extern size_t __KAI_KMPC_CONVENTION omp_get_affinity_format(char *, size_t);495 extern void __KAI_KMPC_CONVENTION omp_display_affinity(char const *);496 extern size_t __KAI_KMPC_CONVENTION omp_capture_affinity(char *, size_t, char const *);497 498 /* OpenMP 5.0 events */499# if defined(_WIN32)500 // On Windows cl and icl do not support 64-bit enum, let's use integer then.501 typedef omp_uintptr_t omp_event_handle_t;502# else503 typedef enum omp_event_handle_t { KMP_EVENT_MAX_HANDLE = UINTPTR_MAX } omp_event_handle_t;504# endif505 extern void __KAI_KMPC_CONVENTION omp_fulfill_event ( omp_event_handle_t event );506 507 /* OpenMP 5.0 Pause Resources */508 typedef enum omp_pause_resource_t {509 omp_pause_resume = 0,510 omp_pause_soft = 1,511 omp_pause_hard = 2,512 omp_pause_stop_tool = 3513 } omp_pause_resource_t;514 extern int __KAI_KMPC_CONVENTION omp_pause_resource(omp_pause_resource_t, int);515 extern int __KAI_KMPC_CONVENTION omp_pause_resource_all(omp_pause_resource_t);516 517 extern int __KAI_KMPC_CONVENTION omp_get_supported_active_levels(void);518 519 /* OpenMP 5.1 */520 extern void __KAI_KMPC_CONVENTION omp_set_num_teams(int num_teams);521 extern int __KAI_KMPC_CONVENTION omp_get_max_teams(void);522 extern void __KAI_KMPC_CONVENTION omp_set_teams_thread_limit(int limit);523 extern int __KAI_KMPC_CONVENTION omp_get_teams_thread_limit(void);524 525 /* OpenMP 5.1 Display Environment */526 extern void omp_display_env(int verbose);527 528# if defined(_OPENMP) && _OPENMP >= 201811529 #pragma omp begin declare variant match(device={kind(host)})530 static inline int omp_is_initial_device(void) { return 1; }531 #pragma omp end declare variant532 #pragma omp begin declare variant match(device={kind(nohost)})533 static inline int omp_is_initial_device(void) { return 0; }534 #pragma omp end declare variant535# endif536 537 /* OpenMP 5.2 */538 extern int __KAI_KMPC_CONVENTION omp_in_explicit_task(void);539 #define omp_invalid_device -2540 541 /* OpenMP 6.0 */542 extern int __KAI_KMPC_CONVENTION omp_get_device_from_uid(const char *DeviceUid);543 extern const char * __KAI_KMPC_CONVENTION omp_get_uid_from_device(int DeviceNum);544 545 /* LLVM Extensions */546 extern void *llvm_omp_target_dynamic_shared_alloc(void);547 548# undef __KAI_KMPC_CONVENTION549# undef __KMP_IMP550 551 /* Warning:552 The following typedefs are not standard, deprecated and will be removed in a future release.553 */554 typedef int omp_int_t;555 typedef double omp_wtime_t;556 557# ifdef __cplusplus558 }559# endif560 561#endif /* __OMP_H */562