14 #error The support file kmp_ftn_entry.h should not be compiled by itself.
30 #include "ompt-specific.h"
45 #ifdef KMP_GOMP_COMPAT
46 #if (KMP_FTN_ENTRIES == KMP_FTN_PLAIN) || (KMP_FTN_ENTRIES == KMP_FTN_UPPER)
47 #define PASS_ARGS_BY_VALUE 1
51 #if (KMP_FTN_ENTRIES == KMP_FTN_PLAIN) || (KMP_FTN_ENTRIES == KMP_FTN_APPEND)
52 #define PASS_ARGS_BY_VALUE 1
57 #ifdef PASS_ARGS_BY_VALUE
63 void FTN_STDCALL FTN_SET_STACKSIZE(
int KMP_DEREF arg) {
65 __kmps_set_stacksize(KMP_DEREF arg);
68 __kmp_aux_set_stacksize((
size_t)KMP_DEREF arg);
72 void FTN_STDCALL FTN_SET_STACKSIZE_S(
size_t KMP_DEREF arg) {
74 __kmps_set_stacksize(KMP_DEREF arg);
77 __kmp_aux_set_stacksize(KMP_DEREF arg);
81 int FTN_STDCALL FTN_GET_STACKSIZE(
void) {
83 return __kmps_get_stacksize();
85 if (!__kmp_init_serial) {
86 __kmp_serial_initialize();
88 return (
int)__kmp_stksize;
92 size_t FTN_STDCALL FTN_GET_STACKSIZE_S(
void) {
94 return __kmps_get_stacksize();
96 if (!__kmp_init_serial) {
97 __kmp_serial_initialize();
103 void FTN_STDCALL FTN_SET_BLOCKTIME(
int KMP_DEREF arg) {
105 __kmps_set_blocktime(KMP_DEREF arg);
110 gtid = __kmp_entry_gtid();
111 tid = __kmp_tid_from_gtid(gtid);
112 thread = __kmp_thread_from_gtid(gtid);
114 __kmp_aux_set_blocktime(KMP_DEREF arg, thread, tid);
118 int FTN_STDCALL FTN_GET_BLOCKTIME(
void) {
120 return __kmps_get_blocktime();
126 gtid = __kmp_entry_gtid();
127 tid = __kmp_tid_from_gtid(gtid);
128 thread = __kmp_thread_from_gtid(gtid);
129 team = __kmp_threads[gtid]->th.th_team;
132 if (__kmp_dflt_blocktime == KMP_MAX_BLOCKTIME) {
133 KF_TRACE(10, (
"kmp_get_blocktime: T#%d(%d:%d), blocktime=%d\n", gtid,
134 team->t.t_id, tid, KMP_MAX_BLOCKTIME));
135 return KMP_MAX_BLOCKTIME;
137 #ifdef KMP_ADJUST_BLOCKTIME
138 else if (__kmp_zero_bt && !get__bt_set(team, tid)) {
139 KF_TRACE(10, (
"kmp_get_blocktime: T#%d(%d:%d), blocktime=%d\n", gtid,
140 team->t.t_id, tid, 0));
145 KF_TRACE(10, (
"kmp_get_blocktime: T#%d(%d:%d), blocktime=%d\n", gtid,
146 team->t.t_id, tid, get__blocktime(team, tid)));
147 return get__blocktime(team, tid);
152 void FTN_STDCALL FTN_SET_LIBRARY_SERIAL(
void) {
154 __kmps_set_library(library_serial);
157 __kmp_user_set_library(library_serial);
161 void FTN_STDCALL FTN_SET_LIBRARY_TURNAROUND(
void) {
163 __kmps_set_library(library_turnaround);
166 __kmp_user_set_library(library_turnaround);
170 void FTN_STDCALL FTN_SET_LIBRARY_THROUGHPUT(
void) {
172 __kmps_set_library(library_throughput);
175 __kmp_user_set_library(library_throughput);
179 void FTN_STDCALL FTN_SET_LIBRARY(
int KMP_DEREF arg) {
181 __kmps_set_library(KMP_DEREF arg);
183 enum library_type lib;
184 lib = (
enum library_type)KMP_DEREF arg;
186 __kmp_user_set_library(lib);
190 int FTN_STDCALL FTN_GET_LIBRARY(
void) {
192 return __kmps_get_library();
194 if (!__kmp_init_serial) {
195 __kmp_serial_initialize();
197 return ((
int)__kmp_library);
201 void FTN_STDCALL FTN_SET_DISP_NUM_BUFFERS(
int KMP_DEREF arg) {
207 if (__kmp_init_serial == 0 && (KMP_DEREF arg) > 0)
208 __kmp_dispatch_num_buffers = KMP_DEREF arg;
212 int FTN_STDCALL FTN_SET_AFFINITY(
void **mask) {
213 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
216 if (!TCR_4(__kmp_init_middle)) {
217 __kmp_middle_initialize();
219 return __kmp_aux_set_affinity(mask);
223 int FTN_STDCALL FTN_GET_AFFINITY(
void **mask) {
224 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
227 if (!TCR_4(__kmp_init_middle)) {
228 __kmp_middle_initialize();
230 return __kmp_aux_get_affinity(mask);
234 int FTN_STDCALL FTN_GET_AFFINITY_MAX_PROC(
void) {
235 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
239 if (!TCR_4(__kmp_init_middle)) {
240 __kmp_middle_initialize();
242 return __kmp_aux_get_affinity_max_proc();
246 void FTN_STDCALL FTN_CREATE_AFFINITY_MASK(
void **mask) {
247 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
251 kmp_affin_mask_t *mask_internals;
252 if (!TCR_4(__kmp_init_middle)) {
253 __kmp_middle_initialize();
255 mask_internals = __kmp_affinity_dispatch->allocate_mask();
256 KMP_CPU_ZERO(mask_internals);
257 *mask = mask_internals;
261 void FTN_STDCALL FTN_DESTROY_AFFINITY_MASK(
void **mask) {
262 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
266 kmp_affin_mask_t *mask_internals;
267 if (!TCR_4(__kmp_init_middle)) {
268 __kmp_middle_initialize();
270 if (__kmp_env_consistency_check) {
272 KMP_FATAL(AffinityInvalidMask,
"kmp_destroy_affinity_mask");
275 mask_internals = (kmp_affin_mask_t *)(*mask);
276 __kmp_affinity_dispatch->deallocate_mask(mask_internals);
281 int FTN_STDCALL FTN_SET_AFFINITY_MASK_PROC(
int KMP_DEREF proc,
void **mask) {
282 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
285 if (!TCR_4(__kmp_init_middle)) {
286 __kmp_middle_initialize();
288 return __kmp_aux_set_affinity_mask_proc(KMP_DEREF proc, mask);
292 int FTN_STDCALL FTN_UNSET_AFFINITY_MASK_PROC(
int KMP_DEREF proc,
void **mask) {
293 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
296 if (!TCR_4(__kmp_init_middle)) {
297 __kmp_middle_initialize();
299 return __kmp_aux_unset_affinity_mask_proc(KMP_DEREF proc, mask);
303 int FTN_STDCALL FTN_GET_AFFINITY_MASK_PROC(
int KMP_DEREF proc,
void **mask) {
304 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
307 if (!TCR_4(__kmp_init_middle)) {
308 __kmp_middle_initialize();
310 return __kmp_aux_get_affinity_mask_proc(KMP_DEREF proc, mask);
317 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NUM_THREADS)(
int KMP_DEREF arg) {
321 __kmp_set_num_threads(KMP_DEREF arg, __kmp_entry_gtid());
326 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_THREADS)(void) {
335 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_MAX_THREADS)(void) {
341 if (!TCR_4(__kmp_init_middle)) {
342 __kmp_middle_initialize();
344 gtid = __kmp_entry_gtid();
345 thread = __kmp_threads[gtid];
348 return thread->th.th_current_task->td_icvs.nproc;
353 int FTN_STDCALL FTN_CONTROL_TOOL(
int command,
int modifier,
void *arg) {
354 #if defined(KMP_STUB) || !OMPT_SUPPORT
357 OMPT_STORE_RETURN_ADDRESS(__kmp_entry_gtid());
358 if (!TCR_4(__kmp_init_middle)) {
361 kmp_info_t *this_thr = __kmp_threads[__kmp_entry_gtid()];
362 ompt_task_info_t *parent_task_info = OMPT_CUR_TASK_INFO(this_thr);
363 parent_task_info->frame.enter_frame.ptr = OMPT_GET_FRAME_ADDRESS(0);
364 int ret = __kmp_control_tool(command, modifier, arg);
365 parent_task_info->frame.enter_frame.ptr = 0;
371 void FTN_STDCALL FTN_SET_DEFAULT_ALLOCATOR(
const omp_allocator_t *allocator) {
373 __kmpc_set_default_allocator(__kmp_entry_gtid(), allocator);
376 const omp_allocator_t *FTN_STDCALL FTN_GET_DEFAULT_ALLOCATOR(
void) {
380 return __kmpc_get_default_allocator(__kmp_entry_gtid());
383 void *FTN_STDCALL FTN_ALLOC(
size_t size,
const omp_allocator_t *allocator) {
387 return __kmpc_alloc(__kmp_entry_gtid(), size, allocator);
390 void FTN_STDCALL FTN_FREE(
void *ptr,
const omp_allocator_t *allocator) {
394 __kmpc_free(__kmp_entry_gtid(), ptr, allocator);
401 static void __kmp_fortran_strncpy_truncate(
char *buffer,
size_t buf_size,
402 char const *csrc,
size_t csrc_size) {
403 size_t capped_src_size = csrc_size;
404 if (csrc_size >= buf_size) {
405 capped_src_size = buf_size - 1;
407 KMP_STRNCPY_S(buffer, buf_size, csrc, capped_src_size);
408 if (csrc_size >= buf_size) {
409 KMP_DEBUG_ASSERT(buffer[buf_size - 1] ==
'\0');
410 buffer[buf_size - 1] = csrc[buf_size - 1];
412 for (
size_t i = csrc_size; i < buf_size; ++i)
418 class ConvertedString {
423 ConvertedString(
char const *fortran_str,
size_t size) {
424 th = __kmp_get_thread();
425 buf = (
char *)__kmp_thread_malloc(th, size + 1);
426 KMP_STRNCPY_S(buf, size + 1, fortran_str, size);
429 ~ConvertedString() { __kmp_thread_free(th, buf); }
430 const char *
get()
const {
return buf; }
438 void FTN_STDCALL FTN_SET_AFFINITY_FORMAT(
char const *format,
size_t size) {
442 if (!__kmp_init_serial) {
443 __kmp_serial_initialize();
445 ConvertedString cformat(format, size);
448 __kmp_strncpy_truncate(__kmp_affinity_format, KMP_AFFINITY_FORMAT_SIZE,
449 cformat.get(), KMP_STRLEN(cformat.get()));
459 size_t FTN_STDCALL FTN_GET_AFFINITY_FORMAT(
char *buffer,
size_t size) {
464 if (!__kmp_init_serial) {
465 __kmp_serial_initialize();
467 format_size = KMP_STRLEN(__kmp_affinity_format);
468 if (buffer && size) {
469 __kmp_fortran_strncpy_truncate(buffer, size, __kmp_affinity_format,
481 void FTN_STDCALL FTN_DISPLAY_AFFINITY(
char const *format,
size_t size) {
486 if (!TCR_4(__kmp_init_middle)) {
487 __kmp_middle_initialize();
489 gtid = __kmp_get_gtid();
490 ConvertedString cformat(format, size);
491 __kmp_aux_display_affinity(gtid, cformat.get());
505 size_t FTN_STDCALL FTN_CAPTURE_AFFINITY(
char *buffer,
char const *format,
506 size_t buf_size,
size_t for_size) {
507 #if defined(KMP_STUB)
512 kmp_str_buf_t capture_buf;
513 if (!TCR_4(__kmp_init_middle)) {
514 __kmp_middle_initialize();
516 gtid = __kmp_get_gtid();
517 __kmp_str_buf_init(&capture_buf);
518 ConvertedString cformat(format, for_size);
519 num_required = __kmp_aux_capture_affinity(gtid, cformat.get(), &capture_buf);
520 if (buffer && buf_size) {
521 __kmp_fortran_strncpy_truncate(buffer, buf_size, capture_buf.str,
524 __kmp_str_buf_free(&capture_buf);
530 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_THREAD_NUM)(void) {
536 #if KMP_OS_DARWIN || KMP_OS_DRAGONFLY || KMP_OS_FREEBSD || KMP_OS_NETBSD || \
537 KMP_OS_HURD || KMP_OS_KFREEBSD
538 gtid = __kmp_entry_gtid();
540 if (!__kmp_init_parallel ||
541 (gtid = (
int)((kmp_intptr_t)TlsGetValue(__kmp_gtid_threadprivate_key))) ==
549 #ifdef KMP_TDATA_GTID
550 if (__kmp_gtid_mode >= 3) {
551 if ((gtid = __kmp_gtid) == KMP_GTID_DNE) {
556 if (!__kmp_init_parallel ||
557 (gtid = (kmp_intptr_t)(
558 pthread_getspecific(__kmp_gtid_threadprivate_key))) == 0) {
562 #ifdef KMP_TDATA_GTID
566 #error Unknown or unsupported OS
569 return __kmp_tid_from_gtid(gtid);
573 int FTN_STDCALL FTN_GET_NUM_KNOWN_THREADS(
void) {
577 if (!__kmp_init_serial) {
578 __kmp_serial_initialize();
582 return TCR_4(__kmp_nth);
586 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_PROCS)(void) {
590 if (!TCR_4(__kmp_init_middle)) {
591 __kmp_middle_initialize();
593 return __kmp_avail_proc;
597 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NESTED)(
int KMP_DEREF flag) {
599 __kmps_set_nested(KMP_DEREF flag);
603 thread = __kmp_entry_thread();
604 __kmp_save_internal_controls(thread);
605 set__nested(thread, ((KMP_DEREF flag) ? TRUE : FALSE));
609 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NESTED)(void) {
611 return __kmps_get_nested();
614 thread = __kmp_entry_thread();
615 return get__nested(thread);
619 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_DYNAMIC)(
int KMP_DEREF flag) {
621 __kmps_set_dynamic(KMP_DEREF flag ? TRUE : FALSE);
625 thread = __kmp_entry_thread();
627 __kmp_save_internal_controls(thread);
628 set__dynamic(thread, KMP_DEREF flag ? TRUE : FALSE);
632 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_DYNAMIC)(void) {
634 return __kmps_get_dynamic();
637 thread = __kmp_entry_thread();
638 return get__dynamic(thread);
642 int FTN_STDCALL KMP_EXPAND_NAME(FTN_IN_PARALLEL)(void) {
646 kmp_info_t *th = __kmp_entry_thread();
648 if (th->th.th_teams_microtask) {
653 return (th->th.th_team->t.t_active_level ? 1 : 0);
656 return (th->th.th_root->r.r_in_parallel ? FTN_TRUE : FTN_FALSE);
660 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_SCHEDULE)(kmp_sched_t KMP_DEREF kind,
661 int KMP_DEREF modifier) {
663 __kmps_set_schedule(KMP_DEREF kind, KMP_DEREF modifier);
666 __kmp_set_schedule(__kmp_entry_gtid(), KMP_DEREF kind, KMP_DEREF modifier);
670 void FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_SCHEDULE)(kmp_sched_t *kind,
673 __kmps_get_schedule(kind, modifier);
676 __kmp_get_schedule(__kmp_entry_gtid(), kind, modifier);
680 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_MAX_ACTIVE_LEVELS)(
int KMP_DEREF arg) {
685 __kmp_set_max_active_levels(__kmp_entry_gtid(), KMP_DEREF arg);
689 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_MAX_ACTIVE_LEVELS)(void) {
694 return __kmp_get_max_active_levels(__kmp_entry_gtid());
698 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_ACTIVE_LEVEL)(void) {
703 return __kmp_entry_thread()->th.th_team->t.t_active_level;
707 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_LEVEL)(void) {
712 return __kmp_entry_thread()->th.th_team->t.t_level;
717 KMP_EXPAND_NAME(FTN_GET_ANCESTOR_THREAD_NUM)(
int KMP_DEREF level) {
719 return (KMP_DEREF level) ? (-1) : (0);
721 return __kmp_get_ancestor_thread_num(__kmp_entry_gtid(), KMP_DEREF level);
725 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_TEAM_SIZE)(
int KMP_DEREF level) {
727 return (KMP_DEREF level) ? (-1) : (1);
729 return __kmp_get_team_size(__kmp_entry_gtid(), KMP_DEREF level);
733 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_THREAD_LIMIT)(void) {
739 if (!__kmp_init_serial) {
740 __kmp_serial_initialize();
743 gtid = __kmp_entry_gtid();
744 thread = __kmp_threads[gtid];
745 return thread->th.th_current_task->td_icvs.thread_limit;
749 int FTN_STDCALL KMP_EXPAND_NAME(FTN_IN_FINAL)(void) {
753 if (!TCR_4(__kmp_init_parallel)) {
756 return __kmp_entry_thread()->th.th_current_task->td_flags.final;
762 kmp_proc_bind_t FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PROC_BIND)(void) {
764 return __kmps_get_proc_bind();
766 return get__proc_bind(__kmp_entry_thread());
771 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_PLACES)(void) {
772 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
775 if (!TCR_4(__kmp_init_middle)) {
776 __kmp_middle_initialize();
778 if (!KMP_AFFINITY_CAPABLE())
780 return __kmp_affinity_num_masks;
784 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_NUM_PROCS)(
int place_num) {
785 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
790 if (!TCR_4(__kmp_init_middle)) {
791 __kmp_middle_initialize();
793 if (!KMP_AFFINITY_CAPABLE())
795 if (place_num < 0 || place_num >= (
int)__kmp_affinity_num_masks)
797 kmp_affin_mask_t *mask = KMP_CPU_INDEX(__kmp_affinity_masks, place_num);
798 KMP_CPU_SET_ITERATE(i, mask) {
799 if ((!KMP_CPU_ISSET(i, __kmp_affin_fullMask)) ||
800 (!KMP_CPU_ISSET(i, mask))) {
809 void FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_PROC_IDS)(
int place_num,
811 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
815 if (!TCR_4(__kmp_init_middle)) {
816 __kmp_middle_initialize();
818 if (!KMP_AFFINITY_CAPABLE())
820 if (place_num < 0 || place_num >= (
int)__kmp_affinity_num_masks)
822 kmp_affin_mask_t *mask = KMP_CPU_INDEX(__kmp_affinity_masks, place_num);
824 KMP_CPU_SET_ITERATE(i, mask) {
825 if ((!KMP_CPU_ISSET(i, __kmp_affin_fullMask)) ||
826 (!KMP_CPU_ISSET(i, mask))) {
834 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_NUM)(void) {
835 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
840 if (!TCR_4(__kmp_init_middle)) {
841 __kmp_middle_initialize();
843 if (!KMP_AFFINITY_CAPABLE())
845 gtid = __kmp_entry_gtid();
846 thread = __kmp_thread_from_gtid(gtid);
847 if (thread->th.th_current_place < 0)
849 return thread->th.th_current_place;
853 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PARTITION_NUM_PLACES)(void) {
854 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
857 int gtid, num_places, first_place, last_place;
859 if (!TCR_4(__kmp_init_middle)) {
860 __kmp_middle_initialize();
862 if (!KMP_AFFINITY_CAPABLE())
864 gtid = __kmp_entry_gtid();
865 thread = __kmp_thread_from_gtid(gtid);
866 first_place = thread->th.th_first_place;
867 last_place = thread->th.th_last_place;
868 if (first_place < 0 || last_place < 0)
870 if (first_place <= last_place)
871 num_places = last_place - first_place + 1;
873 num_places = __kmp_affinity_num_masks - first_place + last_place + 1;
879 FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PARTITION_PLACE_NUMS)(
int *place_nums) {
880 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
883 int i, gtid, place_num, first_place, last_place, start, end;
885 if (!TCR_4(__kmp_init_middle)) {
886 __kmp_middle_initialize();
888 if (!KMP_AFFINITY_CAPABLE())
890 gtid = __kmp_entry_gtid();
891 thread = __kmp_thread_from_gtid(gtid);
892 first_place = thread->th.th_first_place;
893 last_place = thread->th.th_last_place;
894 if (first_place < 0 || last_place < 0)
896 if (first_place <= last_place) {
903 for (i = 0, place_num = start; place_num <= end; ++place_num, ++i) {
904 place_nums[i] = place_num;
910 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_TEAMS)(void) {
914 return __kmp_aux_get_num_teams();
918 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_TEAM_NUM)(void) {
922 return __kmp_aux_get_team_num();
926 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_DEFAULT_DEVICE)(void) {
927 #if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
930 return __kmp_entry_thread()->th.th_current_task->td_icvs.default_device;
934 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_DEFAULT_DEVICE)(
int KMP_DEREF arg) {
935 #if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
938 __kmp_entry_thread()->th.th_current_task->td_icvs.default_device =
945 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_DEVICES)(void) KMP_WEAK_ATTRIBUTE;
946 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_DEVICES)(void) {
947 #if KMP_MIC || KMP_OS_DARWIN || KMP_OS_WINDOWS || defined(KMP_STUB)
951 if ((*(
void **)(&fptr) = dlsym(RTLD_DEFAULT,
"_Offload_number_of_devices"))) {
953 }
else if ((*(
void **)(&fptr) = dlsym(RTLD_NEXT,
"omp_get_num_devices"))) {
958 #endif // KMP_MIC || KMP_OS_DARWIN || KMP_OS_WINDOWS || defined(KMP_STUB)
963 int FTN_STDCALL KMP_EXPAND_NAME(FTN_IS_INITIAL_DEVICE)(void) KMP_WEAK_ATTRIBUTE;
964 int FTN_STDCALL KMP_EXPAND_NAME(FTN_IS_INITIAL_DEVICE)(void) {
968 #endif // OMP_40_ENABLED
974 int FTN_STDCALL FTN_GET_INITIAL_DEVICE(
void) KMP_WEAK_ATTRIBUTE;
975 int FTN_STDCALL FTN_GET_INITIAL_DEVICE(
void) {
976 #if KMP_MIC || KMP_OS_DARWIN || KMP_OS_WINDOWS || defined(KMP_STUB)
977 return KMP_HOST_DEVICE;
980 if ((*(
void **)(&fptr) = dlsym(RTLD_NEXT,
"omp_get_initial_device"))) {
983 return KMP_HOST_DEVICE;
988 #if defined(KMP_STUB)
991 void *FTN_STDCALL FTN_TARGET_ALLOC(
size_t size,
int device_num) {
return 0; }
993 void FTN_STDCALL FTN_TARGET_FREE(
void *device_ptr,
int device_num) {}
995 int FTN_STDCALL FTN_TARGET_IS_PRESENT(
void *ptr,
int device_num) {
return 0; }
997 int FTN_STDCALL FTN_TARGET_MEMCPY(
void *dst,
void *src,
size_t length,
998 size_t dst_offset,
size_t src_offset,
999 int dst_device,
int src_device) {
1003 int FTN_STDCALL FTN_TARGET_MEMCPY_RECT(
1004 void *dst,
void *src,
size_t element_size,
int num_dims,
1005 const size_t *volume,
const size_t *dst_offsets,
const size_t *src_offsets,
1006 const size_t *dst_dimensions,
const size_t *src_dimensions,
int dst_device,
1011 int FTN_STDCALL FTN_TARGET_ASSOCIATE_PTR(
void *host_ptr,
void *device_ptr,
1012 size_t size,
size_t device_offset,
1017 int FTN_STDCALL FTN_TARGET_DISASSOCIATE_PTR(
void *host_ptr,
int device_num) {
1020 #endif // defined(KMP_STUB)
1021 #endif // OMP_45_ENABLED
1024 typedef enum { UNINIT = -1, UNLOCKED, LOCKED } kmp_stub_lock_t;
1027 #if KMP_USE_DYNAMIC_LOCK
1028 void FTN_STDCALL FTN_INIT_LOCK_WITH_HINT(
void **user_lock,
1029 uintptr_t KMP_DEREF hint) {
1031 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1033 int gtid = __kmp_entry_gtid();
1034 #if OMPT_SUPPORT && OMPT_OPTIONAL
1035 OMPT_STORE_RETURN_ADDRESS(gtid);
1037 __kmpc_init_lock_with_hint(NULL, gtid, user_lock, KMP_DEREF hint);
1041 void FTN_STDCALL FTN_INIT_NEST_LOCK_WITH_HINT(
void **user_lock,
1042 uintptr_t KMP_DEREF hint) {
1044 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1046 int gtid = __kmp_entry_gtid();
1047 #if OMPT_SUPPORT && OMPT_OPTIONAL
1048 OMPT_STORE_RETURN_ADDRESS(gtid);
1050 __kmpc_init_nest_lock_with_hint(NULL, gtid, user_lock, KMP_DEREF hint);
1056 void FTN_STDCALL KMP_EXPAND_NAME(FTN_INIT_LOCK)(
void **user_lock) {
1058 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1060 int gtid = __kmp_entry_gtid();
1061 #if OMPT_SUPPORT && OMPT_OPTIONAL
1062 OMPT_STORE_RETURN_ADDRESS(gtid);
1064 __kmpc_init_lock(NULL, gtid, user_lock);
1069 void FTN_STDCALL KMP_EXPAND_NAME(FTN_INIT_NEST_LOCK)(
void **user_lock) {
1071 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1073 int gtid = __kmp_entry_gtid();
1074 #if OMPT_SUPPORT && OMPT_OPTIONAL
1075 OMPT_STORE_RETURN_ADDRESS(gtid);
1077 __kmpc_init_nest_lock(NULL, gtid, user_lock);
1081 void FTN_STDCALL KMP_EXPAND_NAME(FTN_DESTROY_LOCK)(
void **user_lock) {
1083 *((kmp_stub_lock_t *)user_lock) = UNINIT;
1085 int gtid = __kmp_entry_gtid();
1086 #if OMPT_SUPPORT && OMPT_OPTIONAL
1087 OMPT_STORE_RETURN_ADDRESS(gtid);
1089 __kmpc_destroy_lock(NULL, gtid, user_lock);
1093 void FTN_STDCALL KMP_EXPAND_NAME(FTN_DESTROY_NEST_LOCK)(
void **user_lock) {
1095 *((kmp_stub_lock_t *)user_lock) = UNINIT;
1097 int gtid = __kmp_entry_gtid();
1098 #if OMPT_SUPPORT && OMPT_OPTIONAL
1099 OMPT_STORE_RETURN_ADDRESS(gtid);
1101 __kmpc_destroy_nest_lock(NULL, gtid, user_lock);
1105 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_LOCK)(
void **user_lock) {
1107 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1110 if (*((kmp_stub_lock_t *)user_lock) != UNLOCKED) {
1113 *((kmp_stub_lock_t *)user_lock) = LOCKED;
1115 int gtid = __kmp_entry_gtid();
1116 #if OMPT_SUPPORT && OMPT_OPTIONAL
1117 OMPT_STORE_RETURN_ADDRESS(gtid);
1119 __kmpc_set_lock(NULL, gtid, user_lock);
1123 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NEST_LOCK)(
void **user_lock) {
1125 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1128 (*((
int *)user_lock))++;
1130 int gtid = __kmp_entry_gtid();
1131 #if OMPT_SUPPORT && OMPT_OPTIONAL
1132 OMPT_STORE_RETURN_ADDRESS(gtid);
1134 __kmpc_set_nest_lock(NULL, gtid, user_lock);
1138 void FTN_STDCALL KMP_EXPAND_NAME(FTN_UNSET_LOCK)(
void **user_lock) {
1140 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1143 if (*((kmp_stub_lock_t *)user_lock) == UNLOCKED) {
1146 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1148 int gtid = __kmp_entry_gtid();
1149 #if OMPT_SUPPORT && OMPT_OPTIONAL
1150 OMPT_STORE_RETURN_ADDRESS(gtid);
1152 __kmpc_unset_lock(NULL, gtid, user_lock);
1156 void FTN_STDCALL KMP_EXPAND_NAME(FTN_UNSET_NEST_LOCK)(
void **user_lock) {
1158 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1161 if (*((kmp_stub_lock_t *)user_lock) == UNLOCKED) {
1164 (*((
int *)user_lock))--;
1166 int gtid = __kmp_entry_gtid();
1167 #if OMPT_SUPPORT && OMPT_OPTIONAL
1168 OMPT_STORE_RETURN_ADDRESS(gtid);
1170 __kmpc_unset_nest_lock(NULL, gtid, user_lock);
1174 int FTN_STDCALL KMP_EXPAND_NAME(FTN_TEST_LOCK)(
void **user_lock) {
1176 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1179 if (*((kmp_stub_lock_t *)user_lock) == LOCKED) {
1182 *((kmp_stub_lock_t *)user_lock) = LOCKED;
1185 int gtid = __kmp_entry_gtid();
1186 #if OMPT_SUPPORT && OMPT_OPTIONAL
1187 OMPT_STORE_RETURN_ADDRESS(gtid);
1189 return __kmpc_test_lock(NULL, gtid, user_lock);
1193 int FTN_STDCALL KMP_EXPAND_NAME(FTN_TEST_NEST_LOCK)(
void **user_lock) {
1195 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1198 return ++(*((
int *)user_lock));
1200 int gtid = __kmp_entry_gtid();
1201 #if OMPT_SUPPORT && OMPT_OPTIONAL
1202 OMPT_STORE_RETURN_ADDRESS(gtid);
1204 return __kmpc_test_nest_lock(NULL, gtid, user_lock);
1208 double FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_WTIME)(void) {
1210 return __kmps_get_wtime();
1216 if (!__kmp_init_serial) {
1217 __kmp_serial_initialize();
1220 __kmp_elapsed(&data);
1225 double FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_WTICK)(void) {
1227 return __kmps_get_wtick();
1230 if (!__kmp_init_serial) {
1231 __kmp_serial_initialize();
1233 __kmp_elapsed_tick(&data);
1240 void *FTN_STDCALL FTN_MALLOC(
size_t KMP_DEREF size) {
1242 return kmpc_malloc(KMP_DEREF size);
1245 void *FTN_STDCALL FTN_ALIGNED_MALLOC(
size_t KMP_DEREF size,
1246 size_t KMP_DEREF alignment) {
1248 return kmpc_aligned_malloc(KMP_DEREF size, KMP_DEREF alignment);
1251 void *FTN_STDCALL FTN_CALLOC(
size_t KMP_DEREF nelem,
size_t KMP_DEREF elsize) {
1253 return kmpc_calloc(KMP_DEREF nelem, KMP_DEREF elsize);
1256 void *FTN_STDCALL FTN_REALLOC(
void *KMP_DEREF ptr,
size_t KMP_DEREF size) {
1258 return kmpc_realloc(KMP_DEREF ptr, KMP_DEREF size);
1261 void FTN_STDCALL FTN_KFREE(
void *KMP_DEREF ptr) {
1263 kmpc_free(KMP_DEREF ptr);
1266 void FTN_STDCALL FTN_SET_WARNINGS_ON(
void) {
1268 __kmp_generate_warnings = kmp_warnings_explicit;
1272 void FTN_STDCALL FTN_SET_WARNINGS_OFF(
void) {
1274 __kmp_generate_warnings = FALSE;
1278 void FTN_STDCALL FTN_SET_DEFAULTS(
char const *str
1279 #ifndef PASS_ARGS_BY_VALUE
1285 #ifdef PASS_ARGS_BY_VALUE
1286 int len = (int)KMP_STRLEN(str);
1288 __kmp_aux_set_defaults(str, len);
1296 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_CANCELLATION)(void) {
1301 if (!__kmp_init_serial) {
1302 __kmp_serial_initialize();
1304 return __kmp_omp_cancellation;
1308 int FTN_STDCALL FTN_GET_CANCELLATION_STATUS(
int cancel_kind) {
1312 return __kmp_get_cancellation_status(cancel_kind);
1316 #endif // OMP_40_ENABLED
1320 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_MAX_TASK_PRIORITY)(void) {
1324 if (!__kmp_init_serial) {
1325 __kmp_serial_initialize();
1327 return __kmp_max_task_priority;
1336 int FTN_STDCALL FTN_GET_DEVICE_NUM(
void) KMP_WEAK_ATTRIBUTE;
1337 int FTN_STDCALL FTN_GET_DEVICE_NUM(
void) {
return KMP_HOST_DEVICE; }
1340 int FTN_STDCALL FTN_PAUSE_RESOURCE(kmp_pause_status_t kind,
int device_num) {
1344 if (device_num == KMP_HOST_DEVICE)
1345 return __kmpc_pause_resource(kind);
1348 int (*fptr)(kmp_pause_status_t, int);
1349 if ((*(
void **)(&fptr) = dlsym(RTLD_DEFAULT,
"tgt_pause_resource")))
1350 return (*fptr)(kind, device_num);
1359 int FTN_STDCALL FTN_PAUSE_RESOURCE_ALL(kmp_pause_status_t kind) {
1365 int (*fptr)(kmp_pause_status_t, int);
1366 if ((*(
void **)(&fptr) = dlsym(RTLD_DEFAULT,
"tgt_pause_resource")))
1367 fails = (*fptr)(kind, KMP_DEVICE_ALL);
1369 fails += __kmpc_pause_resource(kind);
1375 int FTN_STDCALL FTN_GET_SUPPORTED_ACTIVE_LEVELS(
void) {
1379 return KMP_MAX_ACTIVE_LEVELS_LIMIT;
1383 #endif // OMP_50_ENABLED
1386 #ifdef KMP_USE_VERSION_SYMBOLS
1408 KMP_VERSION_SYMBOL(FTN_SET_NUM_THREADS, 10,
"OMP_1.0");
1409 KMP_VERSION_SYMBOL(FTN_GET_NUM_THREADS, 10,
"OMP_1.0");
1410 KMP_VERSION_SYMBOL(FTN_GET_MAX_THREADS, 10,
"OMP_1.0");
1411 KMP_VERSION_SYMBOL(FTN_GET_THREAD_NUM, 10,
"OMP_1.0");
1412 KMP_VERSION_SYMBOL(FTN_GET_NUM_PROCS, 10,
"OMP_1.0");
1413 KMP_VERSION_SYMBOL(FTN_IN_PARALLEL, 10,
"OMP_1.0");
1414 KMP_VERSION_SYMBOL(FTN_SET_DYNAMIC, 10,
"OMP_1.0");
1415 KMP_VERSION_SYMBOL(FTN_GET_DYNAMIC, 10,
"OMP_1.0");
1416 KMP_VERSION_SYMBOL(FTN_SET_NESTED, 10,
"OMP_1.0");
1417 KMP_VERSION_SYMBOL(FTN_GET_NESTED, 10,
"OMP_1.0");
1418 KMP_VERSION_SYMBOL(FTN_INIT_LOCK, 10,
"OMP_1.0");
1419 KMP_VERSION_SYMBOL(FTN_INIT_NEST_LOCK, 10,
"OMP_1.0");
1420 KMP_VERSION_SYMBOL(FTN_DESTROY_LOCK, 10,
"OMP_1.0");
1421 KMP_VERSION_SYMBOL(FTN_DESTROY_NEST_LOCK, 10,
"OMP_1.0");
1422 KMP_VERSION_SYMBOL(FTN_SET_LOCK, 10,
"OMP_1.0");
1423 KMP_VERSION_SYMBOL(FTN_SET_NEST_LOCK, 10,
"OMP_1.0");
1424 KMP_VERSION_SYMBOL(FTN_UNSET_LOCK, 10,
"OMP_1.0");
1425 KMP_VERSION_SYMBOL(FTN_UNSET_NEST_LOCK, 10,
"OMP_1.0");
1426 KMP_VERSION_SYMBOL(FTN_TEST_LOCK, 10,
"OMP_1.0");
1427 KMP_VERSION_SYMBOL(FTN_TEST_NEST_LOCK, 10,
"OMP_1.0");
1430 KMP_VERSION_SYMBOL(FTN_GET_WTICK, 20,
"OMP_2.0");
1431 KMP_VERSION_SYMBOL(FTN_GET_WTIME, 20,
"OMP_2.0");
1434 KMP_VERSION_SYMBOL(FTN_SET_SCHEDULE, 30,
"OMP_3.0");
1435 KMP_VERSION_SYMBOL(FTN_GET_SCHEDULE, 30,
"OMP_3.0");
1436 KMP_VERSION_SYMBOL(FTN_GET_THREAD_LIMIT, 30,
"OMP_3.0");
1437 KMP_VERSION_SYMBOL(FTN_SET_MAX_ACTIVE_LEVELS, 30,
"OMP_3.0");
1438 KMP_VERSION_SYMBOL(FTN_GET_MAX_ACTIVE_LEVELS, 30,
"OMP_3.0");
1439 KMP_VERSION_SYMBOL(FTN_GET_ANCESTOR_THREAD_NUM, 30,
"OMP_3.0");
1440 KMP_VERSION_SYMBOL(FTN_GET_LEVEL, 30,
"OMP_3.0");
1441 KMP_VERSION_SYMBOL(FTN_GET_TEAM_SIZE, 30,
"OMP_3.0");
1442 KMP_VERSION_SYMBOL(FTN_GET_ACTIVE_LEVEL, 30,
"OMP_3.0");
1445 KMP_VERSION_SYMBOL(FTN_INIT_LOCK, 30,
"OMP_3.0");
1446 KMP_VERSION_SYMBOL(FTN_INIT_NEST_LOCK, 30,
"OMP_3.0");
1447 KMP_VERSION_SYMBOL(FTN_DESTROY_LOCK, 30,
"OMP_3.0");
1448 KMP_VERSION_SYMBOL(FTN_DESTROY_NEST_LOCK, 30,
"OMP_3.0");
1449 KMP_VERSION_SYMBOL(FTN_SET_LOCK, 30,
"OMP_3.0");
1450 KMP_VERSION_SYMBOL(FTN_SET_NEST_LOCK, 30,
"OMP_3.0");
1451 KMP_VERSION_SYMBOL(FTN_UNSET_LOCK, 30,
"OMP_3.0");
1452 KMP_VERSION_SYMBOL(FTN_UNSET_NEST_LOCK, 30,
"OMP_3.0");
1453 KMP_VERSION_SYMBOL(FTN_TEST_LOCK, 30,
"OMP_3.0");
1454 KMP_VERSION_SYMBOL(FTN_TEST_NEST_LOCK, 30,
"OMP_3.0");
1457 KMP_VERSION_SYMBOL(FTN_IN_FINAL, 31,
"OMP_3.1");
1461 KMP_VERSION_SYMBOL(FTN_GET_PROC_BIND, 40,
"OMP_4.0");
1462 KMP_VERSION_SYMBOL(FTN_GET_NUM_TEAMS, 40,
"OMP_4.0");
1463 KMP_VERSION_SYMBOL(FTN_GET_TEAM_NUM, 40,
"OMP_4.0");
1464 KMP_VERSION_SYMBOL(FTN_GET_CANCELLATION, 40,
"OMP_4.0");
1465 KMP_VERSION_SYMBOL(FTN_GET_DEFAULT_DEVICE, 40,
"OMP_4.0");
1466 KMP_VERSION_SYMBOL(FTN_SET_DEFAULT_DEVICE, 40,
"OMP_4.0");
1467 KMP_VERSION_SYMBOL(FTN_IS_INITIAL_DEVICE, 40,
"OMP_4.0");
1468 KMP_VERSION_SYMBOL(FTN_GET_NUM_DEVICES, 40,
"OMP_4.0");
1473 KMP_VERSION_SYMBOL(FTN_GET_MAX_TASK_PRIORITY, 45,
"OMP_4.5");
1474 KMP_VERSION_SYMBOL(FTN_GET_NUM_PLACES, 45,
"OMP_4.5");
1475 KMP_VERSION_SYMBOL(FTN_GET_PLACE_NUM_PROCS, 45,
"OMP_4.5");
1476 KMP_VERSION_SYMBOL(FTN_GET_PLACE_PROC_IDS, 45,
"OMP_4.5");
1477 KMP_VERSION_SYMBOL(FTN_GET_PLACE_NUM, 45,
"OMP_4.5");
1478 KMP_VERSION_SYMBOL(FTN_GET_PARTITION_NUM_PLACES, 45,
"OMP_4.5");
1479 KMP_VERSION_SYMBOL(FTN_GET_PARTITION_PLACE_NUMS, 45,
"OMP_4.5");
1491 #endif // KMP_USE_VERSION_SYMBOLS
1495 #endif // __cplusplus
KMP_EXPORT kmp_int32 __kmpc_bound_num_threads(ident_t *)