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 && __kmp_affin_reset) {
243 __kmp_reset_root_init_mask(gtid);
245 return __kmp_aux_get_affinity(mask);
249int FTN_STDCALL FTN_GET_AFFINITY_MAX_PROC(
void) {
250#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
254 if (!TCR_4(__kmp_init_middle)) {
255 __kmp_middle_initialize();
257 __kmp_assign_root_init_mask();
258 return __kmp_aux_get_affinity_max_proc();
262void FTN_STDCALL FTN_CREATE_AFFINITY_MASK(
void **mask) {
263#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
267 kmp_affin_mask_t *mask_internals;
268 if (!TCR_4(__kmp_init_middle)) {
269 __kmp_middle_initialize();
271 __kmp_assign_root_init_mask();
272 mask_internals = __kmp_affinity_dispatch->allocate_mask();
273 KMP_CPU_ZERO(mask_internals);
274 *mask = mask_internals;
278void FTN_STDCALL FTN_DESTROY_AFFINITY_MASK(
void **mask) {
279#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
283 kmp_affin_mask_t *mask_internals;
284 if (!TCR_4(__kmp_init_middle)) {
285 __kmp_middle_initialize();
287 __kmp_assign_root_init_mask();
288 if (__kmp_env_consistency_check) {
290 KMP_FATAL(AffinityInvalidMask,
"kmp_destroy_affinity_mask");
293 mask_internals = (kmp_affin_mask_t *)(*mask);
294 __kmp_affinity_dispatch->deallocate_mask(mask_internals);
299int FTN_STDCALL FTN_SET_AFFINITY_MASK_PROC(
int KMP_DEREF proc,
void **mask) {
300#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
303 if (!TCR_4(__kmp_init_middle)) {
304 __kmp_middle_initialize();
306 __kmp_assign_root_init_mask();
307 return __kmp_aux_set_affinity_mask_proc(KMP_DEREF proc, mask);
311int FTN_STDCALL FTN_UNSET_AFFINITY_MASK_PROC(
int KMP_DEREF proc,
void **mask) {
312#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
315 if (!TCR_4(__kmp_init_middle)) {
316 __kmp_middle_initialize();
318 __kmp_assign_root_init_mask();
319 return __kmp_aux_unset_affinity_mask_proc(KMP_DEREF proc, mask);
323int FTN_STDCALL FTN_GET_AFFINITY_MASK_PROC(
int KMP_DEREF proc,
void **mask) {
324#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
327 if (!TCR_4(__kmp_init_middle)) {
328 __kmp_middle_initialize();
330 __kmp_assign_root_init_mask();
331 return __kmp_aux_get_affinity_mask_proc(KMP_DEREF proc, mask);
338void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NUM_THREADS)(
int KMP_DEREF arg) {
342 __kmp_set_num_threads(KMP_DEREF arg, __kmp_entry_gtid());
347int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_THREADS)(void) {
356int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_MAX_THREADS)(void) {
362 if (!TCR_4(__kmp_init_middle)) {
363 __kmp_middle_initialize();
365 gtid = __kmp_entry_gtid();
366 thread = __kmp_threads[gtid];
367#if KMP_AFFINITY_SUPPORTED
368 if (thread->th.th_team->t.t_level == 0 && !__kmp_affin_reset) {
369 __kmp_assign_root_init_mask();
374 return thread->th.th_current_task->td_icvs.nproc;
378int FTN_STDCALL FTN_CONTROL_TOOL(
int command,
int modifier,
void *arg) {
379#if defined(KMP_STUB) || !OMPT_SUPPORT
382 OMPT_STORE_RETURN_ADDRESS(__kmp_entry_gtid());
383 if (!TCR_4(__kmp_init_middle)) {
386 kmp_info_t *this_thr = __kmp_threads[__kmp_entry_gtid()];
387 ompt_task_info_t *parent_task_info = OMPT_CUR_TASK_INFO(this_thr);
388 parent_task_info->frame.enter_frame.ptr = OMPT_GET_FRAME_ADDRESS(0);
389 int ret = __kmp_control_tool(command, modifier, arg);
390 parent_task_info->frame.enter_frame.ptr = 0;
396omp_allocator_handle_t FTN_STDCALL
397FTN_INIT_ALLOCATOR(omp_memspace_handle_t KMP_DEREF m,
int KMP_DEREF ntraits,
398 omp_alloctrait_t tr[]) {
402 return __kmpc_init_allocator(__kmp_entry_gtid(), KMP_DEREF m,
403 KMP_DEREF ntraits, tr);
407void FTN_STDCALL FTN_DESTROY_ALLOCATOR(omp_allocator_handle_t al) {
409 __kmpc_destroy_allocator(__kmp_entry_gtid(), al);
412void FTN_STDCALL FTN_SET_DEFAULT_ALLOCATOR(omp_allocator_handle_t al) {
414 __kmpc_set_default_allocator(__kmp_entry_gtid(), al);
417omp_allocator_handle_t FTN_STDCALL FTN_GET_DEFAULT_ALLOCATOR(
void) {
421 return __kmpc_get_default_allocator(__kmp_entry_gtid());
427static void __kmp_fortran_strncpy_truncate(
char *buffer,
size_t buf_size,
428 char const *csrc,
size_t csrc_size) {
429 size_t capped_src_size = csrc_size;
430 if (csrc_size >= buf_size) {
431 capped_src_size = buf_size - 1;
433 KMP_STRNCPY_S(buffer, buf_size, csrc, capped_src_size);
434 if (csrc_size >= buf_size) {
435 KMP_DEBUG_ASSERT(buffer[buf_size - 1] ==
'\0');
436 buffer[buf_size - 1] = csrc[buf_size - 1];
438 for (
size_t i = csrc_size; i < buf_size; ++i)
444class ConvertedString {
449 ConvertedString(
char const *fortran_str,
size_t size) {
450 th = __kmp_get_thread();
451 buf = (
char *)__kmp_thread_malloc(th, size + 1);
452 KMP_STRNCPY_S(buf, size + 1, fortran_str, size);
455 ~ConvertedString() { __kmp_thread_free(th, buf); }
456 const char *get()
const {
return buf; }
464void FTN_STDCALL KMP_EXPAND_NAME_IF_APPEND(FTN_SET_AFFINITY_FORMAT)(
465 char const *format,
size_t size) {
469 if (!__kmp_init_serial) {
470 __kmp_serial_initialize();
472 ConvertedString cformat(format, size);
475 __kmp_strncpy_truncate(__kmp_affinity_format, KMP_AFFINITY_FORMAT_SIZE,
476 cformat.get(), KMP_STRLEN(cformat.get()));
486size_t FTN_STDCALL KMP_EXPAND_NAME_IF_APPEND(FTN_GET_AFFINITY_FORMAT)(
487 char *buffer,
size_t size) {
492 if (!__kmp_init_serial) {
493 __kmp_serial_initialize();
495 format_size = KMP_STRLEN(__kmp_affinity_format);
496 if (buffer && size) {
497 __kmp_fortran_strncpy_truncate(buffer, size, __kmp_affinity_format,
509void FTN_STDCALL KMP_EXPAND_NAME_IF_APPEND(FTN_DISPLAY_AFFINITY)(
510 char const *format,
size_t size) {
515 if (!TCR_4(__kmp_init_middle)) {
516 __kmp_middle_initialize();
518 __kmp_assign_root_init_mask();
519 gtid = __kmp_get_gtid();
520#if KMP_AFFINITY_SUPPORTED
521 if (__kmp_threads[gtid]->th.th_team->t.t_level == 0 && __kmp_affin_reset) {
522 __kmp_reset_root_init_mask(gtid);
525 ConvertedString cformat(format, size);
526 __kmp_aux_display_affinity(gtid, cformat.get());
540size_t FTN_STDCALL KMP_EXPAND_NAME_IF_APPEND(FTN_CAPTURE_AFFINITY)(
541 char *buffer,
char const *format,
size_t buf_size,
size_t for_size) {
547 kmp_str_buf_t capture_buf;
548 if (!TCR_4(__kmp_init_middle)) {
549 __kmp_middle_initialize();
551 __kmp_assign_root_init_mask();
552 gtid = __kmp_get_gtid();
553#if KMP_AFFINITY_SUPPORTED
554 if (__kmp_threads[gtid]->th.th_team->t.t_level == 0 && __kmp_affin_reset) {
555 __kmp_reset_root_init_mask(gtid);
558 __kmp_str_buf_init(&capture_buf);
559 ConvertedString cformat(format, for_size);
560 num_required = __kmp_aux_capture_affinity(gtid, cformat.get(), &capture_buf);
561 if (buffer && buf_size) {
562 __kmp_fortran_strncpy_truncate(buffer, buf_size, capture_buf.str,
565 __kmp_str_buf_free(&capture_buf);
570int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_THREAD_NUM)(void) {
576#if KMP_OS_DARWIN || KMP_OS_DRAGONFLY || KMP_OS_FREEBSD || KMP_OS_NETBSD || \
577 KMP_OS_HURD || KMP_OS_OPENBSD
578 gtid = __kmp_entry_gtid();
580 if (!__kmp_init_parallel ||
581 (gtid = (
int)((kmp_intptr_t)TlsGetValue(__kmp_gtid_threadprivate_key))) ==
590 if (__kmp_gtid_mode >= 3) {
591 if ((gtid = __kmp_gtid) == KMP_GTID_DNE) {
596 if (!__kmp_init_parallel ||
597 (gtid = (
int)((kmp_intptr_t)(
598 pthread_getspecific(__kmp_gtid_threadprivate_key)))) == 0) {
606#error Unknown or unsupported OS
609 return __kmp_tid_from_gtid(gtid);
613int FTN_STDCALL FTN_GET_NUM_KNOWN_THREADS(
void) {
617 if (!__kmp_init_serial) {
618 __kmp_serial_initialize();
622 return TCR_4(__kmp_nth);
626int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_PROCS)(void) {
630 if (!TCR_4(__kmp_init_middle)) {
631 __kmp_middle_initialize();
633#if KMP_AFFINITY_SUPPORTED
634 if (!__kmp_affin_reset) {
636 int gtid = __kmp_entry_gtid();
637 kmp_info_t *thread = __kmp_threads[gtid];
638 if (thread->th.th_team->t.t_level == 0) {
639 __kmp_assign_root_init_mask();
643 return __kmp_avail_proc;
647void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NESTED)(
int KMP_DEREF flag) {
649 __kmps_set_nested(KMP_DEREF flag);
653 thread = __kmp_entry_thread();
654 KMP_INFORM(APIDeprecated,
"omp_set_nested",
"omp_set_max_active_levels");
655 __kmp_save_internal_controls(thread);
657 int max_active_levels = get__max_active_levels(thread);
658 if (max_active_levels == 1)
659 max_active_levels = KMP_MAX_ACTIVE_LEVELS_LIMIT;
660 set__max_active_levels(thread, (KMP_DEREF flag) ? max_active_levels : 1);
664int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NESTED)(void) {
666 return __kmps_get_nested();
669 thread = __kmp_entry_thread();
670 KMP_INFORM(APIDeprecated,
"omp_get_nested",
"omp_get_max_active_levels");
671 return get__max_active_levels(thread) > 1;
675void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_DYNAMIC)(
int KMP_DEREF flag) {
677 __kmps_set_dynamic(KMP_DEREF flag ? TRUE : FALSE);
681 thread = __kmp_entry_thread();
683 __kmp_save_internal_controls(thread);
684 set__dynamic(thread, KMP_DEREF flag ?
true : false);
688int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_DYNAMIC)(void) {
690 return __kmps_get_dynamic();
693 thread = __kmp_entry_thread();
694 return get__dynamic(thread);
698int FTN_STDCALL KMP_EXPAND_NAME(FTN_IN_PARALLEL)(void) {
702 kmp_info_t *th = __kmp_entry_thread();
703 if (th->th.th_teams_microtask) {
708 return (th->th.th_team->t.t_active_level ? 1 : 0);
710 return (th->th.th_root->r.r_in_parallel ? FTN_TRUE : FTN_FALSE);
714void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_SCHEDULE)(kmp_sched_t KMP_DEREF kind,
715 int KMP_DEREF modifier) {
717 __kmps_set_schedule(KMP_DEREF kind, KMP_DEREF modifier);
720 __kmp_set_schedule(__kmp_entry_gtid(), KMP_DEREF kind, KMP_DEREF modifier);
724void FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_SCHEDULE)(kmp_sched_t *kind,
727 __kmps_get_schedule(kind, modifier);
730 __kmp_get_schedule(__kmp_entry_gtid(), kind, modifier);
734void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_MAX_ACTIVE_LEVELS)(
int KMP_DEREF arg) {
739 __kmp_set_max_active_levels(__kmp_entry_gtid(), KMP_DEREF arg);
743int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_MAX_ACTIVE_LEVELS)(void) {
748 if (!TCR_4(__kmp_init_middle)) {
749 __kmp_middle_initialize();
751 return __kmp_get_max_active_levels(__kmp_entry_gtid());
755int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_ACTIVE_LEVEL)(void) {
760 return __kmp_entry_thread()->th.th_team->t.t_active_level;
764int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_LEVEL)(void) {
769 return __kmp_entry_thread()->th.th_team->t.t_level;
774KMP_EXPAND_NAME(FTN_GET_ANCESTOR_THREAD_NUM)(
int KMP_DEREF level) {
776 return (KMP_DEREF level) ? (-1) : (0);
778 return __kmp_get_ancestor_thread_num(__kmp_entry_gtid(), KMP_DEREF level);
782int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_TEAM_SIZE)(
int KMP_DEREF level) {
784 return (KMP_DEREF level) ? (-1) : (1);
786 return __kmp_get_team_size(__kmp_entry_gtid(), KMP_DEREF level);
790int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_THREAD_LIMIT)(void) {
796 if (!__kmp_init_serial) {
797 __kmp_serial_initialize();
800 gtid = __kmp_entry_gtid();
801 thread = __kmp_threads[gtid];
802 return thread->th.th_current_task->td_icvs.thread_limit;
806int FTN_STDCALL KMP_EXPAND_NAME(FTN_IN_FINAL)(void) {
810 if (!TCR_4(__kmp_init_parallel)) {
813 return __kmp_entry_thread()->th.th_current_task->td_flags.final;
817kmp_proc_bind_t FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PROC_BIND)(void) {
819 return __kmps_get_proc_bind();
821 return get__proc_bind(__kmp_entry_thread());
825int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_PLACES)(void) {
826#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
829 if (!TCR_4(__kmp_init_middle)) {
830 __kmp_middle_initialize();
832 if (!KMP_AFFINITY_CAPABLE())
834 if (!__kmp_affin_reset) {
836 int gtid = __kmp_entry_gtid();
837 kmp_info_t *thread = __kmp_threads[gtid];
838 if (thread->th.th_team->t.t_level == 0) {
839 __kmp_assign_root_init_mask();
842 return __kmp_affinity_num_masks;
846int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_NUM_PROCS)(
int place_num) {
847#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
852 if (!TCR_4(__kmp_init_middle)) {
853 __kmp_middle_initialize();
855 if (!KMP_AFFINITY_CAPABLE())
857 if (!__kmp_affin_reset) {
859 int gtid = __kmp_entry_gtid();
860 kmp_info_t *thread = __kmp_threads[gtid];
861 if (thread->th.th_team->t.t_level == 0) {
862 __kmp_assign_root_init_mask();
865 if (place_num < 0 || place_num >= (
int)__kmp_affinity_num_masks)
867 kmp_affin_mask_t *mask = KMP_CPU_INDEX(__kmp_affinity_masks, place_num);
868 KMP_CPU_SET_ITERATE(i, mask) {
869 if ((!KMP_CPU_ISSET(i, __kmp_affin_fullMask)) ||
870 (!KMP_CPU_ISSET(i, mask))) {
879void FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_PROC_IDS)(
int place_num,
881#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
885 if (!TCR_4(__kmp_init_middle)) {
886 __kmp_middle_initialize();
888 if (!KMP_AFFINITY_CAPABLE())
890 if (!__kmp_affin_reset) {
892 int gtid = __kmp_entry_gtid();
893 kmp_info_t *thread = __kmp_threads[gtid];
894 if (thread->th.th_team->t.t_level == 0) {
895 __kmp_assign_root_init_mask();
898 if (place_num < 0 || place_num >= (
int)__kmp_affinity_num_masks)
900 kmp_affin_mask_t *mask = KMP_CPU_INDEX(__kmp_affinity_masks, place_num);
902 KMP_CPU_SET_ITERATE(i, mask) {
903 if ((!KMP_CPU_ISSET(i, __kmp_affin_fullMask)) ||
904 (!KMP_CPU_ISSET(i, mask))) {
912int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_NUM)(void) {
913#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
918 if (!TCR_4(__kmp_init_middle)) {
919 __kmp_middle_initialize();
921 if (!KMP_AFFINITY_CAPABLE())
923 gtid = __kmp_entry_gtid();
924 thread = __kmp_thread_from_gtid(gtid);
925 if (thread->th.th_team->t.t_level == 0 && !__kmp_affin_reset) {
926 __kmp_assign_root_init_mask();
928 if (thread->th.th_current_place < 0)
930 return thread->th.th_current_place;
934int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PARTITION_NUM_PLACES)(void) {
935#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
938 int gtid, num_places, first_place, last_place;
940 if (!TCR_4(__kmp_init_middle)) {
941 __kmp_middle_initialize();
943 if (!KMP_AFFINITY_CAPABLE())
945 gtid = __kmp_entry_gtid();
946 thread = __kmp_thread_from_gtid(gtid);
947 if (thread->th.th_team->t.t_level == 0 && !__kmp_affin_reset) {
948 __kmp_assign_root_init_mask();
950 first_place = thread->th.th_first_place;
951 last_place = thread->th.th_last_place;
952 if (first_place < 0 || last_place < 0)
954 if (first_place <= last_place)
955 num_places = last_place - first_place + 1;
957 num_places = __kmp_affinity_num_masks - first_place + last_place + 1;
963KMP_EXPAND_NAME(FTN_GET_PARTITION_PLACE_NUMS)(
int *place_nums) {
964#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
967 int i, gtid, place_num, first_place, last_place, start, end;
969 if (!TCR_4(__kmp_init_middle)) {
970 __kmp_middle_initialize();
972 if (!KMP_AFFINITY_CAPABLE())
974 gtid = __kmp_entry_gtid();
975 thread = __kmp_thread_from_gtid(gtid);
976 if (thread->th.th_team->t.t_level == 0 && !__kmp_affin_reset) {
977 __kmp_assign_root_init_mask();
979 first_place = thread->th.th_first_place;
980 last_place = thread->th.th_last_place;
981 if (first_place < 0 || last_place < 0)
983 if (first_place <= last_place) {
990 for (i = 0, place_num = start; place_num <= end; ++place_num, ++i) {
991 place_nums[i] = place_num;
996int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_TEAMS)(void) {
1000 return __kmp_aux_get_num_teams();
1004int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_TEAM_NUM)(void) {
1008 return __kmp_aux_get_team_num();
1012int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_DEFAULT_DEVICE)(void) {
1013#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
1016 return __kmp_entry_thread()->th.th_current_task->td_icvs.default_device;
1020void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_DEFAULT_DEVICE)(
int KMP_DEREF arg) {
1021#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
1024 __kmp_entry_thread()->th.th_current_task->td_icvs.default_device =
1031int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_DEVICES)(void)
1032 KMP_WEAK_ATTRIBUTE_EXTERNAL;
1033int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_DEVICES)(void) {
1034#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
1038 if ((*(
void **)(&fptr) = KMP_DLSYM(
"__tgt_get_num_devices"))) {
1040 }
else if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_num_devices"))) {
1042 }
else if ((*(
void **)(&fptr) = KMP_DLSYM(
"_Offload_number_of_devices"))) {
1052int FTN_STDCALL KMP_EXPAND_NAME(FTN_IS_INITIAL_DEVICE)(void)
1053 KMP_WEAK_ATTRIBUTE_EXTERNAL;
1054int FTN_STDCALL KMP_EXPAND_NAME(FTN_IS_INITIAL_DEVICE)(void) {
1059int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_INITIAL_DEVICE)(void)
1060 KMP_WEAK_ATTRIBUTE_EXTERNAL;
1061int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_INITIAL_DEVICE)(void) {
1063 return KMP_EXPAND_NAME(FTN_GET_NUM_DEVICES)();
1066#if defined(KMP_STUB)
1069void *FTN_STDCALL FTN_TARGET_ALLOC(
size_t size,
int device_num) {
return 0; }
1071void FTN_STDCALL FTN_TARGET_FREE(
void *device_ptr,
int device_num) {}
1073int FTN_STDCALL FTN_TARGET_IS_PRESENT(
void *ptr,
int device_num) {
return 0; }
1075int FTN_STDCALL FTN_TARGET_MEMCPY(
void *dst,
void *src,
size_t length,
1076 size_t dst_offset,
size_t src_offset,
1077 int dst_device,
int src_device) {
1081int FTN_STDCALL FTN_TARGET_MEMCPY_RECT(
1082 void *dst,
void *src,
size_t element_size,
int num_dims,
1083 const size_t *volume,
const size_t *dst_offsets,
const size_t *src_offsets,
1084 const size_t *dst_dimensions,
const size_t *src_dimensions,
int dst_device,
1089int FTN_STDCALL FTN_TARGET_ASSOCIATE_PTR(
void *host_ptr,
void *device_ptr,
1090 size_t size,
size_t device_offset,
1095int FTN_STDCALL FTN_TARGET_DISASSOCIATE_PTR(
void *host_ptr,
int device_num) {
1101typedef enum { UNINIT = -1, UNLOCKED, LOCKED } kmp_stub_lock_t;
1104#if KMP_USE_DYNAMIC_LOCK
1105void FTN_STDCALL FTN_INIT_LOCK_WITH_HINT(
void **user_lock,
1106 uintptr_t KMP_DEREF hint) {
1108 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1110 int gtid = __kmp_entry_gtid();
1111#if OMPT_SUPPORT && OMPT_OPTIONAL
1112 OMPT_STORE_RETURN_ADDRESS(gtid);
1114 __kmpc_init_lock_with_hint(NULL, gtid, user_lock, KMP_DEREF hint);
1118void FTN_STDCALL FTN_INIT_NEST_LOCK_WITH_HINT(
void **user_lock,
1119 uintptr_t KMP_DEREF hint) {
1121 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1123 int gtid = __kmp_entry_gtid();
1124#if OMPT_SUPPORT && OMPT_OPTIONAL
1125 OMPT_STORE_RETURN_ADDRESS(gtid);
1127 __kmpc_init_nest_lock_with_hint(NULL, gtid, user_lock, KMP_DEREF hint);
1133void FTN_STDCALL KMP_EXPAND_NAME(FTN_INIT_LOCK)(
void **user_lock) {
1135 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1137 int gtid = __kmp_entry_gtid();
1138#if OMPT_SUPPORT && OMPT_OPTIONAL
1139 OMPT_STORE_RETURN_ADDRESS(gtid);
1141 __kmpc_init_lock(NULL, gtid, user_lock);
1146void FTN_STDCALL KMP_EXPAND_NAME(FTN_INIT_NEST_LOCK)(
void **user_lock) {
1148 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1150 int gtid = __kmp_entry_gtid();
1151#if OMPT_SUPPORT && OMPT_OPTIONAL
1152 OMPT_STORE_RETURN_ADDRESS(gtid);
1154 __kmpc_init_nest_lock(NULL, gtid, user_lock);
1158void FTN_STDCALL KMP_EXPAND_NAME(FTN_DESTROY_LOCK)(
void **user_lock) {
1160 *((kmp_stub_lock_t *)user_lock) = UNINIT;
1162 int gtid = __kmp_entry_gtid();
1163#if OMPT_SUPPORT && OMPT_OPTIONAL
1164 OMPT_STORE_RETURN_ADDRESS(gtid);
1166 __kmpc_destroy_lock(NULL, gtid, user_lock);
1170void FTN_STDCALL KMP_EXPAND_NAME(FTN_DESTROY_NEST_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_nest_lock(NULL, gtid, user_lock);
1182void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_LOCK)(
void **user_lock) {
1184 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1187 if (*((kmp_stub_lock_t *)user_lock) != UNLOCKED) {
1190 *((kmp_stub_lock_t *)user_lock) = LOCKED;
1192 int gtid = __kmp_entry_gtid();
1193#if OMPT_SUPPORT && OMPT_OPTIONAL
1194 OMPT_STORE_RETURN_ADDRESS(gtid);
1196 __kmpc_set_lock(NULL, gtid, user_lock);
1200void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NEST_LOCK)(
void **user_lock) {
1202 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1205 (*((
int *)user_lock))++;
1207 int gtid = __kmp_entry_gtid();
1208#if OMPT_SUPPORT && OMPT_OPTIONAL
1209 OMPT_STORE_RETURN_ADDRESS(gtid);
1211 __kmpc_set_nest_lock(NULL, gtid, user_lock);
1215void FTN_STDCALL KMP_EXPAND_NAME(FTN_UNSET_LOCK)(
void **user_lock) {
1217 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1220 if (*((kmp_stub_lock_t *)user_lock) == UNLOCKED) {
1223 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1225 int gtid = __kmp_entry_gtid();
1226#if OMPT_SUPPORT && OMPT_OPTIONAL
1227 OMPT_STORE_RETURN_ADDRESS(gtid);
1229 __kmpc_unset_lock(NULL, gtid, user_lock);
1233void FTN_STDCALL KMP_EXPAND_NAME(FTN_UNSET_NEST_LOCK)(
void **user_lock) {
1235 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1238 if (*((kmp_stub_lock_t *)user_lock) == UNLOCKED) {
1241 (*((
int *)user_lock))--;
1243 int gtid = __kmp_entry_gtid();
1244#if OMPT_SUPPORT && OMPT_OPTIONAL
1245 OMPT_STORE_RETURN_ADDRESS(gtid);
1247 __kmpc_unset_nest_lock(NULL, gtid, user_lock);
1251int FTN_STDCALL KMP_EXPAND_NAME(FTN_TEST_LOCK)(
void **user_lock) {
1253 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1256 if (*((kmp_stub_lock_t *)user_lock) == LOCKED) {
1259 *((kmp_stub_lock_t *)user_lock) = LOCKED;
1262 int gtid = __kmp_entry_gtid();
1263#if OMPT_SUPPORT && OMPT_OPTIONAL
1264 OMPT_STORE_RETURN_ADDRESS(gtid);
1266 return __kmpc_test_lock(NULL, gtid, user_lock);
1270int FTN_STDCALL KMP_EXPAND_NAME(FTN_TEST_NEST_LOCK)(
void **user_lock) {
1272 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1275 return ++(*((
int *)user_lock));
1277 int gtid = __kmp_entry_gtid();
1278#if OMPT_SUPPORT && OMPT_OPTIONAL
1279 OMPT_STORE_RETURN_ADDRESS(gtid);
1281 return __kmpc_test_nest_lock(NULL, gtid, user_lock);
1285double FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_WTIME)(void) {
1287 return __kmps_get_wtime();
1293 if (!__kmp_init_serial) {
1294 __kmp_serial_initialize();
1297 __kmp_elapsed(&data);
1302double FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_WTICK)(void) {
1304 return __kmps_get_wtick();
1307 if (!__kmp_init_serial) {
1308 __kmp_serial_initialize();
1310 __kmp_elapsed_tick(&data);
1317void *FTN_STDCALL FTN_MALLOC(
size_t KMP_DEREF size) {
1319 return kmpc_malloc(KMP_DEREF size);
1322void *FTN_STDCALL FTN_ALIGNED_MALLOC(
size_t KMP_DEREF size,
1323 size_t KMP_DEREF alignment) {
1325 return kmpc_aligned_malloc(KMP_DEREF size, KMP_DEREF alignment);
1328void *FTN_STDCALL FTN_CALLOC(
size_t KMP_DEREF nelem,
size_t KMP_DEREF elsize) {
1330 return kmpc_calloc(KMP_DEREF nelem, KMP_DEREF elsize);
1333void *FTN_STDCALL FTN_REALLOC(
void *KMP_DEREF ptr,
size_t KMP_DEREF size) {
1335 return kmpc_realloc(KMP_DEREF ptr, KMP_DEREF size);
1338void FTN_STDCALL FTN_KFREE(
void *KMP_DEREF ptr) {
1340 kmpc_free(KMP_DEREF ptr);
1343void FTN_STDCALL FTN_SET_WARNINGS_ON(
void) {
1345 __kmp_generate_warnings = kmp_warnings_explicit;
1349void FTN_STDCALL FTN_SET_WARNINGS_OFF(
void) {
1351 __kmp_generate_warnings = FALSE;
1355void FTN_STDCALL FTN_SET_DEFAULTS(
char const *str
1356#ifndef PASS_ARGS_BY_VALUE
1362#ifdef PASS_ARGS_BY_VALUE
1363 int len = (int)KMP_STRLEN(str);
1365 __kmp_aux_set_defaults(str, len);
1372int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_CANCELLATION)(void) {
1377 if (!__kmp_init_serial) {
1378 __kmp_serial_initialize();
1380 return __kmp_omp_cancellation;
1384int FTN_STDCALL FTN_GET_CANCELLATION_STATUS(
int cancel_kind) {
1388 return __kmp_get_cancellation_status(cancel_kind);
1393int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_MAX_TASK_PRIORITY)(void) {
1397 if (!__kmp_init_serial) {
1398 __kmp_serial_initialize();
1400 return __kmp_max_task_priority;
1407int FTN_STDCALL FTN_GET_DEVICE_NUM(
void) KMP_WEAK_ATTRIBUTE_EXTERNAL;
1408int FTN_STDCALL FTN_GET_DEVICE_NUM(
void) {
1409 return KMP_EXPAND_NAME(FTN_GET_INITIAL_DEVICE)();
1413int FTN_STDCALL KMP_EXPAND_NAME(FTN_PAUSE_RESOURCE)(kmp_pause_status_t kind,
1418 if (device_num == KMP_EXPAND_NAME(FTN_GET_INITIAL_DEVICE)())
1419 return __kmpc_pause_resource(kind);
1421 int (*fptr)(kmp_pause_status_t, int);
1422 if ((*(
void **)(&fptr) = KMP_DLSYM(
"tgt_pause_resource")))
1423 return (*fptr)(kind, device_num);
1432 KMP_EXPAND_NAME(FTN_PAUSE_RESOURCE_ALL)(kmp_pause_status_t kind) {
1437 int (*fptr)(kmp_pause_status_t, int);
1438 if ((*(
void **)(&fptr) = KMP_DLSYM(
"tgt_pause_resource")))
1439 fails = (*fptr)(kind, KMP_DEVICE_ALL);
1440 fails += __kmpc_pause_resource(kind);
1446int FTN_STDCALL FTN_GET_SUPPORTED_ACTIVE_LEVELS(
void) {
1450 return KMP_MAX_ACTIVE_LEVELS_LIMIT;
1454void FTN_STDCALL FTN_FULFILL_EVENT(kmp_event_t *event) {
1456 __kmp_fulfill_event(event);
1461void FTN_STDCALL FTN_SET_NUM_TEAMS(
int KMP_DEREF num_teams) {
1465 if (!__kmp_init_serial) {
1466 __kmp_serial_initialize();
1468 __kmp_set_num_teams(KMP_DEREF num_teams);
1471int FTN_STDCALL FTN_GET_MAX_TEAMS(
void) {
1475 if (!__kmp_init_serial) {
1476 __kmp_serial_initialize();
1478 return __kmp_get_max_teams();
1482void FTN_STDCALL FTN_SET_TEAMS_THREAD_LIMIT(
int KMP_DEREF limit) {
1486 if (!__kmp_init_serial) {
1487 __kmp_serial_initialize();
1489 __kmp_set_teams_thread_limit(KMP_DEREF limit);
1492int FTN_STDCALL FTN_GET_TEAMS_THREAD_LIMIT(
void) {
1496 if (!__kmp_init_serial) {
1497 __kmp_serial_initialize();
1499 return __kmp_get_teams_thread_limit();
1505typedef intptr_t omp_intptr_t;
1509typedef enum omp_interop_property {
1511 omp_ipr_fr_name = -2,
1512 omp_ipr_vendor = -3,
1513 omp_ipr_vendor_name = -4,
1514 omp_ipr_device_num = -5,
1515 omp_ipr_platform = -6,
1516 omp_ipr_device = -7,
1517 omp_ipr_device_context = -8,
1518 omp_ipr_targetsync = -9,
1520} omp_interop_property_t;
1522#define omp_interop_none 0
1524typedef enum omp_interop_rc {
1525 omp_irc_no_value = 1,
1526 omp_irc_success = 0,
1528 omp_irc_out_of_range = -2,
1529 omp_irc_type_int = -3,
1530 omp_irc_type_ptr = -4,
1531 omp_irc_type_str = -5,
1535typedef enum omp_interop_fr {
1537 omp_ifr_cuda_driver = 2,
1541 omp_ifr_level_zero = 6,
1545typedef void *omp_interop_t;
1548int FTN_STDCALL FTN_GET_NUM_INTEROP_PROPERTIES(
const omp_interop_t interop) {
1549#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
1552 int (*fptr)(
const omp_interop_t);
1553 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_num_interop_properties")))
1554 return (*fptr)(interop);
1561intptr_t FTN_STDCALL FTN_GET_INTEROP_INT(
const omp_interop_t interop,
1562 omp_interop_property_t property_id,
1564 intptr_t (*fptr)(
const omp_interop_t, omp_interop_property_t,
int *);
1565 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_int")))
1566 return (*fptr)(interop, property_id, err);
1571void *FTN_STDCALL FTN_GET_INTEROP_PTR(
const omp_interop_t interop,
1572 omp_interop_property_t property_id,
1574 void *(*fptr)(
const omp_interop_t, omp_interop_property_t,
int *);
1575 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_ptr")))
1576 return (*fptr)(interop, property_id, err);
1581const char *FTN_STDCALL FTN_GET_INTEROP_STR(
const omp_interop_t interop,
1582 omp_interop_property_t property_id,
1584 const char *(*fptr)(
const omp_interop_t, omp_interop_property_t,
int *);
1585 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_str")))
1586 return (*fptr)(interop, property_id, err);
1591const char *FTN_STDCALL FTN_GET_INTEROP_NAME(
1592 const omp_interop_t interop, omp_interop_property_t property_id) {
1593 const char *(*fptr)(
const omp_interop_t, omp_interop_property_t);
1594 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_name")))
1595 return (*fptr)(interop, property_id);
1600const char *FTN_STDCALL FTN_GET_INTEROP_TYPE_DESC(
1601 const omp_interop_t interop, omp_interop_property_t property_id) {
1602 const char *(*fptr)(
const omp_interop_t, omp_interop_property_t);
1603 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_type_desc")))
1604 return (*fptr)(interop, property_id);
1609const char *FTN_STDCALL FTN_GET_INTEROP_RC_DESC(
1610 const omp_interop_t interop, omp_interop_property_t property_id) {
1611 const char *(*fptr)(
const omp_interop_t, omp_interop_property_t);
1612 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_rec_desc")))
1613 return (*fptr)(interop, property_id);
1618void FTN_STDCALL FTN_DISPLAY_ENV(
int verbose) {
1620 __kmp_omp_display_env(verbose);
1624int FTN_STDCALL FTN_IN_EXPLICIT_TASK(
void) {
1628 int gtid = __kmp_entry_gtid();
1629 return __kmp_thread_from_gtid(gtid)->th.th_current_task->td_flags.tasktype;
1634#ifdef KMP_USE_VERSION_SYMBOLS
1656KMP_VERSION_SYMBOL(FTN_SET_NUM_THREADS, 10,
"OMP_1.0");
1657KMP_VERSION_SYMBOL(FTN_GET_NUM_THREADS, 10,
"OMP_1.0");
1658KMP_VERSION_SYMBOL(FTN_GET_MAX_THREADS, 10,
"OMP_1.0");
1659KMP_VERSION_SYMBOL(FTN_GET_THREAD_NUM, 10,
"OMP_1.0");
1660KMP_VERSION_SYMBOL(FTN_GET_NUM_PROCS, 10,
"OMP_1.0");
1661KMP_VERSION_SYMBOL(FTN_IN_PARALLEL, 10,
"OMP_1.0");
1662KMP_VERSION_SYMBOL(FTN_SET_DYNAMIC, 10,
"OMP_1.0");
1663KMP_VERSION_SYMBOL(FTN_GET_DYNAMIC, 10,
"OMP_1.0");
1664KMP_VERSION_SYMBOL(FTN_SET_NESTED, 10,
"OMP_1.0");
1665KMP_VERSION_SYMBOL(FTN_GET_NESTED, 10,
"OMP_1.0");
1666KMP_VERSION_SYMBOL(FTN_INIT_LOCK, 10,
"OMP_1.0");
1667KMP_VERSION_SYMBOL(FTN_INIT_NEST_LOCK, 10,
"OMP_1.0");
1668KMP_VERSION_SYMBOL(FTN_DESTROY_LOCK, 10,
"OMP_1.0");
1669KMP_VERSION_SYMBOL(FTN_DESTROY_NEST_LOCK, 10,
"OMP_1.0");
1670KMP_VERSION_SYMBOL(FTN_SET_LOCK, 10,
"OMP_1.0");
1671KMP_VERSION_SYMBOL(FTN_SET_NEST_LOCK, 10,
"OMP_1.0");
1672KMP_VERSION_SYMBOL(FTN_UNSET_LOCK, 10,
"OMP_1.0");
1673KMP_VERSION_SYMBOL(FTN_UNSET_NEST_LOCK, 10,
"OMP_1.0");
1674KMP_VERSION_SYMBOL(FTN_TEST_LOCK, 10,
"OMP_1.0");
1675KMP_VERSION_SYMBOL(FTN_TEST_NEST_LOCK, 10,
"OMP_1.0");
1678KMP_VERSION_SYMBOL(FTN_GET_WTICK, 20,
"OMP_2.0");
1679KMP_VERSION_SYMBOL(FTN_GET_WTIME, 20,
"OMP_2.0");
1682KMP_VERSION_SYMBOL(FTN_SET_SCHEDULE, 30,
"OMP_3.0");
1683KMP_VERSION_SYMBOL(FTN_GET_SCHEDULE, 30,
"OMP_3.0");
1684KMP_VERSION_SYMBOL(FTN_GET_THREAD_LIMIT, 30,
"OMP_3.0");
1685KMP_VERSION_SYMBOL(FTN_SET_MAX_ACTIVE_LEVELS, 30,
"OMP_3.0");
1686KMP_VERSION_SYMBOL(FTN_GET_MAX_ACTIVE_LEVELS, 30,
"OMP_3.0");
1687KMP_VERSION_SYMBOL(FTN_GET_ANCESTOR_THREAD_NUM, 30,
"OMP_3.0");
1688KMP_VERSION_SYMBOL(FTN_GET_LEVEL, 30,
"OMP_3.0");
1689KMP_VERSION_SYMBOL(FTN_GET_TEAM_SIZE, 30,
"OMP_3.0");
1690KMP_VERSION_SYMBOL(FTN_GET_ACTIVE_LEVEL, 30,
"OMP_3.0");
1693KMP_VERSION_SYMBOL(FTN_INIT_LOCK, 30,
"OMP_3.0");
1694KMP_VERSION_SYMBOL(FTN_INIT_NEST_LOCK, 30,
"OMP_3.0");
1695KMP_VERSION_SYMBOL(FTN_DESTROY_LOCK, 30,
"OMP_3.0");
1696KMP_VERSION_SYMBOL(FTN_DESTROY_NEST_LOCK, 30,
"OMP_3.0");
1697KMP_VERSION_SYMBOL(FTN_SET_LOCK, 30,
"OMP_3.0");
1698KMP_VERSION_SYMBOL(FTN_SET_NEST_LOCK, 30,
"OMP_3.0");
1699KMP_VERSION_SYMBOL(FTN_UNSET_LOCK, 30,
"OMP_3.0");
1700KMP_VERSION_SYMBOL(FTN_UNSET_NEST_LOCK, 30,
"OMP_3.0");
1701KMP_VERSION_SYMBOL(FTN_TEST_LOCK, 30,
"OMP_3.0");
1702KMP_VERSION_SYMBOL(FTN_TEST_NEST_LOCK, 30,
"OMP_3.0");
1705KMP_VERSION_SYMBOL(FTN_IN_FINAL, 31,
"OMP_3.1");
1708KMP_VERSION_SYMBOL(FTN_GET_PROC_BIND, 40,
"OMP_4.0");
1709KMP_VERSION_SYMBOL(FTN_GET_NUM_TEAMS, 40,
"OMP_4.0");
1710KMP_VERSION_SYMBOL(FTN_GET_TEAM_NUM, 40,
"OMP_4.0");
1711KMP_VERSION_SYMBOL(FTN_GET_CANCELLATION, 40,
"OMP_4.0");
1712KMP_VERSION_SYMBOL(FTN_GET_DEFAULT_DEVICE, 40,
"OMP_4.0");
1713KMP_VERSION_SYMBOL(FTN_SET_DEFAULT_DEVICE, 40,
"OMP_4.0");
1714KMP_VERSION_SYMBOL(FTN_IS_INITIAL_DEVICE, 40,
"OMP_4.0");
1715KMP_VERSION_SYMBOL(FTN_GET_NUM_DEVICES, 40,
"OMP_4.0");
1718KMP_VERSION_SYMBOL(FTN_GET_MAX_TASK_PRIORITY, 45,
"OMP_4.5");
1719KMP_VERSION_SYMBOL(FTN_GET_NUM_PLACES, 45,
"OMP_4.5");
1720KMP_VERSION_SYMBOL(FTN_GET_PLACE_NUM_PROCS, 45,
"OMP_4.5");
1721KMP_VERSION_SYMBOL(FTN_GET_PLACE_PROC_IDS, 45,
"OMP_4.5");
1722KMP_VERSION_SYMBOL(FTN_GET_PLACE_NUM, 45,
"OMP_4.5");
1723KMP_VERSION_SYMBOL(FTN_GET_PARTITION_NUM_PLACES, 45,
"OMP_4.5");
1724KMP_VERSION_SYMBOL(FTN_GET_PARTITION_PLACE_NUMS, 45,
"OMP_4.5");
1725KMP_VERSION_SYMBOL(FTN_GET_INITIAL_DEVICE, 45,
"OMP_4.5");
1729KMP_VERSION_SYMBOL(FTN_PAUSE_RESOURCE, 50,
"OMP_5.0");
1730KMP_VERSION_SYMBOL(FTN_PAUSE_RESOURCE_ALL, 50,
"OMP_5.0");
1732#if KMP_FTN_ENTRIES == KMP_FTN_APPEND
1733KMP_VERSION_SYMBOL(FTN_CAPTURE_AFFINITY, 50,
"OMP_5.0");
1734KMP_VERSION_SYMBOL(FTN_DISPLAY_AFFINITY, 50,
"OMP_5.0");
1735KMP_VERSION_SYMBOL(FTN_GET_AFFINITY_FORMAT, 50,
"OMP_5.0");
1736KMP_VERSION_SYMBOL(FTN_SET_AFFINITY_FORMAT, 50,
"OMP_5.0");
KMP_EXPORT kmp_int32 __kmpc_bound_num_threads(ident_t *)