1/*
2 * include/omp.h.var
3 */
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-exception
11//
12//===----------------------------------------------------------------------===//
13
14
15#ifndef __OMP_H
16# define __OMP_H
17
18# ifndef __has_include
19# define __has_include(x) 0
20# endif
21
22# include <stddef.h>
23# if (__has_include(<stdlib.h>))
24# include <stdlib.h>
25# endif
26# include <stdint.h>
27
28# define KMP_VERSION_MAJOR 5
29# define KMP_VERSION_MINOR 0
30# define KMP_VERSION_BUILD 20140926
31# define KMP_BUILD_DATE "No_Timestamp"
32
33# ifdef __cplusplus
34 extern "C" {
35# endif
36
37# define omp_set_affinity_format ompc_set_affinity_format
38# define omp_get_affinity_format ompc_get_affinity_format
39# define omp_display_affinity ompc_display_affinity
40# define omp_capture_affinity ompc_capture_affinity
41
42# if defined(_WIN32)
43# define __KAI_KMPC_CONVENTION __cdecl
44# ifndef __KMP_IMP
45# define __KMP_IMP __declspec(dllimport)
46# endif
47# else
48# define __KAI_KMPC_CONVENTION
49# ifndef __KMP_IMP
50# define __KMP_IMP
51# endif
52# endif
53
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 = 0x80000000
61 } 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 = -9
179 } omp_interop_property_t;
180
181 #define omp_interop_none 0
182
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 = -6
192 } 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 = 7
202 } 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 = 4
293 } 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 = 1
320 } 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 = 4
327 } 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 = 14
349 } 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 = 22
375 } 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# else
410# if __cplusplus >= 201103
411 typedef enum omp_allocator_handle_t : omp_uintptr_t
412# else
413 typedef enum omp_allocator_handle_t
414# endif
415 {
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_MAX
429 } omp_allocator_handle_t;
430# if __cplusplus >= 201103
431 typedef enum omp_memspace_handle_t : omp_uintptr_t
432# else
433 typedef enum omp_memspace_handle_t
434# endif
435 {
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_MAX
446 } omp_memspace_handle_t;
447# endif
448 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 __cplusplus
455 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# else
467 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# endif
477
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# else
503 typedef enum omp_event_handle_t { KMP_EVENT_MAX_HANDLE = UINTPTR_MAX } omp_event_handle_t;
504# endif
505 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 = 3
513 } 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 >= 201811
529 #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 variant
532 #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 variant
535# endif
536
537 /* OpenMP 5.2 */
538 extern int __KAI_KMPC_CONVENTION omp_in_explicit_task(void);
539
540 /* LLVM Extensions */
541 extern void *llvm_omp_target_dynamic_shared_alloc(void);
542
543# undef __KAI_KMPC_CONVENTION
544# undef __KMP_IMP
545
546 /* Warning:
547 The following typedefs are not standard, deprecated and will be removed in a future release.
548 */
549 typedef int omp_int_t;
550 typedef double omp_wtime_t;
551
552# ifdef __cplusplus
553 }
554# endif
555
556#endif /* __OMP_H */
557

Provided by KDAB

Privacy Policy
Update your C++ knowledge – Modern C++11/14/17 Training
Find out more

source code of llvm_build/projects/openmp/runtime/src/omp.h