1/* Copyright (C) 2005-2022 Free Software Foundation, Inc. 2 Contributed by Richard Henderson <rth@redhat.com>. 3 4 This file is part of the GNU Offloading and Multi Processing Library 5 (libgomp). 6 7 Libgomp is free software; you can redistribute it and/or modify it 8 under the terms of the GNU General Public License as published by 9 the Free Software Foundation; either version 3, or (at your option) 10 any later version. 11 12 Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY 13 WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS 14 FOR A PARTICULAR PURPOSE. See the GNU General Public License for 15 more details. 16 17 Under Section 7 of GPL version 3, you are granted additional 18 permissions described in the GCC Runtime Library Exception, version 19 3.1, as published by the Free Software Foundation. 20 21 You should have received a copy of the GNU General Public License and 22 a copy of the GCC Runtime Library Exception along with this program; 23 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 24 <http://www.gnu.org/licenses/>. */ 25 26#ifndef _OMP_H 27#define _OMP_H 1 28 29#if defined(__GNUC__) && _OPENMP >= 201811 30# define __GOMP_DEPRECATED_5_0 __attribute__((__deprecated__)) 31#else 32# define __GOMP_DEPRECATED_5_0 33#endif 34 35#if defined(__GNUC__) && _OPENMP >= 202011 36# define __GOMP_DEPRECATED_5_1 __attribute__((__deprecated__)) 37#else 38# define __GOMP_DEPRECATED_5_1 39#endif 40 41#ifndef _LIBGOMP_OMP_LOCK_DEFINED 42#define _LIBGOMP_OMP_LOCK_DEFINED 1 43/* These two structures get edited by the libgomp build process to 44 reflect the shape of the two types. Their internals are private 45 to the library. */ 46 47typedef struct 48{ 49 unsigned char _x[@OMP_LOCK_SIZE@] 50 __attribute__((__aligned__(@OMP_LOCK_ALIGN@))); 51} omp_lock_t; 52 53typedef struct 54{ 55 unsigned char _x[@OMP_NEST_LOCK_SIZE@] 56 __attribute__((__aligned__(@OMP_NEST_LOCK_ALIGN@))); 57} omp_nest_lock_t; 58#endif 59 60typedef enum omp_sched_t 61{ 62 omp_sched_static = 1, 63 omp_sched_dynamic = 2, 64 omp_sched_guided = 3, 65 omp_sched_auto = 4, 66 omp_sched_monotonic = 0x80000000U 67} omp_sched_t; 68 69typedef enum omp_proc_bind_t 70{ 71 omp_proc_bind_false = 0, 72 omp_proc_bind_true = 1, 73 omp_proc_bind_primary = 2, 74 omp_proc_bind_master __GOMP_DEPRECATED_5_1 75 = omp_proc_bind_primary, 76 omp_proc_bind_close = 3, 77 omp_proc_bind_spread = 4 78} omp_proc_bind_t; 79 80typedef enum omp_sync_hint_t 81{ 82 omp_sync_hint_none = 0, 83 omp_lock_hint_none __GOMP_DEPRECATED_5_0 = omp_sync_hint_none, 84 omp_sync_hint_uncontended = 1, 85 omp_lock_hint_uncontended __GOMP_DEPRECATED_5_0 = omp_sync_hint_uncontended, 86 omp_sync_hint_contended = 2, 87 omp_lock_hint_contended __GOMP_DEPRECATED_5_0 = omp_sync_hint_contended, 88 omp_sync_hint_nonspeculative = 4, 89 omp_lock_hint_nonspeculative __GOMP_DEPRECATED_5_0 90 = omp_sync_hint_nonspeculative, 91 omp_sync_hint_speculative = 8, 92 omp_lock_hint_speculative __GOMP_DEPRECATED_5_0 = omp_sync_hint_speculative 93} omp_sync_hint_t; 94 95typedef __GOMP_DEPRECATED_5_0 omp_sync_hint_t omp_lock_hint_t; 96 97typedef struct __attribute__((__aligned__ (sizeof (void *)))) omp_depend_t 98{ 99 char __omp_depend_t__[2 * sizeof (void *)]; 100} omp_depend_t; 101 102typedef enum omp_pause_resource_t 103{ 104 omp_pause_soft = 1, 105 omp_pause_hard = 2 106} omp_pause_resource_t; 107 108typedef __UINTPTR_TYPE__ omp_uintptr_t; 109 110#if __cplusplus >= 201103L 111# define __GOMP_UINTPTR_T_ENUM : omp_uintptr_t 112#else 113# define __GOMP_UINTPTR_T_ENUM 114#endif 115 116typedef enum omp_memspace_handle_t __GOMP_UINTPTR_T_ENUM 117{ 118 omp_default_mem_space = 0, 119 omp_large_cap_mem_space = 1, 120 omp_const_mem_space = 2, 121 omp_high_bw_mem_space = 3, 122 omp_low_lat_mem_space = 4, 123 __omp_memspace_handle_t_max__ = __UINTPTR_MAX__ 124} omp_memspace_handle_t; 125 126typedef enum omp_allocator_handle_t __GOMP_UINTPTR_T_ENUM 127{ 128 omp_null_allocator = 0, 129 omp_default_mem_alloc = 1, 130 omp_large_cap_mem_alloc = 2, 131 omp_const_mem_alloc = 3, 132 omp_high_bw_mem_alloc = 4, 133 omp_low_lat_mem_alloc = 5, 134 omp_cgroup_mem_alloc = 6, 135 omp_pteam_mem_alloc = 7, 136 omp_thread_mem_alloc = 8, 137 __omp_allocator_handle_t_max__ = __UINTPTR_MAX__ 138} omp_allocator_handle_t; 139 140typedef enum omp_alloctrait_key_t 141{ 142 omp_atk_sync_hint = 1, 143 omp_atk_alignment = 2, 144 omp_atk_access = 3, 145 omp_atk_pool_size = 4, 146 omp_atk_fallback = 5, 147 omp_atk_fb_data = 6, 148 omp_atk_pinned = 7, 149 omp_atk_partition = 8 150} omp_alloctrait_key_t; 151 152typedef enum omp_alloctrait_value_t 153{ 154 omp_atv_default = (__UINTPTR_TYPE__) -1, 155 omp_atv_false = 0, 156 omp_atv_true = 1, 157 omp_atv_contended = 3, 158 omp_atv_uncontended = 4, 159 omp_atv_serialized = 5, 160 omp_atv_sequential __GOMP_DEPRECATED_5_1 = omp_atv_serialized, 161 omp_atv_private = 6, 162 omp_atv_all = 7, 163 omp_atv_thread = 8, 164 omp_atv_pteam = 9, 165 omp_atv_cgroup = 10, 166 omp_atv_default_mem_fb = 11, 167 omp_atv_null_fb = 12, 168 omp_atv_abort_fb = 13, 169 omp_atv_allocator_fb = 14, 170 omp_atv_environment = 15, 171 omp_atv_nearest = 16, 172 omp_atv_blocked = 17, 173 omp_atv_interleaved = 18 174} omp_alloctrait_value_t; 175 176typedef struct omp_alloctrait_t 177{ 178 omp_alloctrait_key_t key; 179 omp_uintptr_t value; 180} omp_alloctrait_t; 181 182typedef enum omp_event_handle_t __GOMP_UINTPTR_T_ENUM 183{ 184 __omp_event_handle_t_max__ = __UINTPTR_MAX__ 185} omp_event_handle_t; 186 187#ifdef __cplusplus 188extern "C" { 189# define __GOMP_NOTHROW throw () 190# define __GOMP_DEFAULT_NULL_ALLOCATOR = omp_null_allocator 191#else 192# define __GOMP_NOTHROW __attribute__((__nothrow__)) 193# define __GOMP_DEFAULT_NULL_ALLOCATOR 194#endif 195 196extern void omp_set_num_threads (int) __GOMP_NOTHROW; 197extern int omp_get_num_threads (void) __GOMP_NOTHROW; 198extern int omp_get_max_threads (void) __GOMP_NOTHROW; 199extern int omp_get_thread_num (void) __GOMP_NOTHROW; 200extern int omp_get_num_procs (void) __GOMP_NOTHROW; 201 202extern int omp_in_parallel (void) __GOMP_NOTHROW; 203 204extern void omp_set_dynamic (int) __GOMP_NOTHROW; 205extern int omp_get_dynamic (void) __GOMP_NOTHROW; 206 207extern void omp_set_nested (int) __GOMP_NOTHROW __GOMP_DEPRECATED_5_0; 208extern int omp_get_nested (void) __GOMP_NOTHROW __GOMP_DEPRECATED_5_0; 209 210extern void omp_init_lock (omp_lock_t *) __GOMP_NOTHROW; 211extern void omp_init_lock_with_hint (omp_lock_t *, omp_sync_hint_t) 212 __GOMP_NOTHROW; 213extern void omp_destroy_lock (omp_lock_t *) __GOMP_NOTHROW; 214extern void omp_set_lock (omp_lock_t *) __GOMP_NOTHROW; 215extern void omp_unset_lock (omp_lock_t *) __GOMP_NOTHROW; 216extern int omp_test_lock (omp_lock_t *) __GOMP_NOTHROW; 217 218extern void omp_init_nest_lock (omp_nest_lock_t *) __GOMP_NOTHROW; 219extern void omp_init_nest_lock_with_hint (omp_nest_lock_t *, omp_sync_hint_t) 220 __GOMP_NOTHROW; 221extern void omp_destroy_nest_lock (omp_nest_lock_t *) __GOMP_NOTHROW; 222extern void omp_set_nest_lock (omp_nest_lock_t *) __GOMP_NOTHROW; 223extern void omp_unset_nest_lock (omp_nest_lock_t *) __GOMP_NOTHROW; 224extern int omp_test_nest_lock (omp_nest_lock_t *) __GOMP_NOTHROW; 225 226extern double omp_get_wtime (void) __GOMP_NOTHROW; 227extern double omp_get_wtick (void) __GOMP_NOTHROW; 228 229extern void omp_set_schedule (omp_sched_t, int) __GOMP_NOTHROW; 230extern void omp_get_schedule (omp_sched_t *, int *) __GOMP_NOTHROW; 231extern int omp_get_thread_limit (void) __GOMP_NOTHROW; 232extern void omp_set_max_active_levels (int) __GOMP_NOTHROW; 233extern int omp_get_max_active_levels (void) __GOMP_NOTHROW; 234extern int omp_get_supported_active_levels (void) __GOMP_NOTHROW; 235extern int omp_get_level (void) __GOMP_NOTHROW; 236extern int omp_get_ancestor_thread_num (int) __GOMP_NOTHROW; 237extern int omp_get_team_size (int) __GOMP_NOTHROW; 238extern int omp_get_active_level (void) __GOMP_NOTHROW; 239 240extern int omp_in_final (void) __GOMP_NOTHROW; 241 242extern int omp_get_cancellation (void) __GOMP_NOTHROW; 243extern omp_proc_bind_t omp_get_proc_bind (void) __GOMP_NOTHROW; 244extern int omp_get_num_places (void) __GOMP_NOTHROW; 245extern int omp_get_place_num_procs (int) __GOMP_NOTHROW; 246extern void omp_get_place_proc_ids (int, int *) __GOMP_NOTHROW; 247extern int omp_get_place_num (void) __GOMP_NOTHROW; 248extern int omp_get_partition_num_places (void) __GOMP_NOTHROW; 249extern void omp_get_partition_place_nums (int *) __GOMP_NOTHROW; 250 251extern void omp_set_default_device (int) __GOMP_NOTHROW; 252extern int omp_get_default_device (void) __GOMP_NOTHROW; 253extern int omp_get_num_devices (void) __GOMP_NOTHROW; 254extern int omp_get_device_num (void) __GOMP_NOTHROW; 255extern int omp_get_num_teams (void) __GOMP_NOTHROW; 256extern int omp_get_team_num (void) __GOMP_NOTHROW; 257 258extern int omp_is_initial_device (void) __GOMP_NOTHROW; 259extern int omp_get_initial_device (void) __GOMP_NOTHROW; 260extern int omp_get_max_task_priority (void) __GOMP_NOTHROW; 261 262extern void omp_fulfill_event (omp_event_handle_t) __GOMP_NOTHROW; 263 264extern void omp_set_num_teams (int) __GOMP_NOTHROW; 265extern int omp_get_max_teams (void) __GOMP_NOTHROW; 266extern void omp_set_teams_thread_limit (int) __GOMP_NOTHROW; 267extern int omp_get_teams_thread_limit (void) __GOMP_NOTHROW; 268 269extern void *omp_target_alloc (__SIZE_TYPE__, int) __GOMP_NOTHROW; 270extern void omp_target_free (void *, int) __GOMP_NOTHROW; 271extern int omp_target_is_present (const void *, int) __GOMP_NOTHROW; 272extern int omp_target_memcpy (void *, const void *, __SIZE_TYPE__, 273 __SIZE_TYPE__, __SIZE_TYPE__, int, int) 274 __GOMP_NOTHROW; 275extern int omp_target_memcpy_rect (void *, const void *, __SIZE_TYPE__, int, 276 const __SIZE_TYPE__ *, 277 const __SIZE_TYPE__ *, 278 const __SIZE_TYPE__ *, 279 const __SIZE_TYPE__ *, 280 const __SIZE_TYPE__ *, int, int) 281 __GOMP_NOTHROW; 282extern int omp_target_associate_ptr (const void *, const void *, __SIZE_TYPE__, 283 __SIZE_TYPE__, int) __GOMP_NOTHROW; 284extern int omp_target_disassociate_ptr (const void *, int) __GOMP_NOTHROW; 285 286extern void omp_set_affinity_format (const char *) __GOMP_NOTHROW; 287extern __SIZE_TYPE__ omp_get_affinity_format (char *, __SIZE_TYPE__) 288 __GOMP_NOTHROW; 289extern void omp_display_affinity (const char *) __GOMP_NOTHROW; 290extern __SIZE_TYPE__ omp_capture_affinity (char *, __SIZE_TYPE__, const char *) 291 __GOMP_NOTHROW; 292 293extern int omp_pause_resource (omp_pause_resource_t, int) __GOMP_NOTHROW; 294extern int omp_pause_resource_all (omp_pause_resource_t) __GOMP_NOTHROW; 295 296extern omp_allocator_handle_t omp_init_allocator (omp_memspace_handle_t, 297 int, 298 const omp_alloctrait_t []) 299 __GOMP_NOTHROW; 300extern void omp_destroy_allocator (omp_allocator_handle_t) __GOMP_NOTHROW; 301extern void omp_set_default_allocator (omp_allocator_handle_t) __GOMP_NOTHROW; 302extern omp_allocator_handle_t omp_get_default_allocator (void) __GOMP_NOTHROW; 303extern void omp_free (void *, 304 omp_allocator_handle_t __GOMP_DEFAULT_NULL_ALLOCATOR) 305 __GOMP_NOTHROW; 306extern void *omp_alloc (__SIZE_TYPE__, 307 omp_allocator_handle_t __GOMP_DEFAULT_NULL_ALLOCATOR) 308 __GOMP_NOTHROW __attribute__((__malloc__, __malloc__ (omp_free), 309 __alloc_size__ (1))); 310extern void *omp_aligned_alloc (__SIZE_TYPE__, __SIZE_TYPE__, 311 omp_allocator_handle_t 312 __GOMP_DEFAULT_NULL_ALLOCATOR) 313 __GOMP_NOTHROW __attribute__((__malloc__, __malloc__ (omp_free), 314 __alloc_size__ (2), __alloc_align__ (1))); 315extern void *omp_calloc (__SIZE_TYPE__, __SIZE_TYPE__, 316 omp_allocator_handle_t __GOMP_DEFAULT_NULL_ALLOCATOR) 317 __GOMP_NOTHROW __attribute__((__malloc__, __malloc__ (omp_free), 318 __alloc_size__ (1, 2))); 319extern void *omp_aligned_calloc (__SIZE_TYPE__, __SIZE_TYPE__, __SIZE_TYPE__, 320 omp_allocator_handle_t 321 __GOMP_DEFAULT_NULL_ALLOCATOR) 322 __GOMP_NOTHROW __attribute__((__malloc__, __malloc__ (omp_free), 323 __alloc_size__ (2, 3), __alloc_align__ (1))); 324extern void *omp_realloc (void *, __SIZE_TYPE__, 325 omp_allocator_handle_t __GOMP_DEFAULT_NULL_ALLOCATOR, 326 omp_allocator_handle_t __GOMP_DEFAULT_NULL_ALLOCATOR) 327 __GOMP_NOTHROW __attribute__((__malloc__ (omp_free), __alloc_size__ (2))); 328 329extern void omp_display_env (int) __GOMP_NOTHROW; 330 331#ifdef __cplusplus 332} 333#endif 334 335#endif /* _OMP_H */ 336