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);
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);
128int 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));
163void FTN_STDCALL FTN_SET_LIBRARY_SERIAL(
void) {
165 __kmps_set_library(library_serial);
168 __kmp_user_set_library(library_serial);
172void FTN_STDCALL FTN_SET_LIBRARY_TURNAROUND(
void) {
174 __kmps_set_library(library_turnaround);
177 __kmp_user_set_library(library_turnaround);
181void FTN_STDCALL FTN_SET_LIBRARY_THROUGHPUT(
void) {
183 __kmps_set_library(library_throughput);
186 __kmp_user_set_library(library_throughput);
190void 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);
201int 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);
212void 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;
226int 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);
238int 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);
255int 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();
268void 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;
284void 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);
305int 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);
317int 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);
329int 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);
344void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NUM_THREADS)(
int KMP_DEREF arg) {
348 __kmp_set_num_threads(KMP_DEREF arg, __kmp_entry_gtid());
353int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_THREADS)(void) {
362int 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;
384int 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;
402omp_allocator_handle_t FTN_STDCALL
403FTN_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);
413void FTN_STDCALL FTN_DESTROY_ALLOCATOR(omp_allocator_handle_t al) {
415 __kmpc_destroy_allocator(__kmp_entry_gtid(), al);
418void FTN_STDCALL FTN_SET_DEFAULT_ALLOCATOR(omp_allocator_handle_t al) {
420 __kmpc_set_default_allocator(__kmp_entry_gtid(), al);
423omp_allocator_handle_t FTN_STDCALL FTN_GET_DEFAULT_ALLOCATOR(
void) {
427 return __kmpc_get_default_allocator(__kmp_entry_gtid());
433static void __kmp_fortran_strncpy_truncate(
char *buffer,
size_t buf_size,
434 char const *csrc,
size_t csrc_size) {
435 size_t capped_src_size = csrc_size;
436 if (csrc_size >= buf_size) {
437 capped_src_size = buf_size - 1;
439 KMP_STRNCPY_S(buffer, buf_size, csrc, capped_src_size);
440 if (csrc_size >= buf_size) {
441 KMP_DEBUG_ASSERT(buffer[buf_size - 1] ==
'\0');
442 buffer[buf_size - 1] = csrc[buf_size - 1];
444 for (
size_t i = csrc_size; i < buf_size; ++i)
450class ConvertedString {
455 ConvertedString(
char const *fortran_str,
size_t size) {
456 th = __kmp_get_thread();
457 buf = (
char *)__kmp_thread_malloc(th, size + 1);
458 KMP_STRNCPY_S(buf, size + 1, fortran_str, size);
461 ~ConvertedString() { __kmp_thread_free(th, buf); }
462 const char *get()
const {
return buf; }
470void FTN_STDCALL KMP_EXPAND_NAME_IF_APPEND(FTN_SET_AFFINITY_FORMAT)(
471 char const *format,
size_t size) {
475 if (!__kmp_init_serial) {
476 __kmp_serial_initialize();
478 ConvertedString cformat(format, size);
481 __kmp_strncpy_truncate(__kmp_affinity_format, KMP_AFFINITY_FORMAT_SIZE,
482 cformat.get(), KMP_STRLEN(cformat.get()));
492size_t FTN_STDCALL KMP_EXPAND_NAME_IF_APPEND(FTN_GET_AFFINITY_FORMAT)(
493 char *buffer,
size_t size) {
498 if (!__kmp_init_serial) {
499 __kmp_serial_initialize();
501 format_size = KMP_STRLEN(__kmp_affinity_format);
502 if (buffer && size) {
503 __kmp_fortran_strncpy_truncate(buffer, size, __kmp_affinity_format,
515void FTN_STDCALL KMP_EXPAND_NAME_IF_APPEND(FTN_DISPLAY_AFFINITY)(
516 char const *format,
size_t size) {
521 if (!TCR_4(__kmp_init_middle)) {
522 __kmp_middle_initialize();
524 __kmp_assign_root_init_mask();
525 gtid = __kmp_get_gtid();
526#if KMP_AFFINITY_SUPPORTED
527 if (__kmp_threads[gtid]->th.th_team->t.t_level == 0 &&
528 __kmp_affinity.flags.reset) {
529 __kmp_reset_root_init_mask(gtid);
532 ConvertedString cformat(format, size);
533 __kmp_aux_display_affinity(gtid, cformat.get());
547size_t FTN_STDCALL KMP_EXPAND_NAME_IF_APPEND(FTN_CAPTURE_AFFINITY)(
548 char *buffer,
char const *format,
size_t buf_size,
size_t for_size) {
554 kmp_str_buf_t capture_buf;
555 if (!TCR_4(__kmp_init_middle)) {
556 __kmp_middle_initialize();
558 __kmp_assign_root_init_mask();
559 gtid = __kmp_get_gtid();
560#if KMP_AFFINITY_SUPPORTED
561 if (__kmp_threads[gtid]->th.th_team->t.t_level == 0 &&
562 __kmp_affinity.flags.reset) {
563 __kmp_reset_root_init_mask(gtid);
566 __kmp_str_buf_init(&capture_buf);
567 ConvertedString cformat(format, for_size);
568 num_required = __kmp_aux_capture_affinity(gtid, cformat.get(), &capture_buf);
569 if (buffer && buf_size) {
570 __kmp_fortran_strncpy_truncate(buffer, buf_size, capture_buf.str,
573 __kmp_str_buf_free(&capture_buf);
578int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_THREAD_NUM)(void) {
584#if KMP_OS_DARWIN || KMP_OS_DRAGONFLY || KMP_OS_FREEBSD || KMP_OS_NETBSD || \
585 KMP_OS_OPENBSD || KMP_OS_HURD || KMP_OS_SOLARIS
586 gtid = __kmp_entry_gtid();
588 if (!__kmp_init_parallel ||
589 (gtid = (
int)((kmp_intptr_t)TlsGetValue(__kmp_gtid_threadprivate_key))) ==
598 if (__kmp_gtid_mode >= 3) {
599 if ((gtid = __kmp_gtid) == KMP_GTID_DNE) {
604 if (!__kmp_init_parallel ||
605 (gtid = (
int)((kmp_intptr_t)(
606 pthread_getspecific(__kmp_gtid_threadprivate_key)))) == 0) {
614#error Unknown or unsupported OS
617 return __kmp_tid_from_gtid(gtid);
621int FTN_STDCALL FTN_GET_NUM_KNOWN_THREADS(
void) {
625 if (!__kmp_init_serial) {
626 __kmp_serial_initialize();
630 return TCR_4(__kmp_nth);
634int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_PROCS)(void) {
638 if (!TCR_4(__kmp_init_middle)) {
639 __kmp_middle_initialize();
641#if KMP_AFFINITY_SUPPORTED
642 if (!__kmp_affinity.flags.reset) {
644 int gtid = __kmp_entry_gtid();
645 kmp_info_t *thread = __kmp_threads[gtid];
646 if (thread->th.th_team->t.t_level == 0) {
647 __kmp_assign_root_init_mask();
651 return __kmp_avail_proc;
655void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NESTED)(
int KMP_DEREF flag) {
657 __kmps_set_nested(KMP_DEREF flag);
661 thread = __kmp_entry_thread();
662 KMP_INFORM(APIDeprecated,
"omp_set_nested",
"omp_set_max_active_levels");
663 __kmp_save_internal_controls(thread);
665 int max_active_levels = get__max_active_levels(thread);
666 if (max_active_levels == 1)
667 max_active_levels = KMP_MAX_ACTIVE_LEVELS_LIMIT;
668 set__max_active_levels(thread, (KMP_DEREF flag) ? max_active_levels : 1);
672int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NESTED)(void) {
674 return __kmps_get_nested();
677 thread = __kmp_entry_thread();
678 KMP_INFORM(APIDeprecated,
"omp_get_nested",
"omp_get_max_active_levels");
679 return get__max_active_levels(thread) > 1;
683void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_DYNAMIC)(
int KMP_DEREF flag) {
685 __kmps_set_dynamic(KMP_DEREF flag ? TRUE : FALSE);
689 thread = __kmp_entry_thread();
691 __kmp_save_internal_controls(thread);
692 set__dynamic(thread, KMP_DEREF flag ?
true : false);
696int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_DYNAMIC)(void) {
698 return __kmps_get_dynamic();
701 thread = __kmp_entry_thread();
702 return get__dynamic(thread);
706int FTN_STDCALL KMP_EXPAND_NAME(FTN_IN_PARALLEL)(void) {
710 kmp_info_t *th = __kmp_entry_thread();
711 if (th->th.th_teams_microtask) {
716 return (th->th.th_team->t.t_active_level ? 1 : 0);
718 return (th->th.th_root->r.r_in_parallel ? FTN_TRUE : FTN_FALSE);
722void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_SCHEDULE)(kmp_sched_t KMP_DEREF kind,
723 int KMP_DEREF modifier) {
725 __kmps_set_schedule(KMP_DEREF kind, KMP_DEREF modifier);
728 __kmp_set_schedule(__kmp_entry_gtid(), KMP_DEREF kind, KMP_DEREF modifier);
732void FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_SCHEDULE)(kmp_sched_t *kind,
735 __kmps_get_schedule(kind, modifier);
738 __kmp_get_schedule(__kmp_entry_gtid(), kind, modifier);
742void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_MAX_ACTIVE_LEVELS)(
int KMP_DEREF arg) {
747 __kmp_set_max_active_levels(__kmp_entry_gtid(), KMP_DEREF arg);
751int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_MAX_ACTIVE_LEVELS)(void) {
756 if (!TCR_4(__kmp_init_middle)) {
757 __kmp_middle_initialize();
759 return __kmp_get_max_active_levels(__kmp_entry_gtid());
763int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_ACTIVE_LEVEL)(void) {
768 return __kmp_entry_thread()->th.th_team->t.t_active_level;
772int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_LEVEL)(void) {
777 return __kmp_entry_thread()->th.th_team->t.t_level;
782KMP_EXPAND_NAME(FTN_GET_ANCESTOR_THREAD_NUM)(
int KMP_DEREF level) {
784 return (KMP_DEREF level) ? (-1) : (0);
786 return __kmp_get_ancestor_thread_num(__kmp_entry_gtid(), KMP_DEREF level);
790int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_TEAM_SIZE)(
int KMP_DEREF level) {
792 return (KMP_DEREF level) ? (-1) : (1);
794 return __kmp_get_team_size(__kmp_entry_gtid(), KMP_DEREF level);
798int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_THREAD_LIMIT)(void) {
804 if (!__kmp_init_serial) {
805 __kmp_serial_initialize();
808 gtid = __kmp_entry_gtid();
809 thread = __kmp_threads[gtid];
812 if (
int thread_limit = thread->th.th_current_task->td_icvs.task_thread_limit)
814 return thread->th.th_current_task->td_icvs.thread_limit;
818int FTN_STDCALL KMP_EXPAND_NAME(FTN_IN_FINAL)(void) {
822 if (!TCR_4(__kmp_init_parallel)) {
825 return __kmp_entry_thread()->th.th_current_task->td_flags.final;
829kmp_proc_bind_t FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PROC_BIND)(void) {
831 return __kmps_get_proc_bind();
833 return get__proc_bind(__kmp_entry_thread());
837int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_PLACES)(void) {
838#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
841 if (!TCR_4(__kmp_init_middle)) {
842 __kmp_middle_initialize();
844 if (!KMP_AFFINITY_CAPABLE())
846 if (!__kmp_affinity.flags.reset) {
848 int gtid = __kmp_entry_gtid();
849 kmp_info_t *thread = __kmp_threads[gtid];
850 if (thread->th.th_team->t.t_level == 0) {
851 __kmp_assign_root_init_mask();
854 return __kmp_affinity.num_masks;
858int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_NUM_PROCS)(
int place_num) {
859#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
864 if (!TCR_4(__kmp_init_middle)) {
865 __kmp_middle_initialize();
867 if (!KMP_AFFINITY_CAPABLE())
869 if (!__kmp_affinity.flags.reset) {
871 int gtid = __kmp_entry_gtid();
872 kmp_info_t *thread = __kmp_threads[gtid];
873 if (thread->th.th_team->t.t_level == 0) {
874 __kmp_assign_root_init_mask();
877 if (place_num < 0 || place_num >= (
int)__kmp_affinity.num_masks)
879 kmp_affin_mask_t *mask = KMP_CPU_INDEX(__kmp_affinity.masks, place_num);
880 KMP_CPU_SET_ITERATE(i, mask) {
881 if ((!KMP_CPU_ISSET(i, __kmp_affin_fullMask)) ||
882 (!KMP_CPU_ISSET(i, mask))) {
891void FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_PROC_IDS)(
int place_num,
893#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
897 if (!TCR_4(__kmp_init_middle)) {
898 __kmp_middle_initialize();
900 if (!KMP_AFFINITY_CAPABLE())
902 if (!__kmp_affinity.flags.reset) {
904 int gtid = __kmp_entry_gtid();
905 kmp_info_t *thread = __kmp_threads[gtid];
906 if (thread->th.th_team->t.t_level == 0) {
907 __kmp_assign_root_init_mask();
910 if (place_num < 0 || place_num >= (
int)__kmp_affinity.num_masks)
912 kmp_affin_mask_t *mask = KMP_CPU_INDEX(__kmp_affinity.masks, place_num);
914 KMP_CPU_SET_ITERATE(i, mask) {
915 if ((!KMP_CPU_ISSET(i, __kmp_affin_fullMask)) ||
916 (!KMP_CPU_ISSET(i, mask))) {
924int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_NUM)(void) {
925#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
930 if (!TCR_4(__kmp_init_middle)) {
931 __kmp_middle_initialize();
933 if (!KMP_AFFINITY_CAPABLE())
935 gtid = __kmp_entry_gtid();
936 thread = __kmp_thread_from_gtid(gtid);
937 if (thread->th.th_team->t.t_level == 0 && !__kmp_affinity.flags.reset) {
938 __kmp_assign_root_init_mask();
940 if (thread->th.th_current_place < 0)
942 return thread->th.th_current_place;
946int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PARTITION_NUM_PLACES)(void) {
947#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
950 int gtid, num_places, first_place, last_place;
952 if (!TCR_4(__kmp_init_middle)) {
953 __kmp_middle_initialize();
955 if (!KMP_AFFINITY_CAPABLE())
957 gtid = __kmp_entry_gtid();
958 thread = __kmp_thread_from_gtid(gtid);
959 if (thread->th.th_team->t.t_level == 0 && !__kmp_affinity.flags.reset) {
960 __kmp_assign_root_init_mask();
962 first_place = thread->th.th_first_place;
963 last_place = thread->th.th_last_place;
964 if (first_place < 0 || last_place < 0)
966 if (first_place <= last_place)
967 num_places = last_place - first_place + 1;
969 num_places = __kmp_affinity.num_masks - first_place + last_place + 1;
975KMP_EXPAND_NAME(FTN_GET_PARTITION_PLACE_NUMS)(
int *place_nums) {
976#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
979 int i, gtid, place_num, first_place, last_place, start, end;
981 if (!TCR_4(__kmp_init_middle)) {
982 __kmp_middle_initialize();
984 if (!KMP_AFFINITY_CAPABLE())
986 gtid = __kmp_entry_gtid();
987 thread = __kmp_thread_from_gtid(gtid);
988 if (thread->th.th_team->t.t_level == 0 && !__kmp_affinity.flags.reset) {
989 __kmp_assign_root_init_mask();
991 first_place = thread->th.th_first_place;
992 last_place = thread->th.th_last_place;
993 if (first_place < 0 || last_place < 0)
995 if (first_place <= last_place) {
1002 for (i = 0, place_num = start; place_num <= end; ++place_num, ++i) {
1003 place_nums[i] = place_num;
1008int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_TEAMS)(void) {
1012 return __kmp_aux_get_num_teams();
1016int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_TEAM_NUM)(void) {
1020 return __kmp_aux_get_team_num();
1024int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_DEFAULT_DEVICE)(void) {
1025#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
1028 return __kmp_entry_thread()->th.th_current_task->td_icvs.default_device;
1032void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_DEFAULT_DEVICE)(
int KMP_DEREF arg) {
1033#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
1036 __kmp_entry_thread()->th.th_current_task->td_icvs.default_device =
1043int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_DEVICES)(void)
1044 KMP_WEAK_ATTRIBUTE_EXTERNAL;
1045int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_DEVICES)(void) {
1046#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
1050 if ((*(
void **)(&fptr) = KMP_DLSYM(
"__tgt_get_num_devices"))) {
1052 }
else if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_num_devices"))) {
1054 }
else if ((*(
void **)(&fptr) = KMP_DLSYM(
"_Offload_number_of_devices"))) {
1064int FTN_STDCALL KMP_EXPAND_NAME(FTN_IS_INITIAL_DEVICE)(void)
1065 KMP_WEAK_ATTRIBUTE_EXTERNAL;
1066int FTN_STDCALL KMP_EXPAND_NAME(FTN_IS_INITIAL_DEVICE)(void) {
1071int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_INITIAL_DEVICE)(void)
1072 KMP_WEAK_ATTRIBUTE_EXTERNAL;
1073int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_INITIAL_DEVICE)(void) {
1075 return KMP_EXPAND_NAME(FTN_GET_NUM_DEVICES)();
1078#if defined(KMP_STUB)
1081void *FTN_STDCALL FTN_TARGET_ALLOC(
size_t size,
int device_num) {
return 0; }
1083void FTN_STDCALL FTN_TARGET_FREE(
void *device_ptr,
int device_num) {}
1085int FTN_STDCALL FTN_TARGET_IS_PRESENT(
void *ptr,
int device_num) {
return 0; }
1087int FTN_STDCALL FTN_TARGET_MEMCPY(
void *dst,
void *src,
size_t length,
1088 size_t dst_offset,
size_t src_offset,
1089 int dst_device,
int src_device) {
1093int FTN_STDCALL FTN_TARGET_MEMCPY_RECT(
1094 void *dst,
void *src,
size_t element_size,
int num_dims,
1095 const size_t *volume,
const size_t *dst_offsets,
const size_t *src_offsets,
1096 const size_t *dst_dimensions,
const size_t *src_dimensions,
int dst_device,
1101int FTN_STDCALL FTN_TARGET_ASSOCIATE_PTR(
void *host_ptr,
void *device_ptr,
1102 size_t size,
size_t device_offset,
1107int FTN_STDCALL FTN_TARGET_DISASSOCIATE_PTR(
void *host_ptr,
int device_num) {
1113typedef enum { UNINIT = -1, UNLOCKED, LOCKED } kmp_stub_lock_t;
1116#if KMP_USE_DYNAMIC_LOCK
1117void FTN_STDCALL FTN_INIT_LOCK_WITH_HINT(
void **user_lock,
1118 uintptr_t KMP_DEREF hint) {
1120 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1122 int gtid = __kmp_entry_gtid();
1123#if OMPT_SUPPORT && OMPT_OPTIONAL
1124 OMPT_STORE_RETURN_ADDRESS(gtid);
1126 __kmpc_init_lock_with_hint(NULL, gtid, user_lock, KMP_DEREF hint);
1130void FTN_STDCALL FTN_INIT_NEST_LOCK_WITH_HINT(
void **user_lock,
1131 uintptr_t KMP_DEREF hint) {
1133 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1135 int gtid = __kmp_entry_gtid();
1136#if OMPT_SUPPORT && OMPT_OPTIONAL
1137 OMPT_STORE_RETURN_ADDRESS(gtid);
1139 __kmpc_init_nest_lock_with_hint(NULL, gtid, user_lock, KMP_DEREF hint);
1145void FTN_STDCALL KMP_EXPAND_NAME(FTN_INIT_LOCK)(
void **user_lock) {
1147 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1149 int gtid = __kmp_entry_gtid();
1150#if OMPT_SUPPORT && OMPT_OPTIONAL
1151 OMPT_STORE_RETURN_ADDRESS(gtid);
1153 __kmpc_init_lock(NULL, gtid, user_lock);
1158void FTN_STDCALL KMP_EXPAND_NAME(FTN_INIT_NEST_LOCK)(
void **user_lock) {
1160 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1162 int gtid = __kmp_entry_gtid();
1163#if OMPT_SUPPORT && OMPT_OPTIONAL
1164 OMPT_STORE_RETURN_ADDRESS(gtid);
1166 __kmpc_init_nest_lock(NULL, gtid, user_lock);
1170void FTN_STDCALL KMP_EXPAND_NAME(FTN_DESTROY_LOCK)(
void **user_lock) {
1172 *((kmp_stub_lock_t *)user_lock) = UNINIT;
1174 int gtid = __kmp_entry_gtid();
1175#if OMPT_SUPPORT && OMPT_OPTIONAL
1176 OMPT_STORE_RETURN_ADDRESS(gtid);
1178 __kmpc_destroy_lock(NULL, gtid, user_lock);
1182void FTN_STDCALL KMP_EXPAND_NAME(FTN_DESTROY_NEST_LOCK)(
void **user_lock) {
1184 *((kmp_stub_lock_t *)user_lock) = UNINIT;
1186 int gtid = __kmp_entry_gtid();
1187#if OMPT_SUPPORT && OMPT_OPTIONAL
1188 OMPT_STORE_RETURN_ADDRESS(gtid);
1190 __kmpc_destroy_nest_lock(NULL, gtid, user_lock);
1194void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_LOCK)(
void **user_lock) {
1196 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1199 if (*((kmp_stub_lock_t *)user_lock) != UNLOCKED) {
1202 *((kmp_stub_lock_t *)user_lock) = LOCKED;
1204 int gtid = __kmp_entry_gtid();
1205#if OMPT_SUPPORT && OMPT_OPTIONAL
1206 OMPT_STORE_RETURN_ADDRESS(gtid);
1208 __kmpc_set_lock(NULL, gtid, user_lock);
1212void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NEST_LOCK)(
void **user_lock) {
1214 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1217 (*((
int *)user_lock))++;
1219 int gtid = __kmp_entry_gtid();
1220#if OMPT_SUPPORT && OMPT_OPTIONAL
1221 OMPT_STORE_RETURN_ADDRESS(gtid);
1223 __kmpc_set_nest_lock(NULL, gtid, user_lock);
1227void FTN_STDCALL KMP_EXPAND_NAME(FTN_UNSET_LOCK)(
void **user_lock) {
1229 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1232 if (*((kmp_stub_lock_t *)user_lock) == UNLOCKED) {
1235 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1237 int gtid = __kmp_entry_gtid();
1238#if OMPT_SUPPORT && OMPT_OPTIONAL
1239 OMPT_STORE_RETURN_ADDRESS(gtid);
1241 __kmpc_unset_lock(NULL, gtid, user_lock);
1245void FTN_STDCALL KMP_EXPAND_NAME(FTN_UNSET_NEST_LOCK)(
void **user_lock) {
1247 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1250 if (*((kmp_stub_lock_t *)user_lock) == UNLOCKED) {
1253 (*((
int *)user_lock))--;
1255 int gtid = __kmp_entry_gtid();
1256#if OMPT_SUPPORT && OMPT_OPTIONAL
1257 OMPT_STORE_RETURN_ADDRESS(gtid);
1259 __kmpc_unset_nest_lock(NULL, gtid, user_lock);
1263int FTN_STDCALL KMP_EXPAND_NAME(FTN_TEST_LOCK)(
void **user_lock) {
1265 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1268 if (*((kmp_stub_lock_t *)user_lock) == LOCKED) {
1271 *((kmp_stub_lock_t *)user_lock) = LOCKED;
1274 int gtid = __kmp_entry_gtid();
1275#if OMPT_SUPPORT && OMPT_OPTIONAL
1276 OMPT_STORE_RETURN_ADDRESS(gtid);
1278 return __kmpc_test_lock(NULL, gtid, user_lock);
1282int FTN_STDCALL KMP_EXPAND_NAME(FTN_TEST_NEST_LOCK)(
void **user_lock) {
1284 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1287 return ++(*((
int *)user_lock));
1289 int gtid = __kmp_entry_gtid();
1290#if OMPT_SUPPORT && OMPT_OPTIONAL
1291 OMPT_STORE_RETURN_ADDRESS(gtid);
1293 return __kmpc_test_nest_lock(NULL, gtid, user_lock);
1297double FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_WTIME)(void) {
1299 return __kmps_get_wtime();
1305 if (!__kmp_init_serial) {
1306 __kmp_serial_initialize();
1309 __kmp_elapsed(&data);
1314double FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_WTICK)(void) {
1316 return __kmps_get_wtick();
1319 if (!__kmp_init_serial) {
1320 __kmp_serial_initialize();
1322 __kmp_elapsed_tick(&data);
1329void *FTN_STDCALL FTN_MALLOC(
size_t KMP_DEREF size) {
1331 return kmpc_malloc(KMP_DEREF size);
1334void *FTN_STDCALL FTN_ALIGNED_MALLOC(
size_t KMP_DEREF size,
1335 size_t KMP_DEREF alignment) {
1337 return kmpc_aligned_malloc(KMP_DEREF size, KMP_DEREF alignment);
1340void *FTN_STDCALL FTN_CALLOC(
size_t KMP_DEREF nelem,
size_t KMP_DEREF elsize) {
1342 return kmpc_calloc(KMP_DEREF nelem, KMP_DEREF elsize);
1345void *FTN_STDCALL FTN_REALLOC(
void *KMP_DEREF ptr,
size_t KMP_DEREF size) {
1347 return kmpc_realloc(KMP_DEREF ptr, KMP_DEREF size);
1350void FTN_STDCALL FTN_KFREE(
void *KMP_DEREF ptr) {
1352 kmpc_free(KMP_DEREF ptr);
1355void FTN_STDCALL FTN_SET_WARNINGS_ON(
void) {
1357 __kmp_generate_warnings = kmp_warnings_explicit;
1361void FTN_STDCALL FTN_SET_WARNINGS_OFF(
void) {
1363 __kmp_generate_warnings = FALSE;
1367void FTN_STDCALL FTN_SET_DEFAULTS(
char const *str
1368#ifndef PASS_ARGS_BY_VALUE
1374#ifdef PASS_ARGS_BY_VALUE
1375 int len = (int)KMP_STRLEN(str);
1377 __kmp_aux_set_defaults(str, len);
1384int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_CANCELLATION)(void) {
1389 if (!__kmp_init_serial) {
1390 __kmp_serial_initialize();
1392 return __kmp_omp_cancellation;
1396int FTN_STDCALL FTN_GET_CANCELLATION_STATUS(
int cancel_kind) {
1400 return __kmp_get_cancellation_status(cancel_kind);
1405int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_MAX_TASK_PRIORITY)(void) {
1409 if (!__kmp_init_serial) {
1410 __kmp_serial_initialize();
1412 return __kmp_max_task_priority;
1419int FTN_STDCALL FTN_GET_DEVICE_NUM(
void) KMP_WEAK_ATTRIBUTE_EXTERNAL;
1420int FTN_STDCALL FTN_GET_DEVICE_NUM(
void) {
1421 return KMP_EXPAND_NAME(FTN_GET_INITIAL_DEVICE)();
1425int FTN_STDCALL KMP_EXPAND_NAME(FTN_PAUSE_RESOURCE)(kmp_pause_status_t kind,
1430 if (device_num == KMP_EXPAND_NAME(FTN_GET_INITIAL_DEVICE)())
1431 return __kmpc_pause_resource(kind);
1433 int (*fptr)(kmp_pause_status_t, int);
1434 if ((*(
void **)(&fptr) = KMP_DLSYM(
"tgt_pause_resource")))
1435 return (*fptr)(kind, device_num);
1444 KMP_EXPAND_NAME(FTN_PAUSE_RESOURCE_ALL)(kmp_pause_status_t kind) {
1449 int (*fptr)(kmp_pause_status_t, int);
1450 if ((*(
void **)(&fptr) = KMP_DLSYM(
"tgt_pause_resource")))
1451 fails = (*fptr)(kind, KMP_DEVICE_ALL);
1452 fails += __kmpc_pause_resource(kind);
1458int FTN_STDCALL FTN_GET_SUPPORTED_ACTIVE_LEVELS(
void) {
1462 return KMP_MAX_ACTIVE_LEVELS_LIMIT;
1466void FTN_STDCALL FTN_FULFILL_EVENT(kmp_event_t *event) {
1468 __kmp_fulfill_event(event);
1473void FTN_STDCALL FTN_SET_NUM_TEAMS(
int KMP_DEREF num_teams) {
1477 if (!__kmp_init_serial) {
1478 __kmp_serial_initialize();
1480 __kmp_set_num_teams(KMP_DEREF num_teams);
1483int FTN_STDCALL FTN_GET_MAX_TEAMS(
void) {
1487 if (!__kmp_init_serial) {
1488 __kmp_serial_initialize();
1490 return __kmp_get_max_teams();
1494void FTN_STDCALL FTN_SET_TEAMS_THREAD_LIMIT(
int KMP_DEREF limit) {
1498 if (!__kmp_init_serial) {
1499 __kmp_serial_initialize();
1501 __kmp_set_teams_thread_limit(KMP_DEREF limit);
1504int FTN_STDCALL FTN_GET_TEAMS_THREAD_LIMIT(
void) {
1508 if (!__kmp_init_serial) {
1509 __kmp_serial_initialize();
1511 return __kmp_get_teams_thread_limit();
1517typedef intptr_t omp_intptr_t;
1521typedef enum omp_interop_property {
1523 omp_ipr_fr_name = -2,
1524 omp_ipr_vendor = -3,
1525 omp_ipr_vendor_name = -4,
1526 omp_ipr_device_num = -5,
1527 omp_ipr_platform = -6,
1528 omp_ipr_device = -7,
1529 omp_ipr_device_context = -8,
1530 omp_ipr_targetsync = -9,
1532} omp_interop_property_t;
1534#define omp_interop_none 0
1536typedef enum omp_interop_rc {
1537 omp_irc_no_value = 1,
1538 omp_irc_success = 0,
1540 omp_irc_out_of_range = -2,
1541 omp_irc_type_int = -3,
1542 omp_irc_type_ptr = -4,
1543 omp_irc_type_str = -5,
1547typedef enum omp_interop_fr {
1549 omp_ifr_cuda_driver = 2,
1553 omp_ifr_level_zero = 6,
1557typedef void *omp_interop_t;
1560int FTN_STDCALL FTN_GET_NUM_INTEROP_PROPERTIES(
const omp_interop_t interop) {
1561#if KMP_OS_DARWIN || defined(KMP_STUB)
1564 int (*fptr)(
const omp_interop_t);
1565 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_num_interop_properties")))
1566 return (*fptr)(interop);
1573intptr_t FTN_STDCALL FTN_GET_INTEROP_INT(
const omp_interop_t interop,
1574 omp_interop_property_t property_id,
1576#if KMP_OS_DARWIN || defined(KMP_STUB)
1579 intptr_t (*fptr)(
const omp_interop_t, omp_interop_property_t,
int *);
1580 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_int")))
1581 return (*fptr)(interop, property_id, err);
1587void *FTN_STDCALL FTN_GET_INTEROP_PTR(
const omp_interop_t interop,
1588 omp_interop_property_t property_id,
1590#if KMP_OS_DARWIN || defined(KMP_STUB)
1593 void *(*fptr)(
const omp_interop_t, omp_interop_property_t,
int *);
1594 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_ptr")))
1595 return (*fptr)(interop, property_id, err);
1601const char *FTN_STDCALL FTN_GET_INTEROP_STR(
const omp_interop_t interop,
1602 omp_interop_property_t property_id,
1604#if KMP_OS_DARWIN || defined(KMP_STUB)
1607 const char *(*fptr)(
const omp_interop_t, omp_interop_property_t,
int *);
1608 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_str")))
1609 return (*fptr)(interop, property_id, err);
1615const char *FTN_STDCALL FTN_GET_INTEROP_NAME(
1616 const omp_interop_t interop, omp_interop_property_t property_id) {
1617#if KMP_OS_DARWIN || defined(KMP_STUB)
1620 const char *(*fptr)(
const omp_interop_t, omp_interop_property_t);
1621 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_name")))
1622 return (*fptr)(interop, property_id);
1628const char *FTN_STDCALL FTN_GET_INTEROP_TYPE_DESC(
1629 const omp_interop_t interop, omp_interop_property_t property_id) {
1630#if KMP_OS_DARWIN || defined(KMP_STUB)
1633 const char *(*fptr)(
const omp_interop_t, omp_interop_property_t);
1634 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_type_desc")))
1635 return (*fptr)(interop, property_id);
1641const char *FTN_STDCALL FTN_GET_INTEROP_RC_DESC(
1642 const omp_interop_t interop, omp_interop_property_t property_id) {
1643#if KMP_OS_DARWIN || defined(KMP_STUB)
1646 const char *(*fptr)(
const omp_interop_t, omp_interop_property_t);
1647 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_rec_desc")))
1648 return (*fptr)(interop, property_id);
1654void FTN_STDCALL FTN_DISPLAY_ENV(
int verbose) {
1656 __kmp_omp_display_env(verbose);
1660int FTN_STDCALL FTN_IN_EXPLICIT_TASK(
void) {
1664 int gtid = __kmp_entry_gtid();
1665 return __kmp_thread_from_gtid(gtid)->th.th_current_task->td_flags.tasktype;
1670#ifdef KMP_USE_VERSION_SYMBOLS
1692KMP_VERSION_SYMBOL(FTN_SET_NUM_THREADS, 10,
"OMP_1.0");
1693KMP_VERSION_SYMBOL(FTN_GET_NUM_THREADS, 10,
"OMP_1.0");
1694KMP_VERSION_SYMBOL(FTN_GET_MAX_THREADS, 10,
"OMP_1.0");
1695KMP_VERSION_SYMBOL(FTN_GET_THREAD_NUM, 10,
"OMP_1.0");
1696KMP_VERSION_SYMBOL(FTN_GET_NUM_PROCS, 10,
"OMP_1.0");
1697KMP_VERSION_SYMBOL(FTN_IN_PARALLEL, 10,
"OMP_1.0");
1698KMP_VERSION_SYMBOL(FTN_SET_DYNAMIC, 10,
"OMP_1.0");
1699KMP_VERSION_SYMBOL(FTN_GET_DYNAMIC, 10,
"OMP_1.0");
1700KMP_VERSION_SYMBOL(FTN_SET_NESTED, 10,
"OMP_1.0");
1701KMP_VERSION_SYMBOL(FTN_GET_NESTED, 10,
"OMP_1.0");
1702KMP_VERSION_SYMBOL(FTN_INIT_LOCK, 10,
"OMP_1.0");
1703KMP_VERSION_SYMBOL(FTN_INIT_NEST_LOCK, 10,
"OMP_1.0");
1704KMP_VERSION_SYMBOL(FTN_DESTROY_LOCK, 10,
"OMP_1.0");
1705KMP_VERSION_SYMBOL(FTN_DESTROY_NEST_LOCK, 10,
"OMP_1.0");
1706KMP_VERSION_SYMBOL(FTN_SET_LOCK, 10,
"OMP_1.0");
1707KMP_VERSION_SYMBOL(FTN_SET_NEST_LOCK, 10,
"OMP_1.0");
1708KMP_VERSION_SYMBOL(FTN_UNSET_LOCK, 10,
"OMP_1.0");
1709KMP_VERSION_SYMBOL(FTN_UNSET_NEST_LOCK, 10,
"OMP_1.0");
1710KMP_VERSION_SYMBOL(FTN_TEST_LOCK, 10,
"OMP_1.0");
1711KMP_VERSION_SYMBOL(FTN_TEST_NEST_LOCK, 10,
"OMP_1.0");
1714KMP_VERSION_SYMBOL(FTN_GET_WTICK, 20,
"OMP_2.0");
1715KMP_VERSION_SYMBOL(FTN_GET_WTIME, 20,
"OMP_2.0");
1718KMP_VERSION_SYMBOL(FTN_SET_SCHEDULE, 30,
"OMP_3.0");
1719KMP_VERSION_SYMBOL(FTN_GET_SCHEDULE, 30,
"OMP_3.0");
1720KMP_VERSION_SYMBOL(FTN_GET_THREAD_LIMIT, 30,
"OMP_3.0");
1721KMP_VERSION_SYMBOL(FTN_SET_MAX_ACTIVE_LEVELS, 30,
"OMP_3.0");
1722KMP_VERSION_SYMBOL(FTN_GET_MAX_ACTIVE_LEVELS, 30,
"OMP_3.0");
1723KMP_VERSION_SYMBOL(FTN_GET_ANCESTOR_THREAD_NUM, 30,
"OMP_3.0");
1724KMP_VERSION_SYMBOL(FTN_GET_LEVEL, 30,
"OMP_3.0");
1725KMP_VERSION_SYMBOL(FTN_GET_TEAM_SIZE, 30,
"OMP_3.0");
1726KMP_VERSION_SYMBOL(FTN_GET_ACTIVE_LEVEL, 30,
"OMP_3.0");
1729KMP_VERSION_SYMBOL(FTN_INIT_LOCK, 30,
"OMP_3.0");
1730KMP_VERSION_SYMBOL(FTN_INIT_NEST_LOCK, 30,
"OMP_3.0");
1731KMP_VERSION_SYMBOL(FTN_DESTROY_LOCK, 30,
"OMP_3.0");
1732KMP_VERSION_SYMBOL(FTN_DESTROY_NEST_LOCK, 30,
"OMP_3.0");
1733KMP_VERSION_SYMBOL(FTN_SET_LOCK, 30,
"OMP_3.0");
1734KMP_VERSION_SYMBOL(FTN_SET_NEST_LOCK, 30,
"OMP_3.0");
1735KMP_VERSION_SYMBOL(FTN_UNSET_LOCK, 30,
"OMP_3.0");
1736KMP_VERSION_SYMBOL(FTN_UNSET_NEST_LOCK, 30,
"OMP_3.0");
1737KMP_VERSION_SYMBOL(FTN_TEST_LOCK, 30,
"OMP_3.0");
1738KMP_VERSION_SYMBOL(FTN_TEST_NEST_LOCK, 30,
"OMP_3.0");
1741KMP_VERSION_SYMBOL(FTN_IN_FINAL, 31,
"OMP_3.1");
1744KMP_VERSION_SYMBOL(FTN_GET_PROC_BIND, 40,
"OMP_4.0");
1745KMP_VERSION_SYMBOL(FTN_GET_NUM_TEAMS, 40,
"OMP_4.0");
1746KMP_VERSION_SYMBOL(FTN_GET_TEAM_NUM, 40,
"OMP_4.0");
1747KMP_VERSION_SYMBOL(FTN_GET_CANCELLATION, 40,
"OMP_4.0");
1748KMP_VERSION_SYMBOL(FTN_GET_DEFAULT_DEVICE, 40,
"OMP_4.0");
1749KMP_VERSION_SYMBOL(FTN_SET_DEFAULT_DEVICE, 40,
"OMP_4.0");
1750KMP_VERSION_SYMBOL(FTN_IS_INITIAL_DEVICE, 40,
"OMP_4.0");
1751KMP_VERSION_SYMBOL(FTN_GET_NUM_DEVICES, 40,
"OMP_4.0");
1754KMP_VERSION_SYMBOL(FTN_GET_MAX_TASK_PRIORITY, 45,
"OMP_4.5");
1755KMP_VERSION_SYMBOL(FTN_GET_NUM_PLACES, 45,
"OMP_4.5");
1756KMP_VERSION_SYMBOL(FTN_GET_PLACE_NUM_PROCS, 45,
"OMP_4.5");
1757KMP_VERSION_SYMBOL(FTN_GET_PLACE_PROC_IDS, 45,
"OMP_4.5");
1758KMP_VERSION_SYMBOL(FTN_GET_PLACE_NUM, 45,
"OMP_4.5");
1759KMP_VERSION_SYMBOL(FTN_GET_PARTITION_NUM_PLACES, 45,
"OMP_4.5");
1760KMP_VERSION_SYMBOL(FTN_GET_PARTITION_PLACE_NUMS, 45,
"OMP_4.5");
1761KMP_VERSION_SYMBOL(FTN_GET_INITIAL_DEVICE, 45,
"OMP_4.5");
1765KMP_VERSION_SYMBOL(FTN_PAUSE_RESOURCE, 50,
"OMP_5.0");
1766KMP_VERSION_SYMBOL(FTN_PAUSE_RESOURCE_ALL, 50,
"OMP_5.0");
1768#if KMP_FTN_ENTRIES == KMP_FTN_APPEND
1769KMP_VERSION_SYMBOL(FTN_CAPTURE_AFFINITY, 50,
"OMP_5.0");
1770KMP_VERSION_SYMBOL(FTN_DISPLAY_AFFINITY, 50,
"OMP_5.0");
1771KMP_VERSION_SYMBOL(FTN_GET_AFFINITY_FORMAT, 50,
"OMP_5.0");
1772KMP_VERSION_SYMBOL(FTN_SET_AFFINITY_FORMAT, 50,
"OMP_5.0");
KMP_EXPORT kmp_int32 __kmpc_bound_num_threads(ident_t *)