1 /* Copyright (C) 2005-2020 Free Software Foundation, Inc.
2 Contributed by Richard Henderson <rth@redhat.com>.
4 This file is part of the GNU Offloading and Multi Processing Library
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)
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
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.
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/>. */
29 #if defined(__GNUC__) && _OPENMP >= 201811
30 # define __GOMP_DEPRECATED_5_0 __attribute__((__deprecated__))
32 # define __GOMP_DEPRECATED_5_0
35 #ifndef _LIBGOMP_OMP_LOCK_DEFINED
36 #define _LIBGOMP_OMP_LOCK_DEFINED 1
37 /* These two structures get edited by the libgomp build process to
38 reflect the shape of the two types. Their internals are private
43 unsigned char _x
[@OMP_LOCK_SIZE@
]
44 __attribute__((__aligned__(@OMP_LOCK_ALIGN@
)));
49 unsigned char _x
[@OMP_NEST_LOCK_SIZE@
]
50 __attribute__((__aligned__(@OMP_NEST_LOCK_ALIGN@
)));
54 typedef enum omp_sched_t
57 omp_sched_dynamic
= 2,
60 omp_sched_monotonic
= 0x80000000U
63 typedef enum omp_proc_bind_t
65 omp_proc_bind_false
= 0,
66 omp_proc_bind_true
= 1,
67 omp_proc_bind_master
= 2,
68 omp_proc_bind_close
= 3,
69 omp_proc_bind_spread
= 4
72 typedef enum omp_sync_hint_t
74 omp_sync_hint_none
= 0,
75 omp_lock_hint_none __GOMP_DEPRECATED_5_0
= omp_sync_hint_none
,
76 omp_sync_hint_uncontended
= 1,
77 omp_lock_hint_uncontended __GOMP_DEPRECATED_5_0
= omp_sync_hint_uncontended
,
78 omp_sync_hint_contended
= 2,
79 omp_lock_hint_contended __GOMP_DEPRECATED_5_0
= omp_sync_hint_contended
,
80 omp_sync_hint_nonspeculative
= 4,
81 omp_lock_hint_nonspeculative __GOMP_DEPRECATED_5_0
82 = omp_sync_hint_nonspeculative
,
83 omp_sync_hint_speculative
= 8,
84 omp_lock_hint_speculative __GOMP_DEPRECATED_5_0
= omp_sync_hint_speculative
87 typedef __GOMP_DEPRECATED_5_0 omp_sync_hint_t omp_lock_hint_t
;
89 typedef struct __attribute__((__aligned__ (sizeof (void *)))) omp_depend_t
91 char __omp_depend_t__
[2 * sizeof (void *)];
94 typedef enum omp_pause_resource_t
98 } omp_pause_resource_t
;
100 typedef __UINTPTR_TYPE__ omp_uintptr_t
;
102 #if __cplusplus >= 201103L
103 # define __GOMP_UINTPTR_T_ENUM : omp_uintptr_t
105 # define __GOMP_UINTPTR_T_ENUM
108 typedef enum omp_memspace_handle_t __GOMP_UINTPTR_T_ENUM
110 omp_default_mem_space
= 0,
111 omp_large_cap_mem_space
= 1,
112 omp_const_mem_space
= 2,
113 omp_high_bw_mem_space
= 3,
114 omp_low_lat_mem_space
= 4,
115 __omp_memspace_handle_t_max__
= __UINTPTR_MAX__
116 } omp_memspace_handle_t
;
118 typedef enum omp_allocator_handle_t __GOMP_UINTPTR_T_ENUM
120 omp_null_allocator
= 0,
121 omp_default_mem_alloc
= 1,
122 omp_large_cap_mem_alloc
= 2,
123 omp_const_mem_alloc
= 3,
124 omp_high_bw_mem_alloc
= 4,
125 omp_low_lat_mem_alloc
= 5,
126 omp_cgroup_mem_alloc
= 6,
127 omp_pteam_mem_alloc
= 7,
128 omp_thread_mem_alloc
= 8,
129 __omp_allocator_handle_t_max__
= __UINTPTR_MAX__
130 } omp_allocator_handle_t
;
132 typedef enum omp_alloctrait_key_t
134 omp_atk_sync_hint
= 1,
135 omp_atk_alignment
= 2,
137 omp_atk_pool_size
= 4,
138 omp_atk_fallback
= 5,
141 omp_atk_partition
= 8
142 } omp_alloctrait_key_t
;
144 typedef enum omp_alloctrait_value_t
146 omp_atv_default
= (__UINTPTR_TYPE__
) -1,
149 omp_atv_contended
= 3,
150 omp_atv_uncontended
= 4,
151 omp_atv_serialized
= 5,
152 omp_atv_sequential
= omp_atv_serialized
,
158 omp_atv_default_mem_fb
= 11,
159 omp_atv_null_fb
= 12,
160 omp_atv_abort_fb
= 13,
161 omp_atv_allocator_fb
= 14,
162 omp_atv_environment
= 15,
163 omp_atv_nearest
= 16,
164 omp_atv_blocked
= 17,
165 omp_atv_interleaved
= 18
166 } omp_alloctrait_value_t
;
168 typedef struct omp_alloctrait_t
170 omp_alloctrait_key_t key
;
176 # define __GOMP_NOTHROW throw ()
177 # define __GOMP_DEFAULT_NULL_ALLOCATOR = omp_null_allocator
179 # define __GOMP_NOTHROW __attribute__((__nothrow__))
180 # define __GOMP_DEFAULT_NULL_ALLOCATOR
183 extern void omp_set_num_threads (int) __GOMP_NOTHROW
;
184 extern int omp_get_num_threads (void) __GOMP_NOTHROW
;
185 extern int omp_get_max_threads (void) __GOMP_NOTHROW
;
186 extern int omp_get_thread_num (void) __GOMP_NOTHROW
;
187 extern int omp_get_num_procs (void) __GOMP_NOTHROW
;
189 extern int omp_in_parallel (void) __GOMP_NOTHROW
;
191 extern void omp_set_dynamic (int) __GOMP_NOTHROW
;
192 extern int omp_get_dynamic (void) __GOMP_NOTHROW
;
194 extern void omp_set_nested (int) __GOMP_NOTHROW __GOMP_DEPRECATED_5_0
;
195 extern int omp_get_nested (void) __GOMP_NOTHROW __GOMP_DEPRECATED_5_0
;
197 extern void omp_init_lock (omp_lock_t
*) __GOMP_NOTHROW
;
198 extern void omp_init_lock_with_hint (omp_lock_t
*, omp_sync_hint_t
)
200 extern void omp_destroy_lock (omp_lock_t
*) __GOMP_NOTHROW
;
201 extern void omp_set_lock (omp_lock_t
*) __GOMP_NOTHROW
;
202 extern void omp_unset_lock (omp_lock_t
*) __GOMP_NOTHROW
;
203 extern int omp_test_lock (omp_lock_t
*) __GOMP_NOTHROW
;
205 extern void omp_init_nest_lock (omp_nest_lock_t
*) __GOMP_NOTHROW
;
206 extern void omp_init_nest_lock_with_hint (omp_nest_lock_t
*, omp_sync_hint_t
)
208 extern void omp_destroy_nest_lock (omp_nest_lock_t
*) __GOMP_NOTHROW
;
209 extern void omp_set_nest_lock (omp_nest_lock_t
*) __GOMP_NOTHROW
;
210 extern void omp_unset_nest_lock (omp_nest_lock_t
*) __GOMP_NOTHROW
;
211 extern int omp_test_nest_lock (omp_nest_lock_t
*) __GOMP_NOTHROW
;
213 extern double omp_get_wtime (void) __GOMP_NOTHROW
;
214 extern double omp_get_wtick (void) __GOMP_NOTHROW
;
216 extern void omp_set_schedule (omp_sched_t
, int) __GOMP_NOTHROW
;
217 extern void omp_get_schedule (omp_sched_t
*, int *) __GOMP_NOTHROW
;
218 extern int omp_get_thread_limit (void) __GOMP_NOTHROW
;
219 extern void omp_set_max_active_levels (int) __GOMP_NOTHROW
;
220 extern int omp_get_max_active_levels (void) __GOMP_NOTHROW
;
221 extern int omp_get_supported_active_levels (void) __GOMP_NOTHROW
;
222 extern int omp_get_level (void) __GOMP_NOTHROW
;
223 extern int omp_get_ancestor_thread_num (int) __GOMP_NOTHROW
;
224 extern int omp_get_team_size (int) __GOMP_NOTHROW
;
225 extern int omp_get_active_level (void) __GOMP_NOTHROW
;
227 extern int omp_in_final (void) __GOMP_NOTHROW
;
229 extern int omp_get_cancellation (void) __GOMP_NOTHROW
;
230 extern omp_proc_bind_t
omp_get_proc_bind (void) __GOMP_NOTHROW
;
231 extern int omp_get_num_places (void) __GOMP_NOTHROW
;
232 extern int omp_get_place_num_procs (int) __GOMP_NOTHROW
;
233 extern void omp_get_place_proc_ids (int, int *) __GOMP_NOTHROW
;
234 extern int omp_get_place_num (void) __GOMP_NOTHROW
;
235 extern int omp_get_partition_num_places (void) __GOMP_NOTHROW
;
236 extern void omp_get_partition_place_nums (int *) __GOMP_NOTHROW
;
238 extern void omp_set_default_device (int) __GOMP_NOTHROW
;
239 extern int omp_get_default_device (void) __GOMP_NOTHROW
;
240 extern int omp_get_num_devices (void) __GOMP_NOTHROW
;
241 extern int omp_get_num_teams (void) __GOMP_NOTHROW
;
242 extern int omp_get_team_num (void) __GOMP_NOTHROW
;
244 extern int omp_is_initial_device (void) __GOMP_NOTHROW
;
245 extern int omp_get_initial_device (void) __GOMP_NOTHROW
;
246 extern int omp_get_max_task_priority (void) __GOMP_NOTHROW
;
248 extern void *omp_target_alloc (__SIZE_TYPE__
, int) __GOMP_NOTHROW
;
249 extern void omp_target_free (void *, int) __GOMP_NOTHROW
;
250 extern int omp_target_is_present (const void *, int) __GOMP_NOTHROW
;
251 extern int omp_target_memcpy (void *, const void *, __SIZE_TYPE__
,
252 __SIZE_TYPE__
, __SIZE_TYPE__
, int, int)
254 extern int omp_target_memcpy_rect (void *, const void *, __SIZE_TYPE__
, int,
255 const __SIZE_TYPE__
*,
256 const __SIZE_TYPE__
*,
257 const __SIZE_TYPE__
*,
258 const __SIZE_TYPE__
*,
259 const __SIZE_TYPE__
*, int, int)
261 extern int omp_target_associate_ptr (const void *, const void *, __SIZE_TYPE__
,
262 __SIZE_TYPE__
, int) __GOMP_NOTHROW
;
263 extern int omp_target_disassociate_ptr (const void *, int) __GOMP_NOTHROW
;
265 extern void omp_set_affinity_format (const char *) __GOMP_NOTHROW
;
266 extern __SIZE_TYPE__
omp_get_affinity_format (char *, __SIZE_TYPE__
)
268 extern void omp_display_affinity (const char *) __GOMP_NOTHROW
;
269 extern __SIZE_TYPE__
omp_capture_affinity (char *, __SIZE_TYPE__
, const char *)
272 extern int omp_pause_resource (omp_pause_resource_t
, int) __GOMP_NOTHROW
;
273 extern int omp_pause_resource_all (omp_pause_resource_t
) __GOMP_NOTHROW
;
275 extern omp_allocator_handle_t
omp_init_allocator (omp_memspace_handle_t
,
277 const omp_alloctrait_t
[])
279 extern void omp_destroy_allocator (omp_allocator_handle_t
) __GOMP_NOTHROW
;
280 extern void omp_set_default_allocator (omp_allocator_handle_t
) __GOMP_NOTHROW
;
281 extern omp_allocator_handle_t
omp_get_default_allocator (void) __GOMP_NOTHROW
;
282 extern void *omp_alloc (__SIZE_TYPE__
,
283 omp_allocator_handle_t __GOMP_DEFAULT_NULL_ALLOCATOR
)
284 __GOMP_NOTHROW
__attribute__((__malloc__
, __alloc_size__ (1)));
285 extern void omp_free (void *,
286 omp_allocator_handle_t __GOMP_DEFAULT_NULL_ALLOCATOR
)