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 return __kmp_aux_get_affinity(mask);
245int FTN_STDCALL FTN_GET_AFFINITY_MAX_PROC(
void) {
246#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
250 if (!TCR_4(__kmp_init_middle)) {
251 __kmp_middle_initialize();
253 __kmp_assign_root_init_mask();
254 return __kmp_aux_get_affinity_max_proc();
258void FTN_STDCALL FTN_CREATE_AFFINITY_MASK(
void **mask) {
259#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
263 kmp_affin_mask_t *mask_internals;
264 if (!TCR_4(__kmp_init_middle)) {
265 __kmp_middle_initialize();
267 __kmp_assign_root_init_mask();
268 mask_internals = __kmp_affinity_dispatch->allocate_mask();
269 KMP_CPU_ZERO(mask_internals);
270 *mask = mask_internals;
274void FTN_STDCALL FTN_DESTROY_AFFINITY_MASK(
void **mask) {
275#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
279 kmp_affin_mask_t *mask_internals;
280 if (!TCR_4(__kmp_init_middle)) {
281 __kmp_middle_initialize();
283 __kmp_assign_root_init_mask();
284 if (__kmp_env_consistency_check) {
286 KMP_FATAL(AffinityInvalidMask,
"kmp_destroy_affinity_mask");
289 mask_internals = (kmp_affin_mask_t *)(*mask);
290 __kmp_affinity_dispatch->deallocate_mask(mask_internals);
295int FTN_STDCALL FTN_SET_AFFINITY_MASK_PROC(
int KMP_DEREF proc,
void **mask) {
296#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
299 if (!TCR_4(__kmp_init_middle)) {
300 __kmp_middle_initialize();
302 __kmp_assign_root_init_mask();
303 return __kmp_aux_set_affinity_mask_proc(KMP_DEREF proc, mask);
307int FTN_STDCALL FTN_UNSET_AFFINITY_MASK_PROC(
int KMP_DEREF proc,
void **mask) {
308#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
311 if (!TCR_4(__kmp_init_middle)) {
312 __kmp_middle_initialize();
314 __kmp_assign_root_init_mask();
315 return __kmp_aux_unset_affinity_mask_proc(KMP_DEREF proc, mask);
319int FTN_STDCALL FTN_GET_AFFINITY_MASK_PROC(
int KMP_DEREF proc,
void **mask) {
320#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
323 if (!TCR_4(__kmp_init_middle)) {
324 __kmp_middle_initialize();
326 __kmp_assign_root_init_mask();
327 return __kmp_aux_get_affinity_mask_proc(KMP_DEREF proc, mask);
334void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NUM_THREADS)(
int KMP_DEREF arg) {
338 __kmp_set_num_threads(KMP_DEREF arg, __kmp_entry_gtid());
343int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_THREADS)(void) {
352int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_MAX_THREADS)(void) {
358 if (!TCR_4(__kmp_init_middle)) {
359 __kmp_middle_initialize();
361 __kmp_assign_root_init_mask();
362 gtid = __kmp_entry_gtid();
363 thread = __kmp_threads[gtid];
366 return thread->th.th_current_task->td_icvs.nproc;
370int FTN_STDCALL FTN_CONTROL_TOOL(
int command,
int modifier,
void *arg) {
371#if defined(KMP_STUB) || !OMPT_SUPPORT
374 OMPT_STORE_RETURN_ADDRESS(__kmp_entry_gtid());
375 if (!TCR_4(__kmp_init_middle)) {
378 kmp_info_t *this_thr = __kmp_threads[__kmp_entry_gtid()];
379 ompt_task_info_t *parent_task_info = OMPT_CUR_TASK_INFO(this_thr);
380 parent_task_info->frame.enter_frame.ptr = OMPT_GET_FRAME_ADDRESS(0);
381 int ret = __kmp_control_tool(command, modifier, arg);
382 parent_task_info->frame.enter_frame.ptr = 0;
388omp_allocator_handle_t FTN_STDCALL
389FTN_INIT_ALLOCATOR(omp_memspace_handle_t KMP_DEREF m,
int KMP_DEREF ntraits,
390 omp_alloctrait_t tr[]) {
394 return __kmpc_init_allocator(__kmp_entry_gtid(), KMP_DEREF m,
395 KMP_DEREF ntraits, tr);
399void FTN_STDCALL FTN_DESTROY_ALLOCATOR(omp_allocator_handle_t al) {
401 __kmpc_destroy_allocator(__kmp_entry_gtid(), al);
404void FTN_STDCALL FTN_SET_DEFAULT_ALLOCATOR(omp_allocator_handle_t al) {
406 __kmpc_set_default_allocator(__kmp_entry_gtid(), al);
409omp_allocator_handle_t FTN_STDCALL FTN_GET_DEFAULT_ALLOCATOR(
void) {
413 return __kmpc_get_default_allocator(__kmp_entry_gtid());
419static void __kmp_fortran_strncpy_truncate(
char *buffer,
size_t buf_size,
420 char const *csrc,
size_t csrc_size) {
421 size_t capped_src_size = csrc_size;
422 if (csrc_size >= buf_size) {
423 capped_src_size = buf_size - 1;
425 KMP_STRNCPY_S(buffer, buf_size, csrc, capped_src_size);
426 if (csrc_size >= buf_size) {
427 KMP_DEBUG_ASSERT(buffer[buf_size - 1] ==
'\0');
428 buffer[buf_size - 1] = csrc[buf_size - 1];
430 for (
size_t i = csrc_size; i < buf_size; ++i)
436class ConvertedString {
441 ConvertedString(
char const *fortran_str,
size_t size) {
442 th = __kmp_get_thread();
443 buf = (
char *)__kmp_thread_malloc(th, size + 1);
444 KMP_STRNCPY_S(buf, size + 1, fortran_str, size);
447 ~ConvertedString() { __kmp_thread_free(th, buf); }
448 const char *get()
const {
return buf; }
456void FTN_STDCALL KMP_EXPAND_NAME_IF_APPEND(FTN_SET_AFFINITY_FORMAT)(
457 char const *format,
size_t size) {
461 if (!__kmp_init_serial) {
462 __kmp_serial_initialize();
464 ConvertedString cformat(format, size);
467 __kmp_strncpy_truncate(__kmp_affinity_format, KMP_AFFINITY_FORMAT_SIZE,
468 cformat.get(), KMP_STRLEN(cformat.get()));
478size_t FTN_STDCALL KMP_EXPAND_NAME_IF_APPEND(FTN_GET_AFFINITY_FORMAT)(
479 char *buffer,
size_t size) {
484 if (!__kmp_init_serial) {
485 __kmp_serial_initialize();
487 format_size = KMP_STRLEN(__kmp_affinity_format);
488 if (buffer && size) {
489 __kmp_fortran_strncpy_truncate(buffer, size, __kmp_affinity_format,
501void FTN_STDCALL KMP_EXPAND_NAME_IF_APPEND(FTN_DISPLAY_AFFINITY)(
502 char const *format,
size_t size) {
507 if (!TCR_4(__kmp_init_middle)) {
508 __kmp_middle_initialize();
510 __kmp_assign_root_init_mask();
511 gtid = __kmp_get_gtid();
512 ConvertedString cformat(format, size);
513 __kmp_aux_display_affinity(gtid, cformat.get());
527size_t FTN_STDCALL KMP_EXPAND_NAME_IF_APPEND(FTN_CAPTURE_AFFINITY)(
528 char *buffer,
char const *format,
size_t buf_size,
size_t for_size) {
534 kmp_str_buf_t capture_buf;
535 if (!TCR_4(__kmp_init_middle)) {
536 __kmp_middle_initialize();
538 __kmp_assign_root_init_mask();
539 gtid = __kmp_get_gtid();
540 __kmp_str_buf_init(&capture_buf);
541 ConvertedString cformat(format, for_size);
542 num_required = __kmp_aux_capture_affinity(gtid, cformat.get(), &capture_buf);
543 if (buffer && buf_size) {
544 __kmp_fortran_strncpy_truncate(buffer, buf_size, capture_buf.str,
547 __kmp_str_buf_free(&capture_buf);
552int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_THREAD_NUM)(void) {
558#if KMP_OS_DARWIN || KMP_OS_DRAGONFLY || KMP_OS_FREEBSD || KMP_OS_NETBSD || \
559 KMP_OS_HURD || KMP_OS_OPENBSD
560 gtid = __kmp_entry_gtid();
562 if (!__kmp_init_parallel ||
563 (gtid = (
int)((kmp_intptr_t)TlsGetValue(__kmp_gtid_threadprivate_key))) ==
572 if (__kmp_gtid_mode >= 3) {
573 if ((gtid = __kmp_gtid) == KMP_GTID_DNE) {
578 if (!__kmp_init_parallel ||
579 (gtid = (
int)((kmp_intptr_t)(
580 pthread_getspecific(__kmp_gtid_threadprivate_key)))) == 0) {
588#error Unknown or unsupported OS
591 return __kmp_tid_from_gtid(gtid);
595int FTN_STDCALL FTN_GET_NUM_KNOWN_THREADS(
void) {
599 if (!__kmp_init_serial) {
600 __kmp_serial_initialize();
604 return TCR_4(__kmp_nth);
608int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_PROCS)(void) {
612 if (!TCR_4(__kmp_init_middle)) {
613 __kmp_middle_initialize();
615 __kmp_assign_root_init_mask();
616 return __kmp_avail_proc;
620void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NESTED)(
int KMP_DEREF flag) {
622 __kmps_set_nested(KMP_DEREF flag);
626 thread = __kmp_entry_thread();
627 KMP_INFORM(APIDeprecated,
"omp_set_nested",
"omp_set_max_active_levels");
628 __kmp_save_internal_controls(thread);
630 int max_active_levels = get__max_active_levels(thread);
631 if (max_active_levels == 1)
632 max_active_levels = KMP_MAX_ACTIVE_LEVELS_LIMIT;
633 set__max_active_levels(thread, (KMP_DEREF flag) ? max_active_levels : 1);
637int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NESTED)(void) {
639 return __kmps_get_nested();
642 thread = __kmp_entry_thread();
643 KMP_INFORM(APIDeprecated,
"omp_get_nested",
"omp_get_max_active_levels");
644 return get__max_active_levels(thread) > 1;
648void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_DYNAMIC)(
int KMP_DEREF flag) {
650 __kmps_set_dynamic(KMP_DEREF flag ? TRUE : FALSE);
654 thread = __kmp_entry_thread();
656 __kmp_save_internal_controls(thread);
657 set__dynamic(thread, KMP_DEREF flag ?
true : false);
661int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_DYNAMIC)(void) {
663 return __kmps_get_dynamic();
666 thread = __kmp_entry_thread();
667 return get__dynamic(thread);
671int FTN_STDCALL KMP_EXPAND_NAME(FTN_IN_PARALLEL)(void) {
675 kmp_info_t *th = __kmp_entry_thread();
676 if (th->th.th_teams_microtask) {
681 return (th->th.th_team->t.t_active_level ? 1 : 0);
683 return (th->th.th_root->r.r_in_parallel ? FTN_TRUE : FTN_FALSE);
687void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_SCHEDULE)(kmp_sched_t KMP_DEREF kind,
688 int KMP_DEREF modifier) {
690 __kmps_set_schedule(KMP_DEREF kind, KMP_DEREF modifier);
693 __kmp_set_schedule(__kmp_entry_gtid(), KMP_DEREF kind, KMP_DEREF modifier);
697void FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_SCHEDULE)(kmp_sched_t *kind,
700 __kmps_get_schedule(kind, modifier);
703 __kmp_get_schedule(__kmp_entry_gtid(), kind, modifier);
707void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_MAX_ACTIVE_LEVELS)(
int KMP_DEREF arg) {
712 __kmp_set_max_active_levels(__kmp_entry_gtid(), KMP_DEREF arg);
716int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_MAX_ACTIVE_LEVELS)(void) {
721 if (!TCR_4(__kmp_init_middle)) {
722 __kmp_middle_initialize();
724 return __kmp_get_max_active_levels(__kmp_entry_gtid());
728int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_ACTIVE_LEVEL)(void) {
733 return __kmp_entry_thread()->th.th_team->t.t_active_level;
737int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_LEVEL)(void) {
742 return __kmp_entry_thread()->th.th_team->t.t_level;
747KMP_EXPAND_NAME(FTN_GET_ANCESTOR_THREAD_NUM)(
int KMP_DEREF level) {
749 return (KMP_DEREF level) ? (-1) : (0);
751 return __kmp_get_ancestor_thread_num(__kmp_entry_gtid(), KMP_DEREF level);
755int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_TEAM_SIZE)(
int KMP_DEREF level) {
757 return (KMP_DEREF level) ? (-1) : (1);
759 return __kmp_get_team_size(__kmp_entry_gtid(), KMP_DEREF level);
763int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_THREAD_LIMIT)(void) {
769 if (!__kmp_init_serial) {
770 __kmp_serial_initialize();
773 gtid = __kmp_entry_gtid();
774 thread = __kmp_threads[gtid];
775 return thread->th.th_current_task->td_icvs.thread_limit;
779int FTN_STDCALL KMP_EXPAND_NAME(FTN_IN_FINAL)(void) {
783 if (!TCR_4(__kmp_init_parallel)) {
786 return __kmp_entry_thread()->th.th_current_task->td_flags.final;
790kmp_proc_bind_t FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PROC_BIND)(void) {
792 return __kmps_get_proc_bind();
794 return get__proc_bind(__kmp_entry_thread());
798int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_PLACES)(void) {
799#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
802 if (!TCR_4(__kmp_init_middle)) {
803 __kmp_middle_initialize();
805 __kmp_assign_root_init_mask();
806 if (!KMP_AFFINITY_CAPABLE())
808 return __kmp_affinity_num_masks;
812int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_NUM_PROCS)(
int place_num) {
813#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
818 if (!TCR_4(__kmp_init_middle)) {
819 __kmp_middle_initialize();
821 __kmp_assign_root_init_mask();
822 if (!KMP_AFFINITY_CAPABLE())
824 if (place_num < 0 || place_num >= (
int)__kmp_affinity_num_masks)
826 kmp_affin_mask_t *mask = KMP_CPU_INDEX(__kmp_affinity_masks, place_num);
827 KMP_CPU_SET_ITERATE(i, mask) {
828 if ((!KMP_CPU_ISSET(i, __kmp_affin_fullMask)) ||
829 (!KMP_CPU_ISSET(i, mask))) {
838void FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_PROC_IDS)(
int place_num,
840#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
844 if (!TCR_4(__kmp_init_middle)) {
845 __kmp_middle_initialize();
847 __kmp_assign_root_init_mask();
848 if (!KMP_AFFINITY_CAPABLE())
850 if (place_num < 0 || place_num >= (
int)__kmp_affinity_num_masks)
852 kmp_affin_mask_t *mask = KMP_CPU_INDEX(__kmp_affinity_masks, place_num);
854 KMP_CPU_SET_ITERATE(i, mask) {
855 if ((!KMP_CPU_ISSET(i, __kmp_affin_fullMask)) ||
856 (!KMP_CPU_ISSET(i, mask))) {
864int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_NUM)(void) {
865#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
870 if (!TCR_4(__kmp_init_middle)) {
871 __kmp_middle_initialize();
873 __kmp_assign_root_init_mask();
874 if (!KMP_AFFINITY_CAPABLE())
876 gtid = __kmp_entry_gtid();
877 thread = __kmp_thread_from_gtid(gtid);
878 if (thread->th.th_current_place < 0)
880 return thread->th.th_current_place;
884int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PARTITION_NUM_PLACES)(void) {
885#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
888 int gtid, num_places, first_place, last_place;
890 if (!TCR_4(__kmp_init_middle)) {
891 __kmp_middle_initialize();
893 __kmp_assign_root_init_mask();
894 if (!KMP_AFFINITY_CAPABLE())
896 gtid = __kmp_entry_gtid();
897 thread = __kmp_thread_from_gtid(gtid);
898 first_place = thread->th.th_first_place;
899 last_place = thread->th.th_last_place;
900 if (first_place < 0 || last_place < 0)
902 if (first_place <= last_place)
903 num_places = last_place - first_place + 1;
905 num_places = __kmp_affinity_num_masks - first_place + last_place + 1;
911KMP_EXPAND_NAME(FTN_GET_PARTITION_PLACE_NUMS)(
int *place_nums) {
912#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
915 int i, gtid, place_num, first_place, last_place, start, end;
917 if (!TCR_4(__kmp_init_middle)) {
918 __kmp_middle_initialize();
920 __kmp_assign_root_init_mask();
921 if (!KMP_AFFINITY_CAPABLE())
923 gtid = __kmp_entry_gtid();
924 thread = __kmp_thread_from_gtid(gtid);
925 first_place = thread->th.th_first_place;
926 last_place = thread->th.th_last_place;
927 if (first_place < 0 || last_place < 0)
929 if (first_place <= last_place) {
936 for (i = 0, place_num = start; place_num <= end; ++place_num, ++i) {
937 place_nums[i] = place_num;
942int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_TEAMS)(void) {
946 return __kmp_aux_get_num_teams();
950int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_TEAM_NUM)(void) {
954 return __kmp_aux_get_team_num();
958int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_DEFAULT_DEVICE)(void) {
959#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
962 return __kmp_entry_thread()->th.th_current_task->td_icvs.default_device;
966void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_DEFAULT_DEVICE)(
int KMP_DEREF arg) {
967#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
970 __kmp_entry_thread()->th.th_current_task->td_icvs.default_device =
977int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_DEVICES)(void)
978 KMP_WEAK_ATTRIBUTE_EXTERNAL;
979int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_DEVICES)(void) {
980#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
984 if ((*(
void **)(&fptr) = KMP_DLSYM(
"__tgt_get_num_devices"))) {
986 }
else if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_num_devices"))) {
988 }
else if ((*(
void **)(&fptr) = KMP_DLSYM(
"_Offload_number_of_devices"))) {
998int FTN_STDCALL KMP_EXPAND_NAME(FTN_IS_INITIAL_DEVICE)(void)
999 KMP_WEAK_ATTRIBUTE_EXTERNAL;
1000int FTN_STDCALL KMP_EXPAND_NAME(FTN_IS_INITIAL_DEVICE)(void) {
1005int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_INITIAL_DEVICE)(void)
1006 KMP_WEAK_ATTRIBUTE_EXTERNAL;
1007int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_INITIAL_DEVICE)(void) {
1009 return KMP_EXPAND_NAME(FTN_GET_NUM_DEVICES)();
1012#if defined(KMP_STUB)
1015void *FTN_STDCALL FTN_TARGET_ALLOC(
size_t size,
int device_num) {
return 0; }
1017void FTN_STDCALL FTN_TARGET_FREE(
void *device_ptr,
int device_num) {}
1019int FTN_STDCALL FTN_TARGET_IS_PRESENT(
void *ptr,
int device_num) {
return 0; }
1021int FTN_STDCALL FTN_TARGET_MEMCPY(
void *dst,
void *src,
size_t length,
1022 size_t dst_offset,
size_t src_offset,
1023 int dst_device,
int src_device) {
1027int FTN_STDCALL FTN_TARGET_MEMCPY_RECT(
1028 void *dst,
void *src,
size_t element_size,
int num_dims,
1029 const size_t *volume,
const size_t *dst_offsets,
const size_t *src_offsets,
1030 const size_t *dst_dimensions,
const size_t *src_dimensions,
int dst_device,
1035int FTN_STDCALL FTN_TARGET_ASSOCIATE_PTR(
void *host_ptr,
void *device_ptr,
1036 size_t size,
size_t device_offset,
1041int FTN_STDCALL FTN_TARGET_DISASSOCIATE_PTR(
void *host_ptr,
int device_num) {
1047typedef enum { UNINIT = -1, UNLOCKED, LOCKED } kmp_stub_lock_t;
1050#if KMP_USE_DYNAMIC_LOCK
1051void FTN_STDCALL FTN_INIT_LOCK_WITH_HINT(
void **user_lock,
1052 uintptr_t KMP_DEREF hint) {
1054 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1056 int gtid = __kmp_entry_gtid();
1057#if OMPT_SUPPORT && OMPT_OPTIONAL
1058 OMPT_STORE_RETURN_ADDRESS(gtid);
1060 __kmpc_init_lock_with_hint(NULL, gtid, user_lock, KMP_DEREF hint);
1064void FTN_STDCALL FTN_INIT_NEST_LOCK_WITH_HINT(
void **user_lock,
1065 uintptr_t KMP_DEREF hint) {
1067 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1069 int gtid = __kmp_entry_gtid();
1070#if OMPT_SUPPORT && OMPT_OPTIONAL
1071 OMPT_STORE_RETURN_ADDRESS(gtid);
1073 __kmpc_init_nest_lock_with_hint(NULL, gtid, user_lock, KMP_DEREF hint);
1079void FTN_STDCALL KMP_EXPAND_NAME(FTN_INIT_LOCK)(
void **user_lock) {
1081 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1083 int gtid = __kmp_entry_gtid();
1084#if OMPT_SUPPORT && OMPT_OPTIONAL
1085 OMPT_STORE_RETURN_ADDRESS(gtid);
1087 __kmpc_init_lock(NULL, gtid, user_lock);
1092void FTN_STDCALL KMP_EXPAND_NAME(FTN_INIT_NEST_LOCK)(
void **user_lock) {
1094 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1096 int gtid = __kmp_entry_gtid();
1097#if OMPT_SUPPORT && OMPT_OPTIONAL
1098 OMPT_STORE_RETURN_ADDRESS(gtid);
1100 __kmpc_init_nest_lock(NULL, gtid, user_lock);
1104void FTN_STDCALL KMP_EXPAND_NAME(FTN_DESTROY_LOCK)(
void **user_lock) {
1106 *((kmp_stub_lock_t *)user_lock) = UNINIT;
1108 int gtid = __kmp_entry_gtid();
1109#if OMPT_SUPPORT && OMPT_OPTIONAL
1110 OMPT_STORE_RETURN_ADDRESS(gtid);
1112 __kmpc_destroy_lock(NULL, gtid, user_lock);
1116void FTN_STDCALL KMP_EXPAND_NAME(FTN_DESTROY_NEST_LOCK)(
void **user_lock) {
1118 *((kmp_stub_lock_t *)user_lock) = UNINIT;
1120 int gtid = __kmp_entry_gtid();
1121#if OMPT_SUPPORT && OMPT_OPTIONAL
1122 OMPT_STORE_RETURN_ADDRESS(gtid);
1124 __kmpc_destroy_nest_lock(NULL, gtid, user_lock);
1128void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_LOCK)(
void **user_lock) {
1130 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1133 if (*((kmp_stub_lock_t *)user_lock) != UNLOCKED) {
1136 *((kmp_stub_lock_t *)user_lock) = LOCKED;
1138 int gtid = __kmp_entry_gtid();
1139#if OMPT_SUPPORT && OMPT_OPTIONAL
1140 OMPT_STORE_RETURN_ADDRESS(gtid);
1142 __kmpc_set_lock(NULL, gtid, user_lock);
1146void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NEST_LOCK)(
void **user_lock) {
1148 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1151 (*((
int *)user_lock))++;
1153 int gtid = __kmp_entry_gtid();
1154#if OMPT_SUPPORT && OMPT_OPTIONAL
1155 OMPT_STORE_RETURN_ADDRESS(gtid);
1157 __kmpc_set_nest_lock(NULL, gtid, user_lock);
1161void FTN_STDCALL KMP_EXPAND_NAME(FTN_UNSET_LOCK)(
void **user_lock) {
1163 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1166 if (*((kmp_stub_lock_t *)user_lock) == UNLOCKED) {
1169 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1171 int gtid = __kmp_entry_gtid();
1172#if OMPT_SUPPORT && OMPT_OPTIONAL
1173 OMPT_STORE_RETURN_ADDRESS(gtid);
1175 __kmpc_unset_lock(NULL, gtid, user_lock);
1179void FTN_STDCALL KMP_EXPAND_NAME(FTN_UNSET_NEST_LOCK)(
void **user_lock) {
1181 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1184 if (*((kmp_stub_lock_t *)user_lock) == UNLOCKED) {
1187 (*((
int *)user_lock))--;
1189 int gtid = __kmp_entry_gtid();
1190#if OMPT_SUPPORT && OMPT_OPTIONAL
1191 OMPT_STORE_RETURN_ADDRESS(gtid);
1193 __kmpc_unset_nest_lock(NULL, gtid, user_lock);
1197int FTN_STDCALL KMP_EXPAND_NAME(FTN_TEST_LOCK)(
void **user_lock) {
1199 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1202 if (*((kmp_stub_lock_t *)user_lock) == LOCKED) {
1205 *((kmp_stub_lock_t *)user_lock) = LOCKED;
1208 int gtid = __kmp_entry_gtid();
1209#if OMPT_SUPPORT && OMPT_OPTIONAL
1210 OMPT_STORE_RETURN_ADDRESS(gtid);
1212 return __kmpc_test_lock(NULL, gtid, user_lock);
1216int FTN_STDCALL KMP_EXPAND_NAME(FTN_TEST_NEST_LOCK)(
void **user_lock) {
1218 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1221 return ++(*((
int *)user_lock));
1223 int gtid = __kmp_entry_gtid();
1224#if OMPT_SUPPORT && OMPT_OPTIONAL
1225 OMPT_STORE_RETURN_ADDRESS(gtid);
1227 return __kmpc_test_nest_lock(NULL, gtid, user_lock);
1231double FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_WTIME)(void) {
1233 return __kmps_get_wtime();
1239 if (!__kmp_init_serial) {
1240 __kmp_serial_initialize();
1243 __kmp_elapsed(&data);
1248double FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_WTICK)(void) {
1250 return __kmps_get_wtick();
1253 if (!__kmp_init_serial) {
1254 __kmp_serial_initialize();
1256 __kmp_elapsed_tick(&data);
1263void *FTN_STDCALL FTN_MALLOC(
size_t KMP_DEREF size) {
1265 return kmpc_malloc(KMP_DEREF size);
1268void *FTN_STDCALL FTN_ALIGNED_MALLOC(
size_t KMP_DEREF size,
1269 size_t KMP_DEREF alignment) {
1271 return kmpc_aligned_malloc(KMP_DEREF size, KMP_DEREF alignment);
1274void *FTN_STDCALL FTN_CALLOC(
size_t KMP_DEREF nelem,
size_t KMP_DEREF elsize) {
1276 return kmpc_calloc(KMP_DEREF nelem, KMP_DEREF elsize);
1279void *FTN_STDCALL FTN_REALLOC(
void *KMP_DEREF ptr,
size_t KMP_DEREF size) {
1281 return kmpc_realloc(KMP_DEREF ptr, KMP_DEREF size);
1284void FTN_STDCALL FTN_KFREE(
void *KMP_DEREF ptr) {
1286 kmpc_free(KMP_DEREF ptr);
1289void FTN_STDCALL FTN_SET_WARNINGS_ON(
void) {
1291 __kmp_generate_warnings = kmp_warnings_explicit;
1295void FTN_STDCALL FTN_SET_WARNINGS_OFF(
void) {
1297 __kmp_generate_warnings = FALSE;
1301void FTN_STDCALL FTN_SET_DEFAULTS(
char const *str
1302#ifndef PASS_ARGS_BY_VALUE
1308#ifdef PASS_ARGS_BY_VALUE
1309 int len = (int)KMP_STRLEN(str);
1311 __kmp_aux_set_defaults(str, len);
1318int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_CANCELLATION)(void) {
1323 if (!__kmp_init_serial) {
1324 __kmp_serial_initialize();
1326 return __kmp_omp_cancellation;
1330int FTN_STDCALL FTN_GET_CANCELLATION_STATUS(
int cancel_kind) {
1334 return __kmp_get_cancellation_status(cancel_kind);
1339int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_MAX_TASK_PRIORITY)(void) {
1343 if (!__kmp_init_serial) {
1344 __kmp_serial_initialize();
1346 return __kmp_max_task_priority;
1353int FTN_STDCALL FTN_GET_DEVICE_NUM(
void) KMP_WEAK_ATTRIBUTE_EXTERNAL;
1354int FTN_STDCALL FTN_GET_DEVICE_NUM(
void) {
1355 return KMP_EXPAND_NAME(FTN_GET_INITIAL_DEVICE)();
1359int FTN_STDCALL KMP_EXPAND_NAME(FTN_PAUSE_RESOURCE)(kmp_pause_status_t kind,
1364 if (device_num == KMP_EXPAND_NAME(FTN_GET_INITIAL_DEVICE)())
1365 return __kmpc_pause_resource(kind);
1367 int (*fptr)(kmp_pause_status_t, int);
1368 if ((*(
void **)(&fptr) = KMP_DLSYM(
"tgt_pause_resource")))
1369 return (*fptr)(kind, device_num);
1378 KMP_EXPAND_NAME(FTN_PAUSE_RESOURCE_ALL)(kmp_pause_status_t kind) {
1383 int (*fptr)(kmp_pause_status_t, int);
1384 if ((*(
void **)(&fptr) = KMP_DLSYM(
"tgt_pause_resource")))
1385 fails = (*fptr)(kind, KMP_DEVICE_ALL);
1386 fails += __kmpc_pause_resource(kind);
1392int FTN_STDCALL FTN_GET_SUPPORTED_ACTIVE_LEVELS(
void) {
1396 return KMP_MAX_ACTIVE_LEVELS_LIMIT;
1400void FTN_STDCALL FTN_FULFILL_EVENT(kmp_event_t *event) {
1402 __kmp_fulfill_event(event);
1407void FTN_STDCALL FTN_SET_NUM_TEAMS(
int KMP_DEREF num_teams) {
1411 if (!__kmp_init_serial) {
1412 __kmp_serial_initialize();
1414 __kmp_set_num_teams(KMP_DEREF num_teams);
1417int FTN_STDCALL FTN_GET_MAX_TEAMS(
void) {
1421 if (!__kmp_init_serial) {
1422 __kmp_serial_initialize();
1424 return __kmp_get_max_teams();
1428void FTN_STDCALL FTN_SET_TEAMS_THREAD_LIMIT(
int KMP_DEREF limit) {
1432 if (!__kmp_init_serial) {
1433 __kmp_serial_initialize();
1435 __kmp_set_teams_thread_limit(KMP_DEREF limit);
1438int FTN_STDCALL FTN_GET_TEAMS_THREAD_LIMIT(
void) {
1442 if (!__kmp_init_serial) {
1443 __kmp_serial_initialize();
1445 return __kmp_get_teams_thread_limit();
1451typedef intptr_t omp_intptr_t;
1455typedef enum omp_interop_property {
1457 omp_ipr_fr_name = -2,
1458 omp_ipr_vendor = -3,
1459 omp_ipr_vendor_name = -4,
1460 omp_ipr_device_num = -5,
1461 omp_ipr_platform = -6,
1462 omp_ipr_device = -7,
1463 omp_ipr_device_context = -8,
1464 omp_ipr_targetsync = -9,
1466} omp_interop_property_t;
1468#define omp_interop_none 0
1470typedef enum omp_interop_rc {
1471 omp_irc_no_value = 1,
1472 omp_irc_success = 0,
1474 omp_irc_out_of_range = -2,
1475 omp_irc_type_int = -3,
1476 omp_irc_type_ptr = -4,
1477 omp_irc_type_str = -5,
1481typedef enum omp_interop_fr {
1483 omp_ifr_cuda_driver = 2,
1487 omp_ifr_level_zero = 6,
1491typedef void *omp_interop_t;
1494int FTN_STDCALL FTN_GET_NUM_INTEROP_PROPERTIES(
const omp_interop_t interop) {
1495#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
1498 int (*fptr)(
const omp_interop_t);
1499 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_num_interop_properties")))
1500 return (*fptr)(interop);
1507intptr_t FTN_STDCALL FTN_GET_INTEROP_INT(
const omp_interop_t interop,
1508 omp_interop_property_t property_id,
1510 intptr_t (*fptr)(
const omp_interop_t, omp_interop_property_t,
int *);
1511 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_int")))
1512 return (*fptr)(interop, property_id, err);
1517void *FTN_STDCALL FTN_GET_INTEROP_PTR(
const omp_interop_t interop,
1518 omp_interop_property_t property_id,
1520 void *(*fptr)(
const omp_interop_t, omp_interop_property_t,
int *);
1521 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_ptr")))
1522 return (*fptr)(interop, property_id, err);
1527const char *FTN_STDCALL FTN_GET_INTEROP_STR(
const omp_interop_t interop,
1528 omp_interop_property_t property_id,
1530 const char *(*fptr)(
const omp_interop_t, omp_interop_property_t,
int *);
1531 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_str")))
1532 return (*fptr)(interop, property_id, err);
1537const char *FTN_STDCALL FTN_GET_INTEROP_NAME(
1538 const omp_interop_t interop, omp_interop_property_t property_id) {
1539 const char *(*fptr)(
const omp_interop_t, omp_interop_property_t);
1540 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_name")))
1541 return (*fptr)(interop, property_id);
1546const char *FTN_STDCALL FTN_GET_INTEROP_TYPE_DESC(
1547 const omp_interop_t interop, omp_interop_property_t property_id) {
1548 const char *(*fptr)(
const omp_interop_t, omp_interop_property_t);
1549 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_type_desc")))
1550 return (*fptr)(interop, property_id);
1555const char *FTN_STDCALL FTN_GET_INTEROP_RC_DESC(
1556 const omp_interop_t interop, omp_interop_property_t property_id) {
1557 const char *(*fptr)(
const omp_interop_t, omp_interop_property_t);
1558 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_rec_desc")))
1559 return (*fptr)(interop, property_id);
1564void FTN_STDCALL FTN_DISPLAY_ENV(
int verbose) {
1566 __kmp_omp_display_env(verbose);
1571#ifdef KMP_USE_VERSION_SYMBOLS
1593KMP_VERSION_SYMBOL(FTN_SET_NUM_THREADS, 10,
"OMP_1.0");
1594KMP_VERSION_SYMBOL(FTN_GET_NUM_THREADS, 10,
"OMP_1.0");
1595KMP_VERSION_SYMBOL(FTN_GET_MAX_THREADS, 10,
"OMP_1.0");
1596KMP_VERSION_SYMBOL(FTN_GET_THREAD_NUM, 10,
"OMP_1.0");
1597KMP_VERSION_SYMBOL(FTN_GET_NUM_PROCS, 10,
"OMP_1.0");
1598KMP_VERSION_SYMBOL(FTN_IN_PARALLEL, 10,
"OMP_1.0");
1599KMP_VERSION_SYMBOL(FTN_SET_DYNAMIC, 10,
"OMP_1.0");
1600KMP_VERSION_SYMBOL(FTN_GET_DYNAMIC, 10,
"OMP_1.0");
1601KMP_VERSION_SYMBOL(FTN_SET_NESTED, 10,
"OMP_1.0");
1602KMP_VERSION_SYMBOL(FTN_GET_NESTED, 10,
"OMP_1.0");
1603KMP_VERSION_SYMBOL(FTN_INIT_LOCK, 10,
"OMP_1.0");
1604KMP_VERSION_SYMBOL(FTN_INIT_NEST_LOCK, 10,
"OMP_1.0");
1605KMP_VERSION_SYMBOL(FTN_DESTROY_LOCK, 10,
"OMP_1.0");
1606KMP_VERSION_SYMBOL(FTN_DESTROY_NEST_LOCK, 10,
"OMP_1.0");
1607KMP_VERSION_SYMBOL(FTN_SET_LOCK, 10,
"OMP_1.0");
1608KMP_VERSION_SYMBOL(FTN_SET_NEST_LOCK, 10,
"OMP_1.0");
1609KMP_VERSION_SYMBOL(FTN_UNSET_LOCK, 10,
"OMP_1.0");
1610KMP_VERSION_SYMBOL(FTN_UNSET_NEST_LOCK, 10,
"OMP_1.0");
1611KMP_VERSION_SYMBOL(FTN_TEST_LOCK, 10,
"OMP_1.0");
1612KMP_VERSION_SYMBOL(FTN_TEST_NEST_LOCK, 10,
"OMP_1.0");
1615KMP_VERSION_SYMBOL(FTN_GET_WTICK, 20,
"OMP_2.0");
1616KMP_VERSION_SYMBOL(FTN_GET_WTIME, 20,
"OMP_2.0");
1619KMP_VERSION_SYMBOL(FTN_SET_SCHEDULE, 30,
"OMP_3.0");
1620KMP_VERSION_SYMBOL(FTN_GET_SCHEDULE, 30,
"OMP_3.0");
1621KMP_VERSION_SYMBOL(FTN_GET_THREAD_LIMIT, 30,
"OMP_3.0");
1622KMP_VERSION_SYMBOL(FTN_SET_MAX_ACTIVE_LEVELS, 30,
"OMP_3.0");
1623KMP_VERSION_SYMBOL(FTN_GET_MAX_ACTIVE_LEVELS, 30,
"OMP_3.0");
1624KMP_VERSION_SYMBOL(FTN_GET_ANCESTOR_THREAD_NUM, 30,
"OMP_3.0");
1625KMP_VERSION_SYMBOL(FTN_GET_LEVEL, 30,
"OMP_3.0");
1626KMP_VERSION_SYMBOL(FTN_GET_TEAM_SIZE, 30,
"OMP_3.0");
1627KMP_VERSION_SYMBOL(FTN_GET_ACTIVE_LEVEL, 30,
"OMP_3.0");
1630KMP_VERSION_SYMBOL(FTN_INIT_LOCK, 30,
"OMP_3.0");
1631KMP_VERSION_SYMBOL(FTN_INIT_NEST_LOCK, 30,
"OMP_3.0");
1632KMP_VERSION_SYMBOL(FTN_DESTROY_LOCK, 30,
"OMP_3.0");
1633KMP_VERSION_SYMBOL(FTN_DESTROY_NEST_LOCK, 30,
"OMP_3.0");
1634KMP_VERSION_SYMBOL(FTN_SET_LOCK, 30,
"OMP_3.0");
1635KMP_VERSION_SYMBOL(FTN_SET_NEST_LOCK, 30,
"OMP_3.0");
1636KMP_VERSION_SYMBOL(FTN_UNSET_LOCK, 30,
"OMP_3.0");
1637KMP_VERSION_SYMBOL(FTN_UNSET_NEST_LOCK, 30,
"OMP_3.0");
1638KMP_VERSION_SYMBOL(FTN_TEST_LOCK, 30,
"OMP_3.0");
1639KMP_VERSION_SYMBOL(FTN_TEST_NEST_LOCK, 30,
"OMP_3.0");
1642KMP_VERSION_SYMBOL(FTN_IN_FINAL, 31,
"OMP_3.1");
1645KMP_VERSION_SYMBOL(FTN_GET_PROC_BIND, 40,
"OMP_4.0");
1646KMP_VERSION_SYMBOL(FTN_GET_NUM_TEAMS, 40,
"OMP_4.0");
1647KMP_VERSION_SYMBOL(FTN_GET_TEAM_NUM, 40,
"OMP_4.0");
1648KMP_VERSION_SYMBOL(FTN_GET_CANCELLATION, 40,
"OMP_4.0");
1649KMP_VERSION_SYMBOL(FTN_GET_DEFAULT_DEVICE, 40,
"OMP_4.0");
1650KMP_VERSION_SYMBOL(FTN_SET_DEFAULT_DEVICE, 40,
"OMP_4.0");
1651KMP_VERSION_SYMBOL(FTN_IS_INITIAL_DEVICE, 40,
"OMP_4.0");
1652KMP_VERSION_SYMBOL(FTN_GET_NUM_DEVICES, 40,
"OMP_4.0");
1655KMP_VERSION_SYMBOL(FTN_GET_MAX_TASK_PRIORITY, 45,
"OMP_4.5");
1656KMP_VERSION_SYMBOL(FTN_GET_NUM_PLACES, 45,
"OMP_4.5");
1657KMP_VERSION_SYMBOL(FTN_GET_PLACE_NUM_PROCS, 45,
"OMP_4.5");
1658KMP_VERSION_SYMBOL(FTN_GET_PLACE_PROC_IDS, 45,
"OMP_4.5");
1659KMP_VERSION_SYMBOL(FTN_GET_PLACE_NUM, 45,
"OMP_4.5");
1660KMP_VERSION_SYMBOL(FTN_GET_PARTITION_NUM_PLACES, 45,
"OMP_4.5");
1661KMP_VERSION_SYMBOL(FTN_GET_PARTITION_PLACE_NUMS, 45,
"OMP_4.5");
1662KMP_VERSION_SYMBOL(FTN_GET_INITIAL_DEVICE, 45,
"OMP_4.5");
1666KMP_VERSION_SYMBOL(FTN_PAUSE_RESOURCE, 50,
"OMP_5.0");
1667KMP_VERSION_SYMBOL(FTN_PAUSE_RESOURCE_ALL, 50,
"OMP_5.0");
1669#if KMP_FTN_ENTRIES == KMP_FTN_APPEND
1670KMP_VERSION_SYMBOL(FTN_CAPTURE_AFFINITY, 50,
"OMP_5.0");
1671KMP_VERSION_SYMBOL(FTN_DISPLAY_AFFINITY, 50,
"OMP_5.0");
1672KMP_VERSION_SYMBOL(FTN_GET_AFFINITY_FORMAT, 50,
"OMP_5.0");
1673KMP_VERSION_SYMBOL(FTN_SET_AFFINITY_FORMAT, 50,
"OMP_5.0");
KMP_EXPORT kmp_int32 __kmpc_bound_num_threads(ident_t *)