14 #error The support file kmp_ftn_entry.h should not be compiled by itself.
28 #include "ompt-specific.h"
43 #ifdef KMP_GOMP_COMPAT
44 #if (KMP_FTN_ENTRIES == KMP_FTN_PLAIN) || (KMP_FTN_ENTRIES == KMP_FTN_UPPER)
45 #define PASS_ARGS_BY_VALUE 1
49 #if (KMP_FTN_ENTRIES == KMP_FTN_PLAIN) || (KMP_FTN_ENTRIES == KMP_FTN_APPEND)
50 #define PASS_ARGS_BY_VALUE 1
55 #ifdef PASS_ARGS_BY_VALUE
65 #if KMP_FTN_ENTRIES == KMP_FTN_APPEND
66 #define KMP_EXPAND_NAME_IF_APPEND(name) KMP_EXPAND_NAME(name)
68 #define KMP_EXPAND_NAME_IF_APPEND(name) name
71 void FTN_STDCALL FTN_SET_STACKSIZE(
int KMP_DEREF arg) {
73 __kmps_set_stacksize(KMP_DEREF arg);
76 __kmp_aux_set_stacksize((
size_t)KMP_DEREF arg);
80 void FTN_STDCALL FTN_SET_STACKSIZE_S(
size_t KMP_DEREF arg) {
82 __kmps_set_stacksize(KMP_DEREF arg);
85 __kmp_aux_set_stacksize(KMP_DEREF arg);
89 int FTN_STDCALL FTN_GET_STACKSIZE(
void) {
91 return (
int)__kmps_get_stacksize();
93 if (!__kmp_init_serial) {
94 __kmp_serial_initialize();
96 return (
int)__kmp_stksize;
100 size_t FTN_STDCALL FTN_GET_STACKSIZE_S(
void) {
102 return __kmps_get_stacksize();
104 if (!__kmp_init_serial) {
105 __kmp_serial_initialize();
107 return __kmp_stksize;
111 void FTN_STDCALL FTN_SET_BLOCKTIME(
int KMP_DEREF arg) {
113 __kmps_set_blocktime(KMP_DEREF arg);
115 int gtid, tid, bt = (KMP_DEREF arg);
118 gtid = __kmp_entry_gtid();
119 tid = __kmp_tid_from_gtid(gtid);
120 thread = __kmp_thread_from_gtid(gtid);
122 __kmp_aux_convert_blocktime(&bt);
123 __kmp_aux_set_blocktime(bt, thread, tid);
128 int FTN_STDCALL FTN_GET_BLOCKTIME(
void) {
130 return __kmps_get_blocktime();
135 gtid = __kmp_entry_gtid();
136 tid = __kmp_tid_from_gtid(gtid);
137 team = __kmp_threads[gtid]->th.th_team;
140 if (__kmp_dflt_blocktime == KMP_MAX_BLOCKTIME) {
141 KF_TRACE(10, (
"kmp_get_blocktime: T#%d(%d:%d), blocktime=%d%cs\n", gtid,
142 team->t.t_id, tid, KMP_MAX_BLOCKTIME, __kmp_blocktime_units));
143 return KMP_MAX_BLOCKTIME;
145 #ifdef KMP_ADJUST_BLOCKTIME
146 else if (__kmp_zero_bt && !get__bt_set(team, tid)) {
147 KF_TRACE(10, (
"kmp_get_blocktime: T#%d(%d:%d), blocktime=%d%cs\n", gtid,
148 team->t.t_id, tid, 0, __kmp_blocktime_units));
153 int bt = get__blocktime(team, tid);
154 if (__kmp_blocktime_units ==
'm')
156 KF_TRACE(10, (
"kmp_get_blocktime: T#%d(%d:%d), blocktime=%d%cs\n", gtid,
157 team->t.t_id, tid, bt, __kmp_blocktime_units));
163 void FTN_STDCALL FTN_SET_LIBRARY_SERIAL(
void) {
165 __kmps_set_library(library_serial);
168 __kmp_user_set_library(library_serial);
172 void FTN_STDCALL FTN_SET_LIBRARY_TURNAROUND(
void) {
174 __kmps_set_library(library_turnaround);
177 __kmp_user_set_library(library_turnaround);
181 void FTN_STDCALL FTN_SET_LIBRARY_THROUGHPUT(
void) {
183 __kmps_set_library(library_throughput);
186 __kmp_user_set_library(library_throughput);
190 void FTN_STDCALL FTN_SET_LIBRARY(
int KMP_DEREF arg) {
192 __kmps_set_library(KMP_DEREF arg);
194 enum library_type lib;
195 lib = (
enum library_type)KMP_DEREF arg;
197 __kmp_user_set_library(lib);
201 int FTN_STDCALL FTN_GET_LIBRARY(
void) {
203 return __kmps_get_library();
205 if (!__kmp_init_serial) {
206 __kmp_serial_initialize();
208 return ((
int)__kmp_library);
212 void FTN_STDCALL FTN_SET_DISP_NUM_BUFFERS(
int KMP_DEREF arg) {
218 int num_buffers = KMP_DEREF arg;
219 if (__kmp_init_serial == FALSE && num_buffers >= KMP_MIN_DISP_NUM_BUFF &&
220 num_buffers <= KMP_MAX_DISP_NUM_BUFF) {
221 __kmp_dispatch_num_buffers = num_buffers;
226 int FTN_STDCALL FTN_SET_AFFINITY(
void **mask) {
227 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
230 if (!TCR_4(__kmp_init_middle)) {
231 __kmp_middle_initialize();
233 __kmp_assign_root_init_mask();
234 return __kmp_aux_set_affinity(mask);
238 int FTN_STDCALL FTN_GET_AFFINITY(
void **mask) {
239 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
242 if (!TCR_4(__kmp_init_middle)) {
243 __kmp_middle_initialize();
245 __kmp_assign_root_init_mask();
246 int gtid = __kmp_get_gtid();
247 if (__kmp_threads[gtid]->th.th_team->t.t_level == 0 &&
248 __kmp_affinity.flags.reset) {
249 __kmp_reset_root_init_mask(gtid);
251 return __kmp_aux_get_affinity(mask);
255 int FTN_STDCALL FTN_GET_AFFINITY_MAX_PROC(
void) {
256 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
260 if (!TCR_4(__kmp_init_middle)) {
261 __kmp_middle_initialize();
263 __kmp_assign_root_init_mask();
264 return __kmp_aux_get_affinity_max_proc();
268 void FTN_STDCALL FTN_CREATE_AFFINITY_MASK(
void **mask) {
269 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
273 kmp_affin_mask_t *mask_internals;
274 if (!TCR_4(__kmp_init_middle)) {
275 __kmp_middle_initialize();
277 __kmp_assign_root_init_mask();
278 mask_internals = __kmp_affinity_dispatch->allocate_mask();
279 KMP_CPU_ZERO(mask_internals);
280 *mask = mask_internals;
284 void FTN_STDCALL FTN_DESTROY_AFFINITY_MASK(
void **mask) {
285 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
289 kmp_affin_mask_t *mask_internals;
290 if (!TCR_4(__kmp_init_middle)) {
291 __kmp_middle_initialize();
293 __kmp_assign_root_init_mask();
294 if (__kmp_env_consistency_check) {
296 KMP_FATAL(AffinityInvalidMask,
"kmp_destroy_affinity_mask");
299 mask_internals = (kmp_affin_mask_t *)(*mask);
300 __kmp_affinity_dispatch->deallocate_mask(mask_internals);
305 int FTN_STDCALL FTN_SET_AFFINITY_MASK_PROC(
int KMP_DEREF proc,
void **mask) {
306 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
309 if (!TCR_4(__kmp_init_middle)) {
310 __kmp_middle_initialize();
312 __kmp_assign_root_init_mask();
313 return __kmp_aux_set_affinity_mask_proc(KMP_DEREF proc, mask);
317 int FTN_STDCALL FTN_UNSET_AFFINITY_MASK_PROC(
int KMP_DEREF proc,
void **mask) {
318 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
321 if (!TCR_4(__kmp_init_middle)) {
322 __kmp_middle_initialize();
324 __kmp_assign_root_init_mask();
325 return __kmp_aux_unset_affinity_mask_proc(KMP_DEREF proc, mask);
329 int FTN_STDCALL FTN_GET_AFFINITY_MASK_PROC(
int KMP_DEREF proc,
void **mask) {
330 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
333 if (!TCR_4(__kmp_init_middle)) {
334 __kmp_middle_initialize();
336 __kmp_assign_root_init_mask();
337 return __kmp_aux_get_affinity_mask_proc(KMP_DEREF proc, mask);
344 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NUM_THREADS)(
int KMP_DEREF arg) {
348 __kmp_set_num_threads(KMP_DEREF arg, __kmp_entry_gtid());
353 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_THREADS)(void) {
362 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_MAX_THREADS)(void) {
368 if (!TCR_4(__kmp_init_middle)) {
369 __kmp_middle_initialize();
371 gtid = __kmp_entry_gtid();
372 thread = __kmp_threads[gtid];
373 #if KMP_AFFINITY_SUPPORTED
374 if (thread->th.th_team->t.t_level == 0 && !__kmp_affinity.flags.reset) {
375 __kmp_assign_root_init_mask();
380 return thread->th.th_current_task->td_icvs.nproc;
384 int FTN_STDCALL FTN_CONTROL_TOOL(
int command,
int modifier,
void *arg) {
385 #if defined(KMP_STUB) || !OMPT_SUPPORT
388 OMPT_STORE_RETURN_ADDRESS(__kmp_entry_gtid());
389 if (!TCR_4(__kmp_init_middle)) {
392 kmp_info_t *this_thr = __kmp_threads[__kmp_entry_gtid()];
393 ompt_task_info_t *parent_task_info = OMPT_CUR_TASK_INFO(this_thr);
394 parent_task_info->frame.enter_frame.ptr = OMPT_GET_FRAME_ADDRESS(0);
395 int ret = __kmp_control_tool(command, modifier, arg);
396 parent_task_info->frame.enter_frame.ptr = 0;
402 omp_allocator_handle_t FTN_STDCALL
403 FTN_INIT_ALLOCATOR(omp_memspace_handle_t KMP_DEREF m,
int KMP_DEREF ntraits,
404 omp_alloctrait_t tr[]) {
408 return __kmpc_init_allocator(__kmp_entry_gtid(), KMP_DEREF m,
409 KMP_DEREF ntraits, tr);
413 void FTN_STDCALL FTN_DESTROY_ALLOCATOR(omp_allocator_handle_t al) {
415 __kmpc_destroy_allocator(__kmp_entry_gtid(), al);
418 void FTN_STDCALL FTN_SET_DEFAULT_ALLOCATOR(omp_allocator_handle_t al) {
420 __kmpc_set_default_allocator(__kmp_entry_gtid(), al);
423 omp_allocator_handle_t FTN_STDCALL FTN_GET_DEFAULT_ALLOCATOR(
void) {
427 return __kmpc_get_default_allocator(__kmp_entry_gtid());
432 omp_memspace_handle_t FTN_STDCALL
433 FTN_GET_DEVICES_MEMSPACE(
int KMP_DEREF ndevs,
const int *devs,
434 omp_memspace_handle_t KMP_DEREF memspace) {
438 return __kmp_get_devices_memspace(KMP_DEREF ndevs, devs, KMP_DEREF memspace,
443 omp_memspace_handle_t FTN_STDCALL FTN_GET_DEVICE_MEMSPACE(
444 int KMP_DEREF dev, omp_memspace_handle_t KMP_DEREF memspace) {
448 int dev_num = KMP_DEREF dev;
449 return __kmp_get_devices_memspace(1, &dev_num, KMP_DEREF memspace, 0);
453 omp_memspace_handle_t FTN_STDCALL
454 FTN_GET_DEVICES_AND_HOST_MEMSPACE(
int KMP_DEREF ndevs,
const int *devs,
455 omp_memspace_handle_t KMP_DEREF memspace) {
459 return __kmp_get_devices_memspace(KMP_DEREF ndevs, devs, KMP_DEREF memspace,
464 omp_memspace_handle_t FTN_STDCALL FTN_GET_DEVICE_AND_HOST_MEMSPACE(
465 int KMP_DEREF dev, omp_memspace_handle_t KMP_DEREF memspace) {
469 int dev_num = KMP_DEREF dev;
470 return __kmp_get_devices_memspace(1, &dev_num, KMP_DEREF memspace, 1);
474 omp_memspace_handle_t FTN_STDCALL
475 FTN_GET_DEVICES_ALL_MEMSPACE(omp_memspace_handle_t KMP_DEREF memspace) {
479 return __kmp_get_devices_memspace(0, NULL, KMP_DEREF memspace, 1);
483 omp_allocator_handle_t FTN_STDCALL
484 FTN_GET_DEVICES_ALLOCATOR(
int KMP_DEREF ndevs,
const int *devs,
485 omp_allocator_handle_t KMP_DEREF memspace) {
489 return __kmp_get_devices_allocator(KMP_DEREF ndevs, devs, KMP_DEREF memspace,
494 omp_allocator_handle_t FTN_STDCALL FTN_GET_DEVICE_ALLOCATOR(
495 int KMP_DEREF dev, omp_allocator_handle_t KMP_DEREF memspace) {
499 int dev_num = KMP_DEREF dev;
500 return __kmp_get_devices_allocator(1, &dev_num, KMP_DEREF memspace, 0);
504 omp_allocator_handle_t FTN_STDCALL
505 FTN_GET_DEVICES_AND_HOST_ALLOCATOR(
int KMP_DEREF ndevs,
const int *devs,
506 omp_allocator_handle_t KMP_DEREF memspace) {
510 return __kmp_get_devices_allocator(KMP_DEREF ndevs, devs, KMP_DEREF memspace,
515 omp_allocator_handle_t FTN_STDCALL FTN_GET_DEVICE_AND_HOST_ALLOCATOR(
516 int KMP_DEREF dev, omp_allocator_handle_t KMP_DEREF memspace) {
520 int dev_num = KMP_DEREF dev;
521 return __kmp_get_devices_allocator(1, &dev_num, KMP_DEREF memspace, 1);
525 omp_allocator_handle_t FTN_STDCALL
526 FTN_GET_DEVICES_ALL_ALLOCATOR(omp_allocator_handle_t KMP_DEREF memspace) {
530 return __kmp_get_devices_allocator(0, NULL, KMP_DEREF memspace, 1);
535 FTN_GET_MEMSPACE_NUM_RESOURCES(omp_memspace_handle_t KMP_DEREF memspace) {
539 return __kmp_get_memspace_num_resources(KMP_DEREF memspace);
543 omp_memspace_handle_t FTN_STDCALL
544 FTN_GET_SUBMEMSPACE(omp_memspace_handle_t KMP_DEREF memspace,
545 int KMP_DEREF num_resources,
int *resources) {
549 return __kmp_get_submemspace(KMP_DEREF memspace, KMP_DEREF num_resources,
556 static void __kmp_fortran_strncpy_truncate(
char *buffer,
size_t buf_size,
557 char const *csrc,
size_t csrc_size) {
558 size_t capped_src_size = csrc_size;
559 if (csrc_size >= buf_size) {
560 capped_src_size = buf_size - 1;
562 KMP_STRNCPY_S(buffer, buf_size, csrc, capped_src_size);
563 if (csrc_size >= buf_size) {
564 KMP_DEBUG_ASSERT(buffer[buf_size - 1] ==
'\0');
565 buffer[buf_size - 1] = csrc[buf_size - 1];
567 for (
size_t i = csrc_size; i < buf_size; ++i)
573 class ConvertedString {
577 ConvertedString(
char const *fortran_str,
size_t size) {
578 buf = (
char *)KMP_INTERNAL_MALLOC(size + 1);
579 KMP_STRNCPY_S(buf, size + 1, fortran_str, size);
582 ~ConvertedString() { KMP_INTERNAL_FREE(buf); }
583 const char *get()
const {
return buf; }
591 void FTN_STDCALL KMP_EXPAND_NAME_IF_APPEND(FTN_SET_AFFINITY_FORMAT)(
592 char const *format,
size_t size) {
596 if (!__kmp_init_serial) {
597 __kmp_serial_initialize();
599 ConvertedString cformat(format, size);
602 __kmp_strncpy_truncate(__kmp_affinity_format, KMP_AFFINITY_FORMAT_SIZE,
603 cformat.get(), KMP_STRLEN(cformat.get()));
613 size_t FTN_STDCALL KMP_EXPAND_NAME_IF_APPEND(FTN_GET_AFFINITY_FORMAT)(
614 char *buffer,
size_t size) {
619 if (!__kmp_init_serial) {
620 __kmp_serial_initialize();
622 format_size = KMP_STRLEN(__kmp_affinity_format);
623 if (buffer && size) {
624 __kmp_fortran_strncpy_truncate(buffer, size, __kmp_affinity_format,
636 void FTN_STDCALL KMP_EXPAND_NAME_IF_APPEND(FTN_DISPLAY_AFFINITY)(
637 char const *format,
size_t size) {
642 if (!TCR_4(__kmp_init_middle)) {
643 __kmp_middle_initialize();
645 __kmp_assign_root_init_mask();
646 gtid = __kmp_get_gtid();
647 #if KMP_AFFINITY_SUPPORTED
648 if (__kmp_threads[gtid]->th.th_team->t.t_level == 0 &&
649 __kmp_affinity.flags.reset) {
650 __kmp_reset_root_init_mask(gtid);
653 ConvertedString cformat(format, size);
654 __kmp_aux_display_affinity(gtid, cformat.get());
668 size_t FTN_STDCALL KMP_EXPAND_NAME_IF_APPEND(FTN_CAPTURE_AFFINITY)(
669 char *buffer,
char const *format,
size_t buf_size,
size_t for_size) {
670 #if defined(KMP_STUB)
675 kmp_str_buf_t capture_buf;
676 if (!TCR_4(__kmp_init_middle)) {
677 __kmp_middle_initialize();
679 __kmp_assign_root_init_mask();
680 gtid = __kmp_get_gtid();
681 #if KMP_AFFINITY_SUPPORTED
682 if (__kmp_threads[gtid]->th.th_team->t.t_level == 0 &&
683 __kmp_affinity.flags.reset) {
684 __kmp_reset_root_init_mask(gtid);
687 __kmp_str_buf_init(&capture_buf);
688 ConvertedString cformat(format, for_size);
689 num_required = __kmp_aux_capture_affinity(gtid, cformat.get(), &capture_buf);
690 if (buffer && buf_size) {
691 __kmp_fortran_strncpy_truncate(buffer, buf_size, capture_buf.str,
694 __kmp_str_buf_free(&capture_buf);
699 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_THREAD_NUM)(void) {
705 #if KMP_OS_DARWIN || KMP_OS_DRAGONFLY || KMP_OS_FREEBSD || KMP_OS_NETBSD || \
706 KMP_OS_OPENBSD || KMP_OS_HAIKU || KMP_OS_HURD || KMP_OS_SOLARIS || \
708 gtid = __kmp_entry_gtid();
710 if (!__kmp_init_parallel ||
711 (gtid = (
int)((kmp_intptr_t)TlsGetValue(__kmp_gtid_threadprivate_key))) ==
718 #elif KMP_OS_LINUX || KMP_OS_WASI
719 #ifdef KMP_TDATA_GTID
720 if (__kmp_gtid_mode >= 3) {
721 if ((gtid = __kmp_gtid) == KMP_GTID_DNE) {
726 if (!__kmp_init_parallel ||
727 (gtid = (
int)((kmp_intptr_t)(
728 pthread_getspecific(__kmp_gtid_threadprivate_key)))) == 0) {
732 #ifdef KMP_TDATA_GTID
736 #error Unknown or unsupported OS
739 return __kmp_tid_from_gtid(gtid);
743 int FTN_STDCALL FTN_GET_NUM_KNOWN_THREADS(
void) {
747 if (!__kmp_init_serial) {
748 __kmp_serial_initialize();
752 return TCR_4(__kmp_nth);
756 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_PROCS)(void) {
760 if (!TCR_4(__kmp_init_middle)) {
761 __kmp_middle_initialize();
763 #if KMP_AFFINITY_SUPPORTED
764 if (!__kmp_affinity.flags.reset) {
766 int gtid = __kmp_entry_gtid();
767 kmp_info_t *thread = __kmp_threads[gtid];
768 if (thread->th.th_team->t.t_level == 0) {
769 __kmp_assign_root_init_mask();
773 return __kmp_avail_proc;
777 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NESTED)(
int KMP_DEREF flag) {
779 __kmps_set_nested(KMP_DEREF flag);
783 thread = __kmp_entry_thread();
784 KMP_INFORM(APIDeprecated,
"omp_set_nested",
"omp_set_max_active_levels");
785 __kmp_save_internal_controls(thread);
787 int max_active_levels = get__max_active_levels(thread);
788 if (max_active_levels == 1)
789 max_active_levels = KMP_MAX_ACTIVE_LEVELS_LIMIT;
790 set__max_active_levels(thread, (KMP_DEREF flag) ? max_active_levels : 1);
794 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NESTED)(void) {
796 return __kmps_get_nested();
799 thread = __kmp_entry_thread();
800 KMP_INFORM(APIDeprecated,
"omp_get_nested",
"omp_get_max_active_levels");
801 return get__max_active_levels(thread) > 1;
805 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_DYNAMIC)(
int KMP_DEREF flag) {
807 __kmps_set_dynamic(KMP_DEREF flag ? TRUE : FALSE);
811 thread = __kmp_entry_thread();
813 __kmp_save_internal_controls(thread);
814 set__dynamic(thread, KMP_DEREF flag ?
true :
false);
818 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_DYNAMIC)(void) {
820 return __kmps_get_dynamic();
823 thread = __kmp_entry_thread();
824 return get__dynamic(thread);
828 int FTN_STDCALL KMP_EXPAND_NAME(FTN_IN_PARALLEL)(void) {
832 kmp_info_t *th = __kmp_entry_thread();
833 if (th->th.th_teams_microtask) {
838 return (th->th.th_team->t.t_active_level ? 1 : 0);
840 return (th->th.th_root->r.r_in_parallel ? FTN_TRUE : FTN_FALSE);
844 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_SCHEDULE)(kmp_sched_t KMP_DEREF kind,
845 int KMP_DEREF modifier) {
847 __kmps_set_schedule(KMP_DEREF kind, KMP_DEREF modifier);
850 __kmp_set_schedule(__kmp_entry_gtid(), KMP_DEREF kind, KMP_DEREF modifier);
854 void FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_SCHEDULE)(kmp_sched_t *kind,
857 __kmps_get_schedule(kind, modifier);
860 __kmp_get_schedule(__kmp_entry_gtid(), kind, modifier);
864 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_MAX_ACTIVE_LEVELS)(
int KMP_DEREF arg) {
869 __kmp_set_max_active_levels(__kmp_entry_gtid(), KMP_DEREF arg);
873 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_MAX_ACTIVE_LEVELS)(void) {
878 if (!TCR_4(__kmp_init_middle)) {
879 __kmp_middle_initialize();
881 return __kmp_get_max_active_levels(__kmp_entry_gtid());
885 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_ACTIVE_LEVEL)(void) {
890 return __kmp_entry_thread()->th.th_team->t.t_active_level;
894 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_LEVEL)(void) {
899 return __kmp_entry_thread()->th.th_team->t.t_level;
904 KMP_EXPAND_NAME(FTN_GET_ANCESTOR_THREAD_NUM)(
int KMP_DEREF level) {
906 return (KMP_DEREF level) ? (-1) : (0);
908 return __kmp_get_ancestor_thread_num(__kmp_entry_gtid(), KMP_DEREF level);
912 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_TEAM_SIZE)(
int KMP_DEREF level) {
914 return (KMP_DEREF level) ? (-1) : (1);
916 return __kmp_get_team_size(__kmp_entry_gtid(), KMP_DEREF level);
920 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_THREAD_LIMIT)(void) {
926 if (!__kmp_init_serial) {
927 __kmp_serial_initialize();
930 gtid = __kmp_entry_gtid();
931 thread = __kmp_threads[gtid];
934 if (
int thread_limit = thread->th.th_current_task->td_icvs.task_thread_limit)
936 return thread->th.th_current_task->td_icvs.thread_limit;
940 int FTN_STDCALL KMP_EXPAND_NAME(FTN_IN_FINAL)(void) {
944 if (!TCR_4(__kmp_init_parallel)) {
947 return __kmp_entry_thread()->th.th_current_task->td_flags.final;
951 kmp_proc_bind_t FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PROC_BIND)(void) {
953 return __kmps_get_proc_bind();
955 return get__proc_bind(__kmp_entry_thread());
959 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_PLACES)(void) {
960 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
963 if (!TCR_4(__kmp_init_middle)) {
964 __kmp_middle_initialize();
966 if (!KMP_AFFINITY_CAPABLE())
968 if (!__kmp_affinity.flags.reset) {
970 int gtid = __kmp_entry_gtid();
971 kmp_info_t *thread = __kmp_threads[gtid];
972 if (thread->th.th_team->t.t_level == 0) {
973 __kmp_assign_root_init_mask();
976 return __kmp_affinity.num_masks;
980 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_NUM_PROCS)(
int place_num) {
981 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
986 if (!TCR_4(__kmp_init_middle)) {
987 __kmp_middle_initialize();
989 if (!KMP_AFFINITY_CAPABLE())
991 if (!__kmp_affinity.flags.reset) {
993 int gtid = __kmp_entry_gtid();
994 kmp_info_t *thread = __kmp_threads[gtid];
995 if (thread->th.th_team->t.t_level == 0) {
996 __kmp_assign_root_init_mask();
999 if (place_num < 0 || place_num >= (
int)__kmp_affinity.num_masks)
1001 kmp_affin_mask_t *mask = KMP_CPU_INDEX(__kmp_affinity.masks, place_num);
1002 KMP_CPU_SET_ITERATE(i, mask) {
1003 if ((!KMP_CPU_ISSET(i, __kmp_affin_fullMask)) ||
1004 (!KMP_CPU_ISSET(i, mask))) {
1013 void FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_PROC_IDS)(
int place_num,
1015 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
1019 if (!TCR_4(__kmp_init_middle)) {
1020 __kmp_middle_initialize();
1022 if (!KMP_AFFINITY_CAPABLE())
1024 if (!__kmp_affinity.flags.reset) {
1026 int gtid = __kmp_entry_gtid();
1027 kmp_info_t *thread = __kmp_threads[gtid];
1028 if (thread->th.th_team->t.t_level == 0) {
1029 __kmp_assign_root_init_mask();
1032 if (place_num < 0 || place_num >= (
int)__kmp_affinity.num_masks)
1034 kmp_affin_mask_t *mask = KMP_CPU_INDEX(__kmp_affinity.masks, place_num);
1036 KMP_CPU_SET_ITERATE(i, mask) {
1037 if ((!KMP_CPU_ISSET(i, __kmp_affin_fullMask)) ||
1038 (!KMP_CPU_ISSET(i, mask))) {
1046 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_NUM)(void) {
1047 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
1052 if (!TCR_4(__kmp_init_middle)) {
1053 __kmp_middle_initialize();
1055 if (!KMP_AFFINITY_CAPABLE())
1057 gtid = __kmp_entry_gtid();
1058 thread = __kmp_thread_from_gtid(gtid);
1059 if (thread->th.th_team->t.t_level == 0 && !__kmp_affinity.flags.reset) {
1060 __kmp_assign_root_init_mask();
1062 if (thread->th.th_current_place < 0)
1064 return thread->th.th_current_place;
1068 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PARTITION_NUM_PLACES)(void) {
1069 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
1072 int gtid, num_places, first_place, last_place;
1074 if (!TCR_4(__kmp_init_middle)) {
1075 __kmp_middle_initialize();
1077 if (!KMP_AFFINITY_CAPABLE())
1079 gtid = __kmp_entry_gtid();
1080 thread = __kmp_thread_from_gtid(gtid);
1081 if (thread->th.th_team->t.t_level == 0 && !__kmp_affinity.flags.reset) {
1082 __kmp_assign_root_init_mask();
1084 first_place = thread->th.th_first_place;
1085 last_place = thread->th.th_last_place;
1086 if (first_place < 0 || last_place < 0)
1088 if (first_place <= last_place)
1089 num_places = last_place - first_place + 1;
1091 num_places = __kmp_affinity.num_masks - first_place + last_place + 1;
1097 KMP_EXPAND_NAME(FTN_GET_PARTITION_PLACE_NUMS)(
int *place_nums) {
1098 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
1101 int i, gtid, place_num, first_place, last_place, start, end;
1103 if (!TCR_4(__kmp_init_middle)) {
1104 __kmp_middle_initialize();
1106 if (!KMP_AFFINITY_CAPABLE())
1108 gtid = __kmp_entry_gtid();
1109 thread = __kmp_thread_from_gtid(gtid);
1110 if (thread->th.th_team->t.t_level == 0 && !__kmp_affinity.flags.reset) {
1111 __kmp_assign_root_init_mask();
1113 first_place = thread->th.th_first_place;
1114 last_place = thread->th.th_last_place;
1115 if (first_place < 0 || last_place < 0)
1117 if (first_place <= last_place) {
1118 start = first_place;
1124 for (i = 0, place_num = start; place_num <= end; ++place_num, ++i) {
1125 place_nums[i] = place_num;
1130 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_TEAMS)(void) {
1134 return __kmp_aux_get_num_teams();
1138 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_TEAM_NUM)(void) {
1142 return __kmp_aux_get_team_num();
1146 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_DEFAULT_DEVICE)(void) {
1147 #if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
1150 return __kmp_entry_thread()->th.th_current_task->td_icvs.default_device;
1154 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_DEFAULT_DEVICE)(
int KMP_DEREF arg) {
1155 #if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
1158 __kmp_entry_thread()->th.th_current_task->td_icvs.default_device =
1165 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_DEVICES)(void)
1166 KMP_WEAK_ATTRIBUTE_EXTERNAL;
1167 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_DEVICES)(void) {
1168 #if KMP_MIC || KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
1172 if ((*(
void **)(&fptr) = KMP_DLSYM(
"__tgt_get_num_devices"))) {
1174 }
else if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_num_devices"))) {
1176 }
else if ((*(
void **)(&fptr) = KMP_DLSYM(
"_Offload_number_of_devices"))) {
1186 int FTN_STDCALL KMP_EXPAND_NAME(FTN_IS_INITIAL_DEVICE)(void)
1187 KMP_WEAK_ATTRIBUTE_EXTERNAL;
1188 int FTN_STDCALL KMP_EXPAND_NAME(FTN_IS_INITIAL_DEVICE)(void) {
1193 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_INITIAL_DEVICE)(void)
1194 KMP_WEAK_ATTRIBUTE_EXTERNAL;
1195 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_INITIAL_DEVICE)(void) {
1197 return KMP_EXPAND_NAME(FTN_GET_NUM_DEVICES)();
1200 #if defined(KMP_STUB)
1203 void *FTN_STDCALL FTN_TARGET_ALLOC(
size_t size,
int device_num) {
return 0; }
1205 void FTN_STDCALL FTN_TARGET_FREE(
void *device_ptr,
int device_num) {}
1207 int FTN_STDCALL FTN_TARGET_IS_PRESENT(
void *ptr,
int device_num) {
return 0; }
1209 int FTN_STDCALL FTN_TARGET_MEMCPY(
void *dst,
void *src,
size_t length,
1210 size_t dst_offset,
size_t src_offset,
1211 int dst_device,
int src_device) {
1215 int FTN_STDCALL FTN_TARGET_MEMCPY_RECT(
1216 void *dst,
void *src,
size_t element_size,
int num_dims,
1217 const size_t *volume,
const size_t *dst_offsets,
const size_t *src_offsets,
1218 const size_t *dst_dimensions,
const size_t *src_dimensions,
int dst_device,
1223 int FTN_STDCALL FTN_TARGET_ASSOCIATE_PTR(
void *host_ptr,
void *device_ptr,
1224 size_t size,
size_t device_offset,
1229 int FTN_STDCALL FTN_TARGET_DISASSOCIATE_PTR(
void *host_ptr,
int device_num) {
1235 typedef enum { UNINIT = -1, UNLOCKED, LOCKED } kmp_stub_lock_t;
1238 #if KMP_USE_DYNAMIC_LOCK
1239 void FTN_STDCALL FTN_INIT_LOCK_WITH_HINT(
void **user_lock,
1240 uintptr_t KMP_DEREF hint) {
1242 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1244 int gtid = __kmp_entry_gtid();
1245 #if OMPT_SUPPORT && OMPT_OPTIONAL
1246 OMPT_STORE_RETURN_ADDRESS(gtid);
1248 __kmpc_init_lock_with_hint(NULL, gtid, user_lock, KMP_DEREF hint);
1252 void FTN_STDCALL FTN_INIT_NEST_LOCK_WITH_HINT(
void **user_lock,
1253 uintptr_t KMP_DEREF hint) {
1255 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1257 int gtid = __kmp_entry_gtid();
1258 #if OMPT_SUPPORT && OMPT_OPTIONAL
1259 OMPT_STORE_RETURN_ADDRESS(gtid);
1261 __kmpc_init_nest_lock_with_hint(NULL, gtid, user_lock, KMP_DEREF hint);
1267 void FTN_STDCALL KMP_EXPAND_NAME(FTN_INIT_LOCK)(
void **user_lock) {
1269 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1271 int gtid = __kmp_entry_gtid();
1272 #if OMPT_SUPPORT && OMPT_OPTIONAL
1273 OMPT_STORE_RETURN_ADDRESS(gtid);
1275 __kmpc_init_lock(NULL, gtid, user_lock);
1280 void FTN_STDCALL KMP_EXPAND_NAME(FTN_INIT_NEST_LOCK)(
void **user_lock) {
1282 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1284 int gtid = __kmp_entry_gtid();
1285 #if OMPT_SUPPORT && OMPT_OPTIONAL
1286 OMPT_STORE_RETURN_ADDRESS(gtid);
1288 __kmpc_init_nest_lock(NULL, gtid, user_lock);
1292 void FTN_STDCALL KMP_EXPAND_NAME(FTN_DESTROY_LOCK)(
void **user_lock) {
1294 *((kmp_stub_lock_t *)user_lock) = UNINIT;
1296 int gtid = __kmp_entry_gtid();
1297 #if OMPT_SUPPORT && OMPT_OPTIONAL
1298 OMPT_STORE_RETURN_ADDRESS(gtid);
1300 __kmpc_destroy_lock(NULL, gtid, user_lock);
1304 void FTN_STDCALL KMP_EXPAND_NAME(FTN_DESTROY_NEST_LOCK)(
void **user_lock) {
1306 *((kmp_stub_lock_t *)user_lock) = UNINIT;
1308 int gtid = __kmp_entry_gtid();
1309 #if OMPT_SUPPORT && OMPT_OPTIONAL
1310 OMPT_STORE_RETURN_ADDRESS(gtid);
1312 __kmpc_destroy_nest_lock(NULL, gtid, user_lock);
1316 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_LOCK)(
void **user_lock) {
1318 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1321 if (*((kmp_stub_lock_t *)user_lock) != UNLOCKED) {
1324 *((kmp_stub_lock_t *)user_lock) = LOCKED;
1326 int gtid = __kmp_entry_gtid();
1327 #if OMPT_SUPPORT && OMPT_OPTIONAL
1328 OMPT_STORE_RETURN_ADDRESS(gtid);
1330 __kmpc_set_lock(NULL, gtid, user_lock);
1334 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NEST_LOCK)(
void **user_lock) {
1336 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1339 (*((
int *)user_lock))++;
1341 int gtid = __kmp_entry_gtid();
1342 #if OMPT_SUPPORT && OMPT_OPTIONAL
1343 OMPT_STORE_RETURN_ADDRESS(gtid);
1345 __kmpc_set_nest_lock(NULL, gtid, user_lock);
1349 void FTN_STDCALL KMP_EXPAND_NAME(FTN_UNSET_LOCK)(
void **user_lock) {
1351 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1354 if (*((kmp_stub_lock_t *)user_lock) == UNLOCKED) {
1357 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1359 int gtid = __kmp_entry_gtid();
1360 #if OMPT_SUPPORT && OMPT_OPTIONAL
1361 OMPT_STORE_RETURN_ADDRESS(gtid);
1363 __kmpc_unset_lock(NULL, gtid, user_lock);
1367 void FTN_STDCALL KMP_EXPAND_NAME(FTN_UNSET_NEST_LOCK)(
void **user_lock) {
1369 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1372 if (*((kmp_stub_lock_t *)user_lock) == UNLOCKED) {
1375 (*((
int *)user_lock))--;
1377 int gtid = __kmp_entry_gtid();
1378 #if OMPT_SUPPORT && OMPT_OPTIONAL
1379 OMPT_STORE_RETURN_ADDRESS(gtid);
1381 __kmpc_unset_nest_lock(NULL, gtid, user_lock);
1385 int FTN_STDCALL KMP_EXPAND_NAME(FTN_TEST_LOCK)(
void **user_lock) {
1387 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1390 if (*((kmp_stub_lock_t *)user_lock) == LOCKED) {
1393 *((kmp_stub_lock_t *)user_lock) = LOCKED;
1396 int gtid = __kmp_entry_gtid();
1397 #if OMPT_SUPPORT && OMPT_OPTIONAL
1398 OMPT_STORE_RETURN_ADDRESS(gtid);
1400 return __kmpc_test_lock(NULL, gtid, user_lock);
1404 int FTN_STDCALL KMP_EXPAND_NAME(FTN_TEST_NEST_LOCK)(
void **user_lock) {
1406 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1409 return ++(*((
int *)user_lock));
1411 int gtid = __kmp_entry_gtid();
1412 #if OMPT_SUPPORT && OMPT_OPTIONAL
1413 OMPT_STORE_RETURN_ADDRESS(gtid);
1415 return __kmpc_test_nest_lock(NULL, gtid, user_lock);
1419 double FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_WTIME)(void) {
1421 return __kmps_get_wtime();
1427 if (!__kmp_init_serial) {
1428 __kmp_serial_initialize();
1431 __kmp_elapsed(&data);
1436 double FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_WTICK)(void) {
1438 return __kmps_get_wtick();
1441 if (!__kmp_init_serial) {
1442 __kmp_serial_initialize();
1444 __kmp_elapsed_tick(&data);
1451 void *FTN_STDCALL FTN_MALLOC(
size_t KMP_DEREF size) {
1453 return kmpc_malloc(KMP_DEREF size);
1456 void *FTN_STDCALL FTN_ALIGNED_MALLOC(
size_t KMP_DEREF size,
1457 size_t KMP_DEREF alignment) {
1459 return kmpc_aligned_malloc(KMP_DEREF size, KMP_DEREF alignment);
1462 void *FTN_STDCALL FTN_CALLOC(
size_t KMP_DEREF nelem,
size_t KMP_DEREF elsize) {
1464 return kmpc_calloc(KMP_DEREF nelem, KMP_DEREF elsize);
1467 void *FTN_STDCALL FTN_REALLOC(
void *KMP_DEREF ptr,
size_t KMP_DEREF size) {
1469 return kmpc_realloc(KMP_DEREF ptr, KMP_DEREF size);
1472 void FTN_STDCALL FTN_KFREE(
void *KMP_DEREF ptr) {
1474 kmpc_free(KMP_DEREF ptr);
1477 void FTN_STDCALL FTN_SET_WARNINGS_ON(
void) {
1479 __kmp_generate_warnings = kmp_warnings_explicit;
1483 void FTN_STDCALL FTN_SET_WARNINGS_OFF(
void) {
1485 __kmp_generate_warnings = FALSE;
1489 void FTN_STDCALL FTN_SET_DEFAULTS(
char const *str
1490 #ifndef PASS_ARGS_BY_VALUE
1497 char const *defaults = str;
1499 #ifdef PASS_ARGS_BY_VALUE
1500 sz = KMP_STRLEN(str);
1503 ConvertedString cstr(str, sz);
1504 defaults = cstr.get();
1507 __kmp_aux_set_defaults(defaults, sz);
1514 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_CANCELLATION)(void) {
1519 if (!__kmp_init_serial) {
1520 __kmp_serial_initialize();
1522 return __kmp_omp_cancellation;
1526 int FTN_STDCALL FTN_GET_CANCELLATION_STATUS(
int cancel_kind) {
1530 return __kmp_get_cancellation_status(cancel_kind);
1535 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_MAX_TASK_PRIORITY)(void) {
1539 if (!__kmp_init_serial) {
1540 __kmp_serial_initialize();
1542 return __kmp_max_task_priority;
1549 int FTN_STDCALL FTN_GET_DEVICE_NUM(
void) KMP_WEAK_ATTRIBUTE_EXTERNAL;
1550 int FTN_STDCALL FTN_GET_DEVICE_NUM(
void) {
1551 return KMP_EXPAND_NAME(FTN_GET_INITIAL_DEVICE)();
1555 int FTN_STDCALL KMP_EXPAND_NAME(FTN_PAUSE_RESOURCE)(kmp_pause_status_t kind,
1560 if (kind == kmp_stop_tool_paused)
1562 if (device_num == KMP_EXPAND_NAME(FTN_GET_INITIAL_DEVICE)())
1563 return __kmpc_pause_resource(kind);
1565 int (*fptr)(kmp_pause_status_t, int);
1566 if ((*(
void **)(&fptr) = KMP_DLSYM(
"tgt_pause_resource")))
1567 return (*fptr)(kind, device_num);
1576 KMP_EXPAND_NAME(FTN_PAUSE_RESOURCE_ALL)(kmp_pause_status_t kind) {
1581 int (*fptr)(kmp_pause_status_t, int);
1582 if ((*(
void **)(&fptr) = KMP_DLSYM(
"tgt_pause_resource")))
1583 fails = (*fptr)(kind, KMP_DEVICE_ALL);
1584 fails += __kmpc_pause_resource(kind);
1590 int FTN_STDCALL FTN_GET_SUPPORTED_ACTIVE_LEVELS(
void) {
1594 return KMP_MAX_ACTIVE_LEVELS_LIMIT;
1598 void FTN_STDCALL FTN_FULFILL_EVENT(kmp_event_t *event) {
1600 __kmp_fulfill_event(event);
1605 void FTN_STDCALL FTN_SET_NUM_TEAMS(
int KMP_DEREF num_teams) {
1609 if (!__kmp_init_serial) {
1610 __kmp_serial_initialize();
1612 __kmp_set_num_teams(KMP_DEREF num_teams);
1615 int FTN_STDCALL FTN_GET_MAX_TEAMS(
void) {
1619 if (!__kmp_init_serial) {
1620 __kmp_serial_initialize();
1622 return __kmp_get_max_teams();
1626 void FTN_STDCALL FTN_SET_TEAMS_THREAD_LIMIT(
int KMP_DEREF limit) {
1630 if (!__kmp_init_serial) {
1631 __kmp_serial_initialize();
1633 __kmp_set_teams_thread_limit(KMP_DEREF limit);
1636 int FTN_STDCALL FTN_GET_TEAMS_THREAD_LIMIT(
void) {
1640 if (!__kmp_init_serial) {
1641 __kmp_serial_initialize();
1643 return __kmp_get_teams_thread_limit();
1649 typedef intptr_t omp_intptr_t;
1653 typedef enum omp_interop_property {
1655 omp_ipr_fr_name = -2,
1656 omp_ipr_vendor = -3,
1657 omp_ipr_vendor_name = -4,
1658 omp_ipr_device_num = -5,
1659 omp_ipr_platform = -6,
1660 omp_ipr_device = -7,
1661 omp_ipr_device_context = -8,
1662 omp_ipr_targetsync = -9,
1664 } omp_interop_property_t;
1666 #define omp_interop_none 0
1668 typedef enum omp_interop_rc {
1669 omp_irc_no_value = 1,
1670 omp_irc_success = 0,
1672 omp_irc_out_of_range = -2,
1673 omp_irc_type_int = -3,
1674 omp_irc_type_ptr = -4,
1675 omp_irc_type_str = -5,
1679 typedef enum omp_interop_fr {
1681 omp_ifr_cuda_driver = 2,
1685 omp_ifr_level_zero = 6,
1689 typedef void *omp_interop_t;
1692 int FTN_STDCALL FTN_GET_NUM_INTEROP_PROPERTIES(
const omp_interop_t interop) {
1693 #if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
1696 int (*fptr)(
const omp_interop_t);
1697 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_num_interop_properties")))
1698 return (*fptr)(interop);
1705 intptr_t FTN_STDCALL FTN_GET_INTEROP_INT(
const omp_interop_t interop,
1706 omp_interop_property_t property_id,
1708 #if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
1711 intptr_t (*fptr)(
const omp_interop_t, omp_interop_property_t,
int *);
1712 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_int")))
1713 return (*fptr)(interop, property_id, err);
1719 void *FTN_STDCALL FTN_GET_INTEROP_PTR(
const omp_interop_t interop,
1720 omp_interop_property_t property_id,
1722 #if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
1725 void *(*fptr)(
const omp_interop_t, omp_interop_property_t,
int *);
1726 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_ptr")))
1727 return (*fptr)(interop, property_id, err);
1733 const char *FTN_STDCALL FTN_GET_INTEROP_STR(
const omp_interop_t interop,
1734 omp_interop_property_t property_id,
1736 #if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
1739 const char *(*fptr)(
const omp_interop_t, omp_interop_property_t,
int *);
1740 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_str")))
1741 return (*fptr)(interop, property_id, err);
1747 const char *FTN_STDCALL FTN_GET_INTEROP_NAME(
1748 const omp_interop_t interop, omp_interop_property_t property_id) {
1749 #if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
1752 const char *(*fptr)(
const omp_interop_t, omp_interop_property_t);
1753 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_name")))
1754 return (*fptr)(interop, property_id);
1760 const char *FTN_STDCALL FTN_GET_INTEROP_TYPE_DESC(
1761 const omp_interop_t interop, omp_interop_property_t property_id) {
1762 #if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
1765 const char *(*fptr)(
const omp_interop_t, omp_interop_property_t);
1766 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_type_desc")))
1767 return (*fptr)(interop, property_id);
1773 const char *FTN_STDCALL FTN_GET_INTEROP_RC_DESC(
1774 const omp_interop_t interop, omp_interop_property_t property_id) {
1775 #if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
1778 const char *(*fptr)(
const omp_interop_t, omp_interop_property_t);
1779 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_rec_desc")))
1780 return (*fptr)(interop, property_id);
1786 void FTN_STDCALL FTN_DISPLAY_ENV(
int verbose) {
1788 __kmp_omp_display_env(verbose);
1792 int FTN_STDCALL FTN_IN_EXPLICIT_TASK(
void) {
1796 int gtid = __kmp_entry_gtid();
1797 return __kmp_thread_from_gtid(gtid)->th.th_current_task->td_flags.tasktype;
1802 #ifdef KMP_USE_VERSION_SYMBOLS
1824 KMP_VERSION_SYMBOL(FTN_SET_NUM_THREADS, 10,
"OMP_1.0");
1825 KMP_VERSION_SYMBOL(FTN_GET_NUM_THREADS, 10,
"OMP_1.0");
1826 KMP_VERSION_SYMBOL(FTN_GET_MAX_THREADS, 10,
"OMP_1.0");
1827 KMP_VERSION_SYMBOL(FTN_GET_THREAD_NUM, 10,
"OMP_1.0");
1828 KMP_VERSION_SYMBOL(FTN_GET_NUM_PROCS, 10,
"OMP_1.0");
1829 KMP_VERSION_SYMBOL(FTN_IN_PARALLEL, 10,
"OMP_1.0");
1830 KMP_VERSION_SYMBOL(FTN_SET_DYNAMIC, 10,
"OMP_1.0");
1831 KMP_VERSION_SYMBOL(FTN_GET_DYNAMIC, 10,
"OMP_1.0");
1832 KMP_VERSION_SYMBOL(FTN_SET_NESTED, 10,
"OMP_1.0");
1833 KMP_VERSION_SYMBOL(FTN_GET_NESTED, 10,
"OMP_1.0");
1834 KMP_VERSION_SYMBOL(FTN_INIT_LOCK, 10,
"OMP_1.0");
1835 KMP_VERSION_SYMBOL(FTN_INIT_NEST_LOCK, 10,
"OMP_1.0");
1836 KMP_VERSION_SYMBOL(FTN_DESTROY_LOCK, 10,
"OMP_1.0");
1837 KMP_VERSION_SYMBOL(FTN_DESTROY_NEST_LOCK, 10,
"OMP_1.0");
1838 KMP_VERSION_SYMBOL(FTN_SET_LOCK, 10,
"OMP_1.0");
1839 KMP_VERSION_SYMBOL(FTN_SET_NEST_LOCK, 10,
"OMP_1.0");
1840 KMP_VERSION_SYMBOL(FTN_UNSET_LOCK, 10,
"OMP_1.0");
1841 KMP_VERSION_SYMBOL(FTN_UNSET_NEST_LOCK, 10,
"OMP_1.0");
1842 KMP_VERSION_SYMBOL(FTN_TEST_LOCK, 10,
"OMP_1.0");
1843 KMP_VERSION_SYMBOL(FTN_TEST_NEST_LOCK, 10,
"OMP_1.0");
1846 KMP_VERSION_SYMBOL(FTN_GET_WTICK, 20,
"OMP_2.0");
1847 KMP_VERSION_SYMBOL(FTN_GET_WTIME, 20,
"OMP_2.0");
1850 KMP_VERSION_SYMBOL(FTN_SET_SCHEDULE, 30,
"OMP_3.0");
1851 KMP_VERSION_SYMBOL(FTN_GET_SCHEDULE, 30,
"OMP_3.0");
1852 KMP_VERSION_SYMBOL(FTN_GET_THREAD_LIMIT, 30,
"OMP_3.0");
1853 KMP_VERSION_SYMBOL(FTN_SET_MAX_ACTIVE_LEVELS, 30,
"OMP_3.0");
1854 KMP_VERSION_SYMBOL(FTN_GET_MAX_ACTIVE_LEVELS, 30,
"OMP_3.0");
1855 KMP_VERSION_SYMBOL(FTN_GET_ANCESTOR_THREAD_NUM, 30,
"OMP_3.0");
1856 KMP_VERSION_SYMBOL(FTN_GET_LEVEL, 30,
"OMP_3.0");
1857 KMP_VERSION_SYMBOL(FTN_GET_TEAM_SIZE, 30,
"OMP_3.0");
1858 KMP_VERSION_SYMBOL(FTN_GET_ACTIVE_LEVEL, 30,
"OMP_3.0");
1861 KMP_VERSION_SYMBOL(FTN_INIT_LOCK, 30,
"OMP_3.0");
1862 KMP_VERSION_SYMBOL(FTN_INIT_NEST_LOCK, 30,
"OMP_3.0");
1863 KMP_VERSION_SYMBOL(FTN_DESTROY_LOCK, 30,
"OMP_3.0");
1864 KMP_VERSION_SYMBOL(FTN_DESTROY_NEST_LOCK, 30,
"OMP_3.0");
1865 KMP_VERSION_SYMBOL(FTN_SET_LOCK, 30,
"OMP_3.0");
1866 KMP_VERSION_SYMBOL(FTN_SET_NEST_LOCK, 30,
"OMP_3.0");
1867 KMP_VERSION_SYMBOL(FTN_UNSET_LOCK, 30,
"OMP_3.0");
1868 KMP_VERSION_SYMBOL(FTN_UNSET_NEST_LOCK, 30,
"OMP_3.0");
1869 KMP_VERSION_SYMBOL(FTN_TEST_LOCK, 30,
"OMP_3.0");
1870 KMP_VERSION_SYMBOL(FTN_TEST_NEST_LOCK, 30,
"OMP_3.0");
1873 KMP_VERSION_SYMBOL(FTN_IN_FINAL, 31,
"OMP_3.1");
1876 KMP_VERSION_SYMBOL(FTN_GET_PROC_BIND, 40,
"OMP_4.0");
1877 KMP_VERSION_SYMBOL(FTN_GET_NUM_TEAMS, 40,
"OMP_4.0");
1878 KMP_VERSION_SYMBOL(FTN_GET_TEAM_NUM, 40,
"OMP_4.0");
1879 KMP_VERSION_SYMBOL(FTN_GET_CANCELLATION, 40,
"OMP_4.0");
1880 KMP_VERSION_SYMBOL(FTN_GET_DEFAULT_DEVICE, 40,
"OMP_4.0");
1881 KMP_VERSION_SYMBOL(FTN_SET_DEFAULT_DEVICE, 40,
"OMP_4.0");
1882 KMP_VERSION_SYMBOL(FTN_IS_INITIAL_DEVICE, 40,
"OMP_4.0");
1883 KMP_VERSION_SYMBOL(FTN_GET_NUM_DEVICES, 40,
"OMP_4.0");
1886 KMP_VERSION_SYMBOL(FTN_GET_MAX_TASK_PRIORITY, 45,
"OMP_4.5");
1887 KMP_VERSION_SYMBOL(FTN_GET_NUM_PLACES, 45,
"OMP_4.5");
1888 KMP_VERSION_SYMBOL(FTN_GET_PLACE_NUM_PROCS, 45,
"OMP_4.5");
1889 KMP_VERSION_SYMBOL(FTN_GET_PLACE_PROC_IDS, 45,
"OMP_4.5");
1890 KMP_VERSION_SYMBOL(FTN_GET_PLACE_NUM, 45,
"OMP_4.5");
1891 KMP_VERSION_SYMBOL(FTN_GET_PARTITION_NUM_PLACES, 45,
"OMP_4.5");
1892 KMP_VERSION_SYMBOL(FTN_GET_PARTITION_PLACE_NUMS, 45,
"OMP_4.5");
1893 KMP_VERSION_SYMBOL(FTN_GET_INITIAL_DEVICE, 45,
"OMP_4.5");
1897 KMP_VERSION_SYMBOL(FTN_PAUSE_RESOURCE, 50,
"OMP_5.0");
1898 KMP_VERSION_SYMBOL(FTN_PAUSE_RESOURCE_ALL, 50,
"OMP_5.0");
1900 #if KMP_FTN_ENTRIES == KMP_FTN_APPEND
1901 KMP_VERSION_SYMBOL(FTN_CAPTURE_AFFINITY, 50,
"OMP_5.0");
1902 KMP_VERSION_SYMBOL(FTN_DISPLAY_AFFINITY, 50,
"OMP_5.0");
1903 KMP_VERSION_SYMBOL(FTN_GET_AFFINITY_FORMAT, 50,
"OMP_5.0");
1904 KMP_VERSION_SYMBOL(FTN_SET_AFFINITY_FORMAT, 50,
"OMP_5.0");
KMP_EXPORT kmp_int32 __kmpc_bound_num_threads(ident_t *)