14#error The support file kmp_ftn_entry.h should not be compiled by itself.
28#include "ompt-specific.h"
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
71void 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);
80void 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);
89int 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;
100size_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;
111void FTN_STDCALL FTN_SET_BLOCKTIME(
int KMP_DEREF arg) {
113 __kmps_set_blocktime(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_set_blocktime(KMP_DEREF arg, thread, tid);
126int FTN_STDCALL FTN_GET_BLOCKTIME(
void) {
128 return __kmps_get_blocktime();
133 gtid = __kmp_entry_gtid();
134 tid = __kmp_tid_from_gtid(gtid);
135 team = __kmp_threads[gtid]->th.th_team;
138 if (__kmp_dflt_blocktime == KMP_MAX_BLOCKTIME) {
139 KF_TRACE(10, (
"kmp_get_blocktime: T#%d(%d:%d), blocktime=%d\n", gtid,
140 team->t.t_id, tid, KMP_MAX_BLOCKTIME));
141 return KMP_MAX_BLOCKTIME;
143#ifdef KMP_ADJUST_BLOCKTIME
144 else if (__kmp_zero_bt && !get__bt_set(team, tid)) {
145 KF_TRACE(10, (
"kmp_get_blocktime: T#%d(%d:%d), blocktime=%d\n", gtid,
146 team->t.t_id, tid, 0));
151 KF_TRACE(10, (
"kmp_get_blocktime: T#%d(%d:%d), blocktime=%d\n", gtid,
152 team->t.t_id, tid, get__blocktime(team, tid)));
153 return get__blocktime(team, tid);
158void FTN_STDCALL FTN_SET_LIBRARY_SERIAL(
void) {
160 __kmps_set_library(library_serial);
163 __kmp_user_set_library(library_serial);
167void FTN_STDCALL FTN_SET_LIBRARY_TURNAROUND(
void) {
169 __kmps_set_library(library_turnaround);
172 __kmp_user_set_library(library_turnaround);
176void FTN_STDCALL FTN_SET_LIBRARY_THROUGHPUT(
void) {
178 __kmps_set_library(library_throughput);
181 __kmp_user_set_library(library_throughput);
185void FTN_STDCALL FTN_SET_LIBRARY(
int KMP_DEREF arg) {
187 __kmps_set_library(KMP_DEREF arg);
189 enum library_type lib;
190 lib = (
enum library_type)KMP_DEREF arg;
192 __kmp_user_set_library(lib);
196int FTN_STDCALL FTN_GET_LIBRARY(
void) {
198 return __kmps_get_library();
200 if (!__kmp_init_serial) {
201 __kmp_serial_initialize();
203 return ((
int)__kmp_library);
207void FTN_STDCALL FTN_SET_DISP_NUM_BUFFERS(
int KMP_DEREF arg) {
213 int num_buffers = KMP_DEREF arg;
214 if (__kmp_init_serial == FALSE && num_buffers >= KMP_MIN_DISP_NUM_BUFF &&
215 num_buffers <= KMP_MAX_DISP_NUM_BUFF) {
216 __kmp_dispatch_num_buffers = num_buffers;
221int FTN_STDCALL FTN_SET_AFFINITY(
void **mask) {
222#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
225 if (!TCR_4(__kmp_init_middle)) {
226 __kmp_middle_initialize();
228 __kmp_assign_root_init_mask();
229 return __kmp_aux_set_affinity(mask);
233int FTN_STDCALL FTN_GET_AFFINITY(
void **mask) {
234#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
237 if (!TCR_4(__kmp_init_middle)) {
238 __kmp_middle_initialize();
240 __kmp_assign_root_init_mask();
241 int gtid = __kmp_get_gtid();
242 if (__kmp_threads[gtid]->th.th_team->t.t_level == 0 &&
243 __kmp_affinity.flags.reset) {
244 __kmp_reset_root_init_mask(gtid);
246 return __kmp_aux_get_affinity(mask);
250int FTN_STDCALL FTN_GET_AFFINITY_MAX_PROC(
void) {
251#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
255 if (!TCR_4(__kmp_init_middle)) {
256 __kmp_middle_initialize();
258 __kmp_assign_root_init_mask();
259 return __kmp_aux_get_affinity_max_proc();
263void FTN_STDCALL FTN_CREATE_AFFINITY_MASK(
void **mask) {
264#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
268 kmp_affin_mask_t *mask_internals;
269 if (!TCR_4(__kmp_init_middle)) {
270 __kmp_middle_initialize();
272 __kmp_assign_root_init_mask();
273 mask_internals = __kmp_affinity_dispatch->allocate_mask();
274 KMP_CPU_ZERO(mask_internals);
275 *mask = mask_internals;
279void FTN_STDCALL FTN_DESTROY_AFFINITY_MASK(
void **mask) {
280#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
284 kmp_affin_mask_t *mask_internals;
285 if (!TCR_4(__kmp_init_middle)) {
286 __kmp_middle_initialize();
288 __kmp_assign_root_init_mask();
289 if (__kmp_env_consistency_check) {
291 KMP_FATAL(AffinityInvalidMask,
"kmp_destroy_affinity_mask");
294 mask_internals = (kmp_affin_mask_t *)(*mask);
295 __kmp_affinity_dispatch->deallocate_mask(mask_internals);
300int FTN_STDCALL FTN_SET_AFFINITY_MASK_PROC(
int KMP_DEREF proc,
void **mask) {
301#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
304 if (!TCR_4(__kmp_init_middle)) {
305 __kmp_middle_initialize();
307 __kmp_assign_root_init_mask();
308 return __kmp_aux_set_affinity_mask_proc(KMP_DEREF proc, mask);
312int FTN_STDCALL FTN_UNSET_AFFINITY_MASK_PROC(
int KMP_DEREF proc,
void **mask) {
313#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
316 if (!TCR_4(__kmp_init_middle)) {
317 __kmp_middle_initialize();
319 __kmp_assign_root_init_mask();
320 return __kmp_aux_unset_affinity_mask_proc(KMP_DEREF proc, mask);
324int FTN_STDCALL FTN_GET_AFFINITY_MASK_PROC(
int KMP_DEREF proc,
void **mask) {
325#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
328 if (!TCR_4(__kmp_init_middle)) {
329 __kmp_middle_initialize();
331 __kmp_assign_root_init_mask();
332 return __kmp_aux_get_affinity_mask_proc(KMP_DEREF proc, mask);
339void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NUM_THREADS)(
int KMP_DEREF arg) {
343 __kmp_set_num_threads(KMP_DEREF arg, __kmp_entry_gtid());
348int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_THREADS)(void) {
357int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_MAX_THREADS)(void) {
363 if (!TCR_4(__kmp_init_middle)) {
364 __kmp_middle_initialize();
366 gtid = __kmp_entry_gtid();
367 thread = __kmp_threads[gtid];
368#if KMP_AFFINITY_SUPPORTED
369 if (thread->th.th_team->t.t_level == 0 && !__kmp_affinity.flags.reset) {
370 __kmp_assign_root_init_mask();
375 return thread->th.th_current_task->td_icvs.nproc;
379int FTN_STDCALL FTN_CONTROL_TOOL(
int command,
int modifier,
void *arg) {
380#if defined(KMP_STUB) || !OMPT_SUPPORT
383 OMPT_STORE_RETURN_ADDRESS(__kmp_entry_gtid());
384 if (!TCR_4(__kmp_init_middle)) {
387 kmp_info_t *this_thr = __kmp_threads[__kmp_entry_gtid()];
388 ompt_task_info_t *parent_task_info = OMPT_CUR_TASK_INFO(this_thr);
389 parent_task_info->frame.enter_frame.ptr = OMPT_GET_FRAME_ADDRESS(0);
390 int ret = __kmp_control_tool(command, modifier, arg);
391 parent_task_info->frame.enter_frame.ptr = 0;
397omp_allocator_handle_t FTN_STDCALL
398FTN_INIT_ALLOCATOR(omp_memspace_handle_t KMP_DEREF m,
int KMP_DEREF ntraits,
399 omp_alloctrait_t tr[]) {
403 return __kmpc_init_allocator(__kmp_entry_gtid(), KMP_DEREF m,
404 KMP_DEREF ntraits, tr);
408void FTN_STDCALL FTN_DESTROY_ALLOCATOR(omp_allocator_handle_t al) {
410 __kmpc_destroy_allocator(__kmp_entry_gtid(), al);
413void FTN_STDCALL FTN_SET_DEFAULT_ALLOCATOR(omp_allocator_handle_t al) {
415 __kmpc_set_default_allocator(__kmp_entry_gtid(), al);
418omp_allocator_handle_t FTN_STDCALL FTN_GET_DEFAULT_ALLOCATOR(
void) {
422 return __kmpc_get_default_allocator(__kmp_entry_gtid());
428static void __kmp_fortran_strncpy_truncate(
char *buffer,
size_t buf_size,
429 char const *csrc,
size_t csrc_size) {
430 size_t capped_src_size = csrc_size;
431 if (csrc_size >= buf_size) {
432 capped_src_size = buf_size - 1;
434 KMP_STRNCPY_S(buffer, buf_size, csrc, capped_src_size);
435 if (csrc_size >= buf_size) {
436 KMP_DEBUG_ASSERT(buffer[buf_size - 1] ==
'\0');
437 buffer[buf_size - 1] = csrc[buf_size - 1];
439 for (
size_t i = csrc_size; i < buf_size; ++i)
445class ConvertedString {
450 ConvertedString(
char const *fortran_str,
size_t size) {
451 th = __kmp_get_thread();
452 buf = (
char *)__kmp_thread_malloc(th, size + 1);
453 KMP_STRNCPY_S(buf, size + 1, fortran_str, size);
456 ~ConvertedString() { __kmp_thread_free(th, buf); }
457 const char *get()
const {
return buf; }
465void FTN_STDCALL KMP_EXPAND_NAME_IF_APPEND(FTN_SET_AFFINITY_FORMAT)(
466 char const *format,
size_t size) {
470 if (!__kmp_init_serial) {
471 __kmp_serial_initialize();
473 ConvertedString cformat(format, size);
476 __kmp_strncpy_truncate(__kmp_affinity_format, KMP_AFFINITY_FORMAT_SIZE,
477 cformat.get(), KMP_STRLEN(cformat.get()));
487size_t FTN_STDCALL KMP_EXPAND_NAME_IF_APPEND(FTN_GET_AFFINITY_FORMAT)(
488 char *buffer,
size_t size) {
493 if (!__kmp_init_serial) {
494 __kmp_serial_initialize();
496 format_size = KMP_STRLEN(__kmp_affinity_format);
497 if (buffer && size) {
498 __kmp_fortran_strncpy_truncate(buffer, size, __kmp_affinity_format,
510void FTN_STDCALL KMP_EXPAND_NAME_IF_APPEND(FTN_DISPLAY_AFFINITY)(
511 char const *format,
size_t size) {
516 if (!TCR_4(__kmp_init_middle)) {
517 __kmp_middle_initialize();
519 __kmp_assign_root_init_mask();
520 gtid = __kmp_get_gtid();
521#if KMP_AFFINITY_SUPPORTED
522 if (__kmp_threads[gtid]->th.th_team->t.t_level == 0 &&
523 __kmp_affinity.flags.reset) {
524 __kmp_reset_root_init_mask(gtid);
527 ConvertedString cformat(format, size);
528 __kmp_aux_display_affinity(gtid, cformat.get());
542size_t FTN_STDCALL KMP_EXPAND_NAME_IF_APPEND(FTN_CAPTURE_AFFINITY)(
543 char *buffer,
char const *format,
size_t buf_size,
size_t for_size) {
549 kmp_str_buf_t capture_buf;
550 if (!TCR_4(__kmp_init_middle)) {
551 __kmp_middle_initialize();
553 __kmp_assign_root_init_mask();
554 gtid = __kmp_get_gtid();
555#if KMP_AFFINITY_SUPPORTED
556 if (__kmp_threads[gtid]->th.th_team->t.t_level == 0 &&
557 __kmp_affinity.flags.reset) {
558 __kmp_reset_root_init_mask(gtid);
561 __kmp_str_buf_init(&capture_buf);
562 ConvertedString cformat(format, for_size);
563 num_required = __kmp_aux_capture_affinity(gtid, cformat.get(), &capture_buf);
564 if (buffer && buf_size) {
565 __kmp_fortran_strncpy_truncate(buffer, buf_size, capture_buf.str,
568 __kmp_str_buf_free(&capture_buf);
573int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_THREAD_NUM)(void) {
579#if KMP_OS_DARWIN || KMP_OS_DRAGONFLY || KMP_OS_FREEBSD || KMP_OS_NETBSD || \
580 KMP_OS_HURD || KMP_OS_OPENBSD
581 gtid = __kmp_entry_gtid();
583 if (!__kmp_init_parallel ||
584 (gtid = (
int)((kmp_intptr_t)TlsGetValue(__kmp_gtid_threadprivate_key))) ==
593 if (__kmp_gtid_mode >= 3) {
594 if ((gtid = __kmp_gtid) == KMP_GTID_DNE) {
599 if (!__kmp_init_parallel ||
600 (gtid = (
int)((kmp_intptr_t)(
601 pthread_getspecific(__kmp_gtid_threadprivate_key)))) == 0) {
609#error Unknown or unsupported OS
612 return __kmp_tid_from_gtid(gtid);
616int FTN_STDCALL FTN_GET_NUM_KNOWN_THREADS(
void) {
620 if (!__kmp_init_serial) {
621 __kmp_serial_initialize();
625 return TCR_4(__kmp_nth);
629int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_PROCS)(void) {
633 if (!TCR_4(__kmp_init_middle)) {
634 __kmp_middle_initialize();
636#if KMP_AFFINITY_SUPPORTED
637 if (!__kmp_affinity.flags.reset) {
639 int gtid = __kmp_entry_gtid();
640 kmp_info_t *thread = __kmp_threads[gtid];
641 if (thread->th.th_team->t.t_level == 0) {
642 __kmp_assign_root_init_mask();
646 return __kmp_avail_proc;
650void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NESTED)(
int KMP_DEREF flag) {
652 __kmps_set_nested(KMP_DEREF flag);
656 thread = __kmp_entry_thread();
657 KMP_INFORM(APIDeprecated,
"omp_set_nested",
"omp_set_max_active_levels");
658 __kmp_save_internal_controls(thread);
660 int max_active_levels = get__max_active_levels(thread);
661 if (max_active_levels == 1)
662 max_active_levels = KMP_MAX_ACTIVE_LEVELS_LIMIT;
663 set__max_active_levels(thread, (KMP_DEREF flag) ? max_active_levels : 1);
667int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NESTED)(void) {
669 return __kmps_get_nested();
672 thread = __kmp_entry_thread();
673 KMP_INFORM(APIDeprecated,
"omp_get_nested",
"omp_get_max_active_levels");
674 return get__max_active_levels(thread) > 1;
678void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_DYNAMIC)(
int KMP_DEREF flag) {
680 __kmps_set_dynamic(KMP_DEREF flag ? TRUE : FALSE);
684 thread = __kmp_entry_thread();
686 __kmp_save_internal_controls(thread);
687 set__dynamic(thread, KMP_DEREF flag ?
true : false);
691int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_DYNAMIC)(void) {
693 return __kmps_get_dynamic();
696 thread = __kmp_entry_thread();
697 return get__dynamic(thread);
701int FTN_STDCALL KMP_EXPAND_NAME(FTN_IN_PARALLEL)(void) {
705 kmp_info_t *th = __kmp_entry_thread();
706 if (th->th.th_teams_microtask) {
711 return (th->th.th_team->t.t_active_level ? 1 : 0);
713 return (th->th.th_root->r.r_in_parallel ? FTN_TRUE : FTN_FALSE);
717void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_SCHEDULE)(kmp_sched_t KMP_DEREF kind,
718 int KMP_DEREF modifier) {
720 __kmps_set_schedule(KMP_DEREF kind, KMP_DEREF modifier);
723 __kmp_set_schedule(__kmp_entry_gtid(), KMP_DEREF kind, KMP_DEREF modifier);
727void FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_SCHEDULE)(kmp_sched_t *kind,
730 __kmps_get_schedule(kind, modifier);
733 __kmp_get_schedule(__kmp_entry_gtid(), kind, modifier);
737void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_MAX_ACTIVE_LEVELS)(
int KMP_DEREF arg) {
742 __kmp_set_max_active_levels(__kmp_entry_gtid(), KMP_DEREF arg);
746int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_MAX_ACTIVE_LEVELS)(void) {
751 if (!TCR_4(__kmp_init_middle)) {
752 __kmp_middle_initialize();
754 return __kmp_get_max_active_levels(__kmp_entry_gtid());
758int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_ACTIVE_LEVEL)(void) {
763 return __kmp_entry_thread()->th.th_team->t.t_active_level;
767int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_LEVEL)(void) {
772 return __kmp_entry_thread()->th.th_team->t.t_level;
777KMP_EXPAND_NAME(FTN_GET_ANCESTOR_THREAD_NUM)(
int KMP_DEREF level) {
779 return (KMP_DEREF level) ? (-1) : (0);
781 return __kmp_get_ancestor_thread_num(__kmp_entry_gtid(), KMP_DEREF level);
785int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_TEAM_SIZE)(
int KMP_DEREF level) {
787 return (KMP_DEREF level) ? (-1) : (1);
789 return __kmp_get_team_size(__kmp_entry_gtid(), KMP_DEREF level);
793int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_THREAD_LIMIT)(void) {
799 if (!__kmp_init_serial) {
800 __kmp_serial_initialize();
803 gtid = __kmp_entry_gtid();
804 thread = __kmp_threads[gtid];
805 return thread->th.th_current_task->td_icvs.thread_limit;
809int FTN_STDCALL KMP_EXPAND_NAME(FTN_IN_FINAL)(void) {
813 if (!TCR_4(__kmp_init_parallel)) {
816 return __kmp_entry_thread()->th.th_current_task->td_flags.final;
820kmp_proc_bind_t FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PROC_BIND)(void) {
822 return __kmps_get_proc_bind();
824 return get__proc_bind(__kmp_entry_thread());
828int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_PLACES)(void) {
829#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
832 if (!TCR_4(__kmp_init_middle)) {
833 __kmp_middle_initialize();
835 if (!KMP_AFFINITY_CAPABLE())
837 if (!__kmp_affinity.flags.reset) {
839 int gtid = __kmp_entry_gtid();
840 kmp_info_t *thread = __kmp_threads[gtid];
841 if (thread->th.th_team->t.t_level == 0) {
842 __kmp_assign_root_init_mask();
845 return __kmp_affinity.num_masks;
849int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_NUM_PROCS)(
int place_num) {
850#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
855 if (!TCR_4(__kmp_init_middle)) {
856 __kmp_middle_initialize();
858 if (!KMP_AFFINITY_CAPABLE())
860 if (!__kmp_affinity.flags.reset) {
862 int gtid = __kmp_entry_gtid();
863 kmp_info_t *thread = __kmp_threads[gtid];
864 if (thread->th.th_team->t.t_level == 0) {
865 __kmp_assign_root_init_mask();
868 if (place_num < 0 || place_num >= (
int)__kmp_affinity.num_masks)
870 kmp_affin_mask_t *mask = KMP_CPU_INDEX(__kmp_affinity.masks, place_num);
871 KMP_CPU_SET_ITERATE(i, mask) {
872 if ((!KMP_CPU_ISSET(i, __kmp_affin_fullMask)) ||
873 (!KMP_CPU_ISSET(i, mask))) {
882void FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_PROC_IDS)(
int place_num,
884#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
888 if (!TCR_4(__kmp_init_middle)) {
889 __kmp_middle_initialize();
891 if (!KMP_AFFINITY_CAPABLE())
893 if (!__kmp_affinity.flags.reset) {
895 int gtid = __kmp_entry_gtid();
896 kmp_info_t *thread = __kmp_threads[gtid];
897 if (thread->th.th_team->t.t_level == 0) {
898 __kmp_assign_root_init_mask();
901 if (place_num < 0 || place_num >= (
int)__kmp_affinity.num_masks)
903 kmp_affin_mask_t *mask = KMP_CPU_INDEX(__kmp_affinity.masks, place_num);
905 KMP_CPU_SET_ITERATE(i, mask) {
906 if ((!KMP_CPU_ISSET(i, __kmp_affin_fullMask)) ||
907 (!KMP_CPU_ISSET(i, mask))) {
915int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_NUM)(void) {
916#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
921 if (!TCR_4(__kmp_init_middle)) {
922 __kmp_middle_initialize();
924 if (!KMP_AFFINITY_CAPABLE())
926 gtid = __kmp_entry_gtid();
927 thread = __kmp_thread_from_gtid(gtid);
928 if (thread->th.th_team->t.t_level == 0 && !__kmp_affinity.flags.reset) {
929 __kmp_assign_root_init_mask();
931 if (thread->th.th_current_place < 0)
933 return thread->th.th_current_place;
937int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PARTITION_NUM_PLACES)(void) {
938#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
941 int gtid, num_places, first_place, last_place;
943 if (!TCR_4(__kmp_init_middle)) {
944 __kmp_middle_initialize();
946 if (!KMP_AFFINITY_CAPABLE())
948 gtid = __kmp_entry_gtid();
949 thread = __kmp_thread_from_gtid(gtid);
950 if (thread->th.th_team->t.t_level == 0 && !__kmp_affinity.flags.reset) {
951 __kmp_assign_root_init_mask();
953 first_place = thread->th.th_first_place;
954 last_place = thread->th.th_last_place;
955 if (first_place < 0 || last_place < 0)
957 if (first_place <= last_place)
958 num_places = last_place - first_place + 1;
960 num_places = __kmp_affinity.num_masks - first_place + last_place + 1;
966KMP_EXPAND_NAME(FTN_GET_PARTITION_PLACE_NUMS)(
int *place_nums) {
967#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
970 int i, gtid, place_num, first_place, last_place, start, end;
972 if (!TCR_4(__kmp_init_middle)) {
973 __kmp_middle_initialize();
975 if (!KMP_AFFINITY_CAPABLE())
977 gtid = __kmp_entry_gtid();
978 thread = __kmp_thread_from_gtid(gtid);
979 if (thread->th.th_team->t.t_level == 0 && !__kmp_affinity.flags.reset) {
980 __kmp_assign_root_init_mask();
982 first_place = thread->th.th_first_place;
983 last_place = thread->th.th_last_place;
984 if (first_place < 0 || last_place < 0)
986 if (first_place <= last_place) {
993 for (i = 0, place_num = start; place_num <= end; ++place_num, ++i) {
994 place_nums[i] = place_num;
999int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_TEAMS)(void) {
1003 return __kmp_aux_get_num_teams();
1007int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_TEAM_NUM)(void) {
1011 return __kmp_aux_get_team_num();
1015int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_DEFAULT_DEVICE)(void) {
1016#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
1019 return __kmp_entry_thread()->th.th_current_task->td_icvs.default_device;
1023void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_DEFAULT_DEVICE)(
int KMP_DEREF arg) {
1024#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
1027 __kmp_entry_thread()->th.th_current_task->td_icvs.default_device =
1034int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_DEVICES)(void)
1035 KMP_WEAK_ATTRIBUTE_EXTERNAL;
1036int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_DEVICES)(void) {
1037#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
1041 if ((*(
void **)(&fptr) = KMP_DLSYM(
"__tgt_get_num_devices"))) {
1043 }
else if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_num_devices"))) {
1045 }
else if ((*(
void **)(&fptr) = KMP_DLSYM(
"_Offload_number_of_devices"))) {
1055int FTN_STDCALL KMP_EXPAND_NAME(FTN_IS_INITIAL_DEVICE)(void)
1056 KMP_WEAK_ATTRIBUTE_EXTERNAL;
1057int FTN_STDCALL KMP_EXPAND_NAME(FTN_IS_INITIAL_DEVICE)(void) {
1062int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_INITIAL_DEVICE)(void)
1063 KMP_WEAK_ATTRIBUTE_EXTERNAL;
1064int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_INITIAL_DEVICE)(void) {
1066 return KMP_EXPAND_NAME(FTN_GET_NUM_DEVICES)();
1069#if defined(KMP_STUB)
1072void *FTN_STDCALL FTN_TARGET_ALLOC(
size_t size,
int device_num) {
return 0; }
1074void FTN_STDCALL FTN_TARGET_FREE(
void *device_ptr,
int device_num) {}
1076int FTN_STDCALL FTN_TARGET_IS_PRESENT(
void *ptr,
int device_num) {
return 0; }
1078int FTN_STDCALL FTN_TARGET_MEMCPY(
void *dst,
void *src,
size_t length,
1079 size_t dst_offset,
size_t src_offset,
1080 int dst_device,
int src_device) {
1084int FTN_STDCALL FTN_TARGET_MEMCPY_RECT(
1085 void *dst,
void *src,
size_t element_size,
int num_dims,
1086 const size_t *volume,
const size_t *dst_offsets,
const size_t *src_offsets,
1087 const size_t *dst_dimensions,
const size_t *src_dimensions,
int dst_device,
1092int FTN_STDCALL FTN_TARGET_ASSOCIATE_PTR(
void *host_ptr,
void *device_ptr,
1093 size_t size,
size_t device_offset,
1098int FTN_STDCALL FTN_TARGET_DISASSOCIATE_PTR(
void *host_ptr,
int device_num) {
1104typedef enum { UNINIT = -1, UNLOCKED, LOCKED } kmp_stub_lock_t;
1107#if KMP_USE_DYNAMIC_LOCK
1108void FTN_STDCALL FTN_INIT_LOCK_WITH_HINT(
void **user_lock,
1109 uintptr_t KMP_DEREF hint) {
1111 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1113 int gtid = __kmp_entry_gtid();
1114#if OMPT_SUPPORT && OMPT_OPTIONAL
1115 OMPT_STORE_RETURN_ADDRESS(gtid);
1117 __kmpc_init_lock_with_hint(NULL, gtid, user_lock, KMP_DEREF hint);
1121void FTN_STDCALL FTN_INIT_NEST_LOCK_WITH_HINT(
void **user_lock,
1122 uintptr_t KMP_DEREF hint) {
1124 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1126 int gtid = __kmp_entry_gtid();
1127#if OMPT_SUPPORT && OMPT_OPTIONAL
1128 OMPT_STORE_RETURN_ADDRESS(gtid);
1130 __kmpc_init_nest_lock_with_hint(NULL, gtid, user_lock, KMP_DEREF hint);
1136void FTN_STDCALL KMP_EXPAND_NAME(FTN_INIT_LOCK)(
void **user_lock) {
1138 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1140 int gtid = __kmp_entry_gtid();
1141#if OMPT_SUPPORT && OMPT_OPTIONAL
1142 OMPT_STORE_RETURN_ADDRESS(gtid);
1144 __kmpc_init_lock(NULL, gtid, user_lock);
1149void FTN_STDCALL KMP_EXPAND_NAME(FTN_INIT_NEST_LOCK)(
void **user_lock) {
1151 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1153 int gtid = __kmp_entry_gtid();
1154#if OMPT_SUPPORT && OMPT_OPTIONAL
1155 OMPT_STORE_RETURN_ADDRESS(gtid);
1157 __kmpc_init_nest_lock(NULL, gtid, user_lock);
1161void FTN_STDCALL KMP_EXPAND_NAME(FTN_DESTROY_LOCK)(
void **user_lock) {
1163 *((kmp_stub_lock_t *)user_lock) = UNINIT;
1165 int gtid = __kmp_entry_gtid();
1166#if OMPT_SUPPORT && OMPT_OPTIONAL
1167 OMPT_STORE_RETURN_ADDRESS(gtid);
1169 __kmpc_destroy_lock(NULL, gtid, user_lock);
1173void FTN_STDCALL KMP_EXPAND_NAME(FTN_DESTROY_NEST_LOCK)(
void **user_lock) {
1175 *((kmp_stub_lock_t *)user_lock) = UNINIT;
1177 int gtid = __kmp_entry_gtid();
1178#if OMPT_SUPPORT && OMPT_OPTIONAL
1179 OMPT_STORE_RETURN_ADDRESS(gtid);
1181 __kmpc_destroy_nest_lock(NULL, gtid, user_lock);
1185void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_LOCK)(
void **user_lock) {
1187 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1190 if (*((kmp_stub_lock_t *)user_lock) != UNLOCKED) {
1193 *((kmp_stub_lock_t *)user_lock) = LOCKED;
1195 int gtid = __kmp_entry_gtid();
1196#if OMPT_SUPPORT && OMPT_OPTIONAL
1197 OMPT_STORE_RETURN_ADDRESS(gtid);
1199 __kmpc_set_lock(NULL, gtid, user_lock);
1203void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NEST_LOCK)(
void **user_lock) {
1205 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1208 (*((
int *)user_lock))++;
1210 int gtid = __kmp_entry_gtid();
1211#if OMPT_SUPPORT && OMPT_OPTIONAL
1212 OMPT_STORE_RETURN_ADDRESS(gtid);
1214 __kmpc_set_nest_lock(NULL, gtid, user_lock);
1218void FTN_STDCALL KMP_EXPAND_NAME(FTN_UNSET_LOCK)(
void **user_lock) {
1220 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1223 if (*((kmp_stub_lock_t *)user_lock) == UNLOCKED) {
1226 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1228 int gtid = __kmp_entry_gtid();
1229#if OMPT_SUPPORT && OMPT_OPTIONAL
1230 OMPT_STORE_RETURN_ADDRESS(gtid);
1232 __kmpc_unset_lock(NULL, gtid, user_lock);
1236void FTN_STDCALL KMP_EXPAND_NAME(FTN_UNSET_NEST_LOCK)(
void **user_lock) {
1238 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1241 if (*((kmp_stub_lock_t *)user_lock) == UNLOCKED) {
1244 (*((
int *)user_lock))--;
1246 int gtid = __kmp_entry_gtid();
1247#if OMPT_SUPPORT && OMPT_OPTIONAL
1248 OMPT_STORE_RETURN_ADDRESS(gtid);
1250 __kmpc_unset_nest_lock(NULL, gtid, user_lock);
1254int FTN_STDCALL KMP_EXPAND_NAME(FTN_TEST_LOCK)(
void **user_lock) {
1256 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1259 if (*((kmp_stub_lock_t *)user_lock) == LOCKED) {
1262 *((kmp_stub_lock_t *)user_lock) = LOCKED;
1265 int gtid = __kmp_entry_gtid();
1266#if OMPT_SUPPORT && OMPT_OPTIONAL
1267 OMPT_STORE_RETURN_ADDRESS(gtid);
1269 return __kmpc_test_lock(NULL, gtid, user_lock);
1273int FTN_STDCALL KMP_EXPAND_NAME(FTN_TEST_NEST_LOCK)(
void **user_lock) {
1275 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1278 return ++(*((
int *)user_lock));
1280 int gtid = __kmp_entry_gtid();
1281#if OMPT_SUPPORT && OMPT_OPTIONAL
1282 OMPT_STORE_RETURN_ADDRESS(gtid);
1284 return __kmpc_test_nest_lock(NULL, gtid, user_lock);
1288double FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_WTIME)(void) {
1290 return __kmps_get_wtime();
1296 if (!__kmp_init_serial) {
1297 __kmp_serial_initialize();
1300 __kmp_elapsed(&data);
1305double FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_WTICK)(void) {
1307 return __kmps_get_wtick();
1310 if (!__kmp_init_serial) {
1311 __kmp_serial_initialize();
1313 __kmp_elapsed_tick(&data);
1320void *FTN_STDCALL FTN_MALLOC(
size_t KMP_DEREF size) {
1322 return kmpc_malloc(KMP_DEREF size);
1325void *FTN_STDCALL FTN_ALIGNED_MALLOC(
size_t KMP_DEREF size,
1326 size_t KMP_DEREF alignment) {
1328 return kmpc_aligned_malloc(KMP_DEREF size, KMP_DEREF alignment);
1331void *FTN_STDCALL FTN_CALLOC(
size_t KMP_DEREF nelem,
size_t KMP_DEREF elsize) {
1333 return kmpc_calloc(KMP_DEREF nelem, KMP_DEREF elsize);
1336void *FTN_STDCALL FTN_REALLOC(
void *KMP_DEREF ptr,
size_t KMP_DEREF size) {
1338 return kmpc_realloc(KMP_DEREF ptr, KMP_DEREF size);
1341void FTN_STDCALL FTN_KFREE(
void *KMP_DEREF ptr) {
1343 kmpc_free(KMP_DEREF ptr);
1346void FTN_STDCALL FTN_SET_WARNINGS_ON(
void) {
1348 __kmp_generate_warnings = kmp_warnings_explicit;
1352void FTN_STDCALL FTN_SET_WARNINGS_OFF(
void) {
1354 __kmp_generate_warnings = FALSE;
1358void FTN_STDCALL FTN_SET_DEFAULTS(
char const *str
1359#ifndef PASS_ARGS_BY_VALUE
1365#ifdef PASS_ARGS_BY_VALUE
1366 int len = (int)KMP_STRLEN(str);
1368 __kmp_aux_set_defaults(str, len);
1375int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_CANCELLATION)(void) {
1380 if (!__kmp_init_serial) {
1381 __kmp_serial_initialize();
1383 return __kmp_omp_cancellation;
1387int FTN_STDCALL FTN_GET_CANCELLATION_STATUS(
int cancel_kind) {
1391 return __kmp_get_cancellation_status(cancel_kind);
1396int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_MAX_TASK_PRIORITY)(void) {
1400 if (!__kmp_init_serial) {
1401 __kmp_serial_initialize();
1403 return __kmp_max_task_priority;
1410int FTN_STDCALL FTN_GET_DEVICE_NUM(
void) KMP_WEAK_ATTRIBUTE_EXTERNAL;
1411int FTN_STDCALL FTN_GET_DEVICE_NUM(
void) {
1412 return KMP_EXPAND_NAME(FTN_GET_INITIAL_DEVICE)();
1416int FTN_STDCALL KMP_EXPAND_NAME(FTN_PAUSE_RESOURCE)(kmp_pause_status_t kind,
1421 if (device_num == KMP_EXPAND_NAME(FTN_GET_INITIAL_DEVICE)())
1422 return __kmpc_pause_resource(kind);
1424 int (*fptr)(kmp_pause_status_t, int);
1425 if ((*(
void **)(&fptr) = KMP_DLSYM(
"tgt_pause_resource")))
1426 return (*fptr)(kind, device_num);
1435 KMP_EXPAND_NAME(FTN_PAUSE_RESOURCE_ALL)(kmp_pause_status_t kind) {
1440 int (*fptr)(kmp_pause_status_t, int);
1441 if ((*(
void **)(&fptr) = KMP_DLSYM(
"tgt_pause_resource")))
1442 fails = (*fptr)(kind, KMP_DEVICE_ALL);
1443 fails += __kmpc_pause_resource(kind);
1449int FTN_STDCALL FTN_GET_SUPPORTED_ACTIVE_LEVELS(
void) {
1453 return KMP_MAX_ACTIVE_LEVELS_LIMIT;
1457void FTN_STDCALL FTN_FULFILL_EVENT(kmp_event_t *event) {
1459 __kmp_fulfill_event(event);
1464void FTN_STDCALL FTN_SET_NUM_TEAMS(
int KMP_DEREF num_teams) {
1468 if (!__kmp_init_serial) {
1469 __kmp_serial_initialize();
1471 __kmp_set_num_teams(KMP_DEREF num_teams);
1474int FTN_STDCALL FTN_GET_MAX_TEAMS(
void) {
1478 if (!__kmp_init_serial) {
1479 __kmp_serial_initialize();
1481 return __kmp_get_max_teams();
1485void FTN_STDCALL FTN_SET_TEAMS_THREAD_LIMIT(
int KMP_DEREF limit) {
1489 if (!__kmp_init_serial) {
1490 __kmp_serial_initialize();
1492 __kmp_set_teams_thread_limit(KMP_DEREF limit);
1495int FTN_STDCALL FTN_GET_TEAMS_THREAD_LIMIT(
void) {
1499 if (!__kmp_init_serial) {
1500 __kmp_serial_initialize();
1502 return __kmp_get_teams_thread_limit();
1508typedef intptr_t omp_intptr_t;
1512typedef enum omp_interop_property {
1514 omp_ipr_fr_name = -2,
1515 omp_ipr_vendor = -3,
1516 omp_ipr_vendor_name = -4,
1517 omp_ipr_device_num = -5,
1518 omp_ipr_platform = -6,
1519 omp_ipr_device = -7,
1520 omp_ipr_device_context = -8,
1521 omp_ipr_targetsync = -9,
1523} omp_interop_property_t;
1525#define omp_interop_none 0
1527typedef enum omp_interop_rc {
1528 omp_irc_no_value = 1,
1529 omp_irc_success = 0,
1531 omp_irc_out_of_range = -2,
1532 omp_irc_type_int = -3,
1533 omp_irc_type_ptr = -4,
1534 omp_irc_type_str = -5,
1538typedef enum omp_interop_fr {
1540 omp_ifr_cuda_driver = 2,
1544 omp_ifr_level_zero = 6,
1548typedef void *omp_interop_t;
1551int FTN_STDCALL FTN_GET_NUM_INTEROP_PROPERTIES(
const omp_interop_t interop) {
1552#if KMP_OS_DARWIN || defined(KMP_STUB)
1555 int (*fptr)(
const omp_interop_t);
1556 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_num_interop_properties")))
1557 return (*fptr)(interop);
1564intptr_t FTN_STDCALL FTN_GET_INTEROP_INT(
const omp_interop_t interop,
1565 omp_interop_property_t property_id,
1567#if KMP_OS_DARWIN || defined(KMP_STUB)
1570 intptr_t (*fptr)(
const omp_interop_t, omp_interop_property_t,
int *);
1571 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_int")))
1572 return (*fptr)(interop, property_id, err);
1578void *FTN_STDCALL FTN_GET_INTEROP_PTR(
const omp_interop_t interop,
1579 omp_interop_property_t property_id,
1581#if KMP_OS_DARWIN || defined(KMP_STUB)
1584 void *(*fptr)(
const omp_interop_t, omp_interop_property_t,
int *);
1585 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_ptr")))
1586 return (*fptr)(interop, property_id, err);
1592const char *FTN_STDCALL FTN_GET_INTEROP_STR(
const omp_interop_t interop,
1593 omp_interop_property_t property_id,
1595#if KMP_OS_DARWIN || defined(KMP_STUB)
1598 const char *(*fptr)(
const omp_interop_t, omp_interop_property_t,
int *);
1599 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_str")))
1600 return (*fptr)(interop, property_id, err);
1606const char *FTN_STDCALL FTN_GET_INTEROP_NAME(
1607 const omp_interop_t interop, omp_interop_property_t property_id) {
1608#if KMP_OS_DARWIN || defined(KMP_STUB)
1611 const char *(*fptr)(
const omp_interop_t, omp_interop_property_t);
1612 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_name")))
1613 return (*fptr)(interop, property_id);
1619const char *FTN_STDCALL FTN_GET_INTEROP_TYPE_DESC(
1620 const omp_interop_t interop, omp_interop_property_t property_id) {
1621#if KMP_OS_DARWIN || defined(KMP_STUB)
1624 const char *(*fptr)(
const omp_interop_t, omp_interop_property_t);
1625 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_type_desc")))
1626 return (*fptr)(interop, property_id);
1632const char *FTN_STDCALL FTN_GET_INTEROP_RC_DESC(
1633 const omp_interop_t interop, omp_interop_property_t property_id) {
1634#if KMP_OS_DARWIN || defined(KMP_STUB)
1637 const char *(*fptr)(
const omp_interop_t, omp_interop_property_t);
1638 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_rec_desc")))
1639 return (*fptr)(interop, property_id);
1645void FTN_STDCALL FTN_DISPLAY_ENV(
int verbose) {
1647 __kmp_omp_display_env(verbose);
1651int FTN_STDCALL FTN_IN_EXPLICIT_TASK(
void) {
1655 int gtid = __kmp_entry_gtid();
1656 return __kmp_thread_from_gtid(gtid)->th.th_current_task->td_flags.tasktype;
1661#ifdef KMP_USE_VERSION_SYMBOLS
1683KMP_VERSION_SYMBOL(FTN_SET_NUM_THREADS, 10,
"OMP_1.0");
1684KMP_VERSION_SYMBOL(FTN_GET_NUM_THREADS, 10,
"OMP_1.0");
1685KMP_VERSION_SYMBOL(FTN_GET_MAX_THREADS, 10,
"OMP_1.0");
1686KMP_VERSION_SYMBOL(FTN_GET_THREAD_NUM, 10,
"OMP_1.0");
1687KMP_VERSION_SYMBOL(FTN_GET_NUM_PROCS, 10,
"OMP_1.0");
1688KMP_VERSION_SYMBOL(FTN_IN_PARALLEL, 10,
"OMP_1.0");
1689KMP_VERSION_SYMBOL(FTN_SET_DYNAMIC, 10,
"OMP_1.0");
1690KMP_VERSION_SYMBOL(FTN_GET_DYNAMIC, 10,
"OMP_1.0");
1691KMP_VERSION_SYMBOL(FTN_SET_NESTED, 10,
"OMP_1.0");
1692KMP_VERSION_SYMBOL(FTN_GET_NESTED, 10,
"OMP_1.0");
1693KMP_VERSION_SYMBOL(FTN_INIT_LOCK, 10,
"OMP_1.0");
1694KMP_VERSION_SYMBOL(FTN_INIT_NEST_LOCK, 10,
"OMP_1.0");
1695KMP_VERSION_SYMBOL(FTN_DESTROY_LOCK, 10,
"OMP_1.0");
1696KMP_VERSION_SYMBOL(FTN_DESTROY_NEST_LOCK, 10,
"OMP_1.0");
1697KMP_VERSION_SYMBOL(FTN_SET_LOCK, 10,
"OMP_1.0");
1698KMP_VERSION_SYMBOL(FTN_SET_NEST_LOCK, 10,
"OMP_1.0");
1699KMP_VERSION_SYMBOL(FTN_UNSET_LOCK, 10,
"OMP_1.0");
1700KMP_VERSION_SYMBOL(FTN_UNSET_NEST_LOCK, 10,
"OMP_1.0");
1701KMP_VERSION_SYMBOL(FTN_TEST_LOCK, 10,
"OMP_1.0");
1702KMP_VERSION_SYMBOL(FTN_TEST_NEST_LOCK, 10,
"OMP_1.0");
1705KMP_VERSION_SYMBOL(FTN_GET_WTICK, 20,
"OMP_2.0");
1706KMP_VERSION_SYMBOL(FTN_GET_WTIME, 20,
"OMP_2.0");
1709KMP_VERSION_SYMBOL(FTN_SET_SCHEDULE, 30,
"OMP_3.0");
1710KMP_VERSION_SYMBOL(FTN_GET_SCHEDULE, 30,
"OMP_3.0");
1711KMP_VERSION_SYMBOL(FTN_GET_THREAD_LIMIT, 30,
"OMP_3.0");
1712KMP_VERSION_SYMBOL(FTN_SET_MAX_ACTIVE_LEVELS, 30,
"OMP_3.0");
1713KMP_VERSION_SYMBOL(FTN_GET_MAX_ACTIVE_LEVELS, 30,
"OMP_3.0");
1714KMP_VERSION_SYMBOL(FTN_GET_ANCESTOR_THREAD_NUM, 30,
"OMP_3.0");
1715KMP_VERSION_SYMBOL(FTN_GET_LEVEL, 30,
"OMP_3.0");
1716KMP_VERSION_SYMBOL(FTN_GET_TEAM_SIZE, 30,
"OMP_3.0");
1717KMP_VERSION_SYMBOL(FTN_GET_ACTIVE_LEVEL, 30,
"OMP_3.0");
1720KMP_VERSION_SYMBOL(FTN_INIT_LOCK, 30,
"OMP_3.0");
1721KMP_VERSION_SYMBOL(FTN_INIT_NEST_LOCK, 30,
"OMP_3.0");
1722KMP_VERSION_SYMBOL(FTN_DESTROY_LOCK, 30,
"OMP_3.0");
1723KMP_VERSION_SYMBOL(FTN_DESTROY_NEST_LOCK, 30,
"OMP_3.0");
1724KMP_VERSION_SYMBOL(FTN_SET_LOCK, 30,
"OMP_3.0");
1725KMP_VERSION_SYMBOL(FTN_SET_NEST_LOCK, 30,
"OMP_3.0");
1726KMP_VERSION_SYMBOL(FTN_UNSET_LOCK, 30,
"OMP_3.0");
1727KMP_VERSION_SYMBOL(FTN_UNSET_NEST_LOCK, 30,
"OMP_3.0");
1728KMP_VERSION_SYMBOL(FTN_TEST_LOCK, 30,
"OMP_3.0");
1729KMP_VERSION_SYMBOL(FTN_TEST_NEST_LOCK, 30,
"OMP_3.0");
1732KMP_VERSION_SYMBOL(FTN_IN_FINAL, 31,
"OMP_3.1");
1735KMP_VERSION_SYMBOL(FTN_GET_PROC_BIND, 40,
"OMP_4.0");
1736KMP_VERSION_SYMBOL(FTN_GET_NUM_TEAMS, 40,
"OMP_4.0");
1737KMP_VERSION_SYMBOL(FTN_GET_TEAM_NUM, 40,
"OMP_4.0");
1738KMP_VERSION_SYMBOL(FTN_GET_CANCELLATION, 40,
"OMP_4.0");
1739KMP_VERSION_SYMBOL(FTN_GET_DEFAULT_DEVICE, 40,
"OMP_4.0");
1740KMP_VERSION_SYMBOL(FTN_SET_DEFAULT_DEVICE, 40,
"OMP_4.0");
1741KMP_VERSION_SYMBOL(FTN_IS_INITIAL_DEVICE, 40,
"OMP_4.0");
1742KMP_VERSION_SYMBOL(FTN_GET_NUM_DEVICES, 40,
"OMP_4.0");
1745KMP_VERSION_SYMBOL(FTN_GET_MAX_TASK_PRIORITY, 45,
"OMP_4.5");
1746KMP_VERSION_SYMBOL(FTN_GET_NUM_PLACES, 45,
"OMP_4.5");
1747KMP_VERSION_SYMBOL(FTN_GET_PLACE_NUM_PROCS, 45,
"OMP_4.5");
1748KMP_VERSION_SYMBOL(FTN_GET_PLACE_PROC_IDS, 45,
"OMP_4.5");
1749KMP_VERSION_SYMBOL(FTN_GET_PLACE_NUM, 45,
"OMP_4.5");
1750KMP_VERSION_SYMBOL(FTN_GET_PARTITION_NUM_PLACES, 45,
"OMP_4.5");
1751KMP_VERSION_SYMBOL(FTN_GET_PARTITION_PLACE_NUMS, 45,
"OMP_4.5");
1752KMP_VERSION_SYMBOL(FTN_GET_INITIAL_DEVICE, 45,
"OMP_4.5");
1756KMP_VERSION_SYMBOL(FTN_PAUSE_RESOURCE, 50,
"OMP_5.0");
1757KMP_VERSION_SYMBOL(FTN_PAUSE_RESOURCE_ALL, 50,
"OMP_5.0");
1759#if KMP_FTN_ENTRIES == KMP_FTN_APPEND
1760KMP_VERSION_SYMBOL(FTN_CAPTURE_AFFINITY, 50,
"OMP_5.0");
1761KMP_VERSION_SYMBOL(FTN_DISPLAY_AFFINITY, 50,
"OMP_5.0");
1762KMP_VERSION_SYMBOL(FTN_GET_AFFINITY_FORMAT, 50,
"OMP_5.0");
1763KMP_VERSION_SYMBOL(FTN_SET_AFFINITY_FORMAT, 50,
"OMP_5.0");
KMP_EXPORT kmp_int32 __kmpc_bound_num_threads(ident_t *)