15 #error The support file kmp_ftn_entry.h should not be compiled by itself. 25 #include "ompt-specific.h" 40 #ifdef KMP_GOMP_COMPAT 41 #if (KMP_FTN_ENTRIES == KMP_FTN_PLAIN) || (KMP_FTN_ENTRIES == KMP_FTN_UPPER) 42 #define PASS_ARGS_BY_VALUE 1 46 #if (KMP_FTN_ENTRIES == KMP_FTN_PLAIN) || (KMP_FTN_ENTRIES == KMP_FTN_APPEND) 47 #define PASS_ARGS_BY_VALUE 1 52 #ifdef PASS_ARGS_BY_VALUE 58 void FTN_STDCALL FTN_SET_STACKSIZE(
int KMP_DEREF arg) {
60 __kmps_set_stacksize(KMP_DEREF arg);
63 __kmp_aux_set_stacksize((
size_t)KMP_DEREF arg);
67 void FTN_STDCALL FTN_SET_STACKSIZE_S(
size_t KMP_DEREF arg) {
69 __kmps_set_stacksize(KMP_DEREF arg);
72 __kmp_aux_set_stacksize(KMP_DEREF arg);
76 int FTN_STDCALL FTN_GET_STACKSIZE(
void) {
78 return __kmps_get_stacksize();
80 if (!__kmp_init_serial) {
81 __kmp_serial_initialize();
83 return (
int)__kmp_stksize;
87 size_t FTN_STDCALL FTN_GET_STACKSIZE_S(
void) {
89 return __kmps_get_stacksize();
91 if (!__kmp_init_serial) {
92 __kmp_serial_initialize();
98 void FTN_STDCALL FTN_SET_BLOCKTIME(
int KMP_DEREF arg) {
100 __kmps_set_blocktime(KMP_DEREF arg);
105 gtid = __kmp_entry_gtid();
106 tid = __kmp_tid_from_gtid(gtid);
107 thread = __kmp_thread_from_gtid(gtid);
109 __kmp_aux_set_blocktime(KMP_DEREF arg, thread, tid);
113 int FTN_STDCALL FTN_GET_BLOCKTIME(
void) {
115 return __kmps_get_blocktime();
121 gtid = __kmp_entry_gtid();
122 tid = __kmp_tid_from_gtid(gtid);
123 thread = __kmp_thread_from_gtid(gtid);
124 team = __kmp_threads[gtid]->th.th_team;
127 if (__kmp_dflt_blocktime == KMP_MAX_BLOCKTIME) {
128 KF_TRACE(10, (
"kmp_get_blocktime: T#%d(%d:%d), blocktime=%d\n", gtid,
129 team->t.t_id, tid, KMP_MAX_BLOCKTIME));
130 return KMP_MAX_BLOCKTIME;
132 #ifdef KMP_ADJUST_BLOCKTIME 133 else if (__kmp_zero_bt && !get__bt_set(team, tid)) {
134 KF_TRACE(10, (
"kmp_get_blocktime: T#%d(%d:%d), blocktime=%d\n", gtid,
135 team->t.t_id, tid, 0));
140 KF_TRACE(10, (
"kmp_get_blocktime: T#%d(%d:%d), blocktime=%d\n", gtid,
141 team->t.t_id, tid, get__blocktime(team, tid)));
142 return get__blocktime(team, tid);
147 void FTN_STDCALL FTN_SET_LIBRARY_SERIAL(
void) {
149 __kmps_set_library(library_serial);
152 __kmp_user_set_library(library_serial);
156 void FTN_STDCALL FTN_SET_LIBRARY_TURNAROUND(
void) {
158 __kmps_set_library(library_turnaround);
161 __kmp_user_set_library(library_turnaround);
165 void FTN_STDCALL FTN_SET_LIBRARY_THROUGHPUT(
void) {
167 __kmps_set_library(library_throughput);
170 __kmp_user_set_library(library_throughput);
174 void FTN_STDCALL FTN_SET_LIBRARY(
int KMP_DEREF arg) {
176 __kmps_set_library(KMP_DEREF arg);
178 enum library_type lib;
179 lib = (
enum library_type)KMP_DEREF arg;
181 __kmp_user_set_library(lib);
185 int FTN_STDCALL FTN_GET_LIBRARY(
void) {
187 return __kmps_get_library();
189 if (!__kmp_init_serial) {
190 __kmp_serial_initialize();
192 return ((
int)__kmp_library);
196 void FTN_STDCALL FTN_SET_DISP_NUM_BUFFERS(
int KMP_DEREF arg) {
202 if (__kmp_init_serial == 0 && (KMP_DEREF arg) > 0)
203 __kmp_dispatch_num_buffers = KMP_DEREF arg;
207 int FTN_STDCALL FTN_SET_AFFINITY(
void **mask) {
208 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 211 if (!TCR_4(__kmp_init_middle)) {
212 __kmp_middle_initialize();
214 return __kmp_aux_set_affinity(mask);
218 int FTN_STDCALL FTN_GET_AFFINITY(
void **mask) {
219 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 222 if (!TCR_4(__kmp_init_middle)) {
223 __kmp_middle_initialize();
225 return __kmp_aux_get_affinity(mask);
229 int FTN_STDCALL FTN_GET_AFFINITY_MAX_PROC(
void) {
230 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 234 if (!TCR_4(__kmp_init_middle)) {
235 __kmp_middle_initialize();
237 return __kmp_aux_get_affinity_max_proc();
241 void FTN_STDCALL FTN_CREATE_AFFINITY_MASK(
void **mask) {
242 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 246 kmp_affin_mask_t *mask_internals;
247 if (!TCR_4(__kmp_init_middle)) {
248 __kmp_middle_initialize();
250 mask_internals = __kmp_affinity_dispatch->allocate_mask();
251 KMP_CPU_ZERO(mask_internals);
252 *mask = mask_internals;
256 void FTN_STDCALL FTN_DESTROY_AFFINITY_MASK(
void **mask) {
257 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 261 kmp_affin_mask_t *mask_internals;
262 if (!TCR_4(__kmp_init_middle)) {
263 __kmp_middle_initialize();
265 if (__kmp_env_consistency_check) {
267 KMP_FATAL(AffinityInvalidMask,
"kmp_destroy_affinity_mask");
270 mask_internals = (kmp_affin_mask_t *)(*mask);
271 __kmp_affinity_dispatch->deallocate_mask(mask_internals);
276 int FTN_STDCALL FTN_SET_AFFINITY_MASK_PROC(
int KMP_DEREF proc,
void **mask) {
277 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 280 if (!TCR_4(__kmp_init_middle)) {
281 __kmp_middle_initialize();
283 return __kmp_aux_set_affinity_mask_proc(KMP_DEREF proc, mask);
287 int FTN_STDCALL FTN_UNSET_AFFINITY_MASK_PROC(
int KMP_DEREF proc,
void **mask) {
288 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 291 if (!TCR_4(__kmp_init_middle)) {
292 __kmp_middle_initialize();
294 return __kmp_aux_unset_affinity_mask_proc(KMP_DEREF proc, mask);
298 int FTN_STDCALL FTN_GET_AFFINITY_MASK_PROC(
int KMP_DEREF proc,
void **mask) {
299 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 302 if (!TCR_4(__kmp_init_middle)) {
303 __kmp_middle_initialize();
305 return __kmp_aux_get_affinity_mask_proc(KMP_DEREF proc, mask);
312 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NUM_THREADS)(
int KMP_DEREF arg) {
316 __kmp_set_num_threads(KMP_DEREF arg, __kmp_entry_gtid());
321 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_THREADS)(void) {
330 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_MAX_THREADS)(void) {
336 if (!TCR_4(__kmp_init_middle)) {
337 __kmp_middle_initialize();
339 gtid = __kmp_entry_gtid();
340 thread = __kmp_threads[gtid];
343 return thread->th.th_current_task->td_icvs.nproc;
348 int FTN_STDCALL FTN_CONTROL_TOOL(
int command,
int modifier,
350 #if defined(KMP_STUB) || !OMPT_SUPPORT 353 OMPT_STORE_RETURN_ADDRESS(__kmp_entry_gtid());
354 if (!TCR_4(__kmp_init_middle)) {
357 kmp_info_t *this_thr = __kmp_threads[__kmp_entry_gtid()];
358 ompt_task_info_t *parent_task_info = OMPT_CUR_TASK_INFO(this_thr);
359 parent_task_info->frame.enter_frame = OMPT_GET_FRAME_ADDRESS(1);
360 int ret = __kmp_control_tool(command, modifier, arg);
361 parent_task_info->frame.enter_frame = 0;
367 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_THREAD_NUM)(void) {
373 #if KMP_OS_DARWIN || KMP_OS_FREEBSD || KMP_OS_NETBSD 374 gtid = __kmp_entry_gtid();
376 if (!__kmp_init_parallel ||
377 (gtid = (
int)((kmp_intptr_t)TlsGetValue(__kmp_gtid_threadprivate_key))) ==
385 #ifdef KMP_TDATA_GTID 386 if (__kmp_gtid_mode >= 3) {
387 if ((gtid = __kmp_gtid) == KMP_GTID_DNE) {
392 if (!__kmp_init_parallel ||
393 (gtid = (kmp_intptr_t)(
394 pthread_getspecific(__kmp_gtid_threadprivate_key))) == 0) {
398 #ifdef KMP_TDATA_GTID 402 #error Unknown or unsupported OS 405 return __kmp_tid_from_gtid(gtid);
409 int FTN_STDCALL FTN_GET_NUM_KNOWN_THREADS(
void) {
413 if (!__kmp_init_serial) {
414 __kmp_serial_initialize();
418 return TCR_4(__kmp_nth);
422 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_PROCS)(void) {
426 if (!TCR_4(__kmp_init_middle)) {
427 __kmp_middle_initialize();
429 return __kmp_avail_proc;
433 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NESTED)(
int KMP_DEREF flag) {
435 __kmps_set_nested(KMP_DEREF flag);
439 thread = __kmp_entry_thread();
440 __kmp_save_internal_controls(thread);
441 set__nested(thread, ((KMP_DEREF flag) ? TRUE : FALSE));
445 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NESTED)(void) {
447 return __kmps_get_nested();
450 thread = __kmp_entry_thread();
451 return get__nested(thread);
455 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_DYNAMIC)(
int KMP_DEREF flag) {
457 __kmps_set_dynamic(KMP_DEREF flag ? TRUE : FALSE);
461 thread = __kmp_entry_thread();
463 __kmp_save_internal_controls(thread);
464 set__dynamic(thread, KMP_DEREF flag ? TRUE : FALSE);
468 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_DYNAMIC)(void) {
470 return __kmps_get_dynamic();
473 thread = __kmp_entry_thread();
474 return get__dynamic(thread);
478 int FTN_STDCALL KMP_EXPAND_NAME(FTN_IN_PARALLEL)(void) {
482 kmp_info_t *th = __kmp_entry_thread();
484 if (th->th.th_teams_microtask) {
489 return (th->th.th_team->t.t_active_level ? 1 : 0);
492 return (th->th.th_root->r.r_in_parallel ? FTN_TRUE : FTN_FALSE);
496 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_SCHEDULE)(kmp_sched_t KMP_DEREF kind,
497 int KMP_DEREF modifier) {
499 __kmps_set_schedule(KMP_DEREF kind, KMP_DEREF modifier);
502 __kmp_set_schedule(__kmp_entry_gtid(), KMP_DEREF kind, KMP_DEREF modifier);
506 void FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_SCHEDULE)(kmp_sched_t *kind,
509 __kmps_get_schedule(kind, modifier);
512 __kmp_get_schedule(__kmp_entry_gtid(), kind, modifier);
516 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_MAX_ACTIVE_LEVELS)(
int KMP_DEREF arg) {
521 __kmp_set_max_active_levels(__kmp_entry_gtid(), KMP_DEREF arg);
525 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_MAX_ACTIVE_LEVELS)(void) {
530 return __kmp_get_max_active_levels(__kmp_entry_gtid());
534 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_ACTIVE_LEVEL)(void) {
539 return __kmp_entry_thread()->th.th_team->t.t_active_level;
543 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_LEVEL)(void) {
548 return __kmp_entry_thread()->th.th_team->t.t_level;
553 KMP_EXPAND_NAME(FTN_GET_ANCESTOR_THREAD_NUM)(
int KMP_DEREF level) {
555 return (KMP_DEREF level) ? (-1) : (0);
557 return __kmp_get_ancestor_thread_num(__kmp_entry_gtid(), KMP_DEREF level);
561 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_TEAM_SIZE)(
int KMP_DEREF level) {
563 return (KMP_DEREF level) ? (-1) : (1);
565 return __kmp_get_team_size(__kmp_entry_gtid(), KMP_DEREF level);
569 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_THREAD_LIMIT)(void) {
573 if (!__kmp_init_serial) {
574 __kmp_serial_initialize();
577 return __kmp_cg_max_nth;
581 int FTN_STDCALL KMP_EXPAND_NAME(FTN_IN_FINAL)(void) {
585 if (!TCR_4(__kmp_init_parallel)) {
588 return __kmp_entry_thread()->th.th_current_task->td_flags.final;
594 kmp_proc_bind_t FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PROC_BIND)(void) {
596 return __kmps_get_proc_bind();
598 return get__proc_bind(__kmp_entry_thread());
603 int FTN_STDCALL FTN_GET_NUM_PLACES(
void) {
604 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 607 if (!TCR_4(__kmp_init_middle)) {
608 __kmp_middle_initialize();
610 if (!KMP_AFFINITY_CAPABLE())
612 return __kmp_affinity_num_masks;
616 int FTN_STDCALL FTN_GET_PLACE_NUM_PROCS(
int place_num) {
617 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 622 if (!TCR_4(__kmp_init_middle)) {
623 __kmp_middle_initialize();
625 if (!KMP_AFFINITY_CAPABLE())
627 if (place_num < 0 || place_num >= (
int)__kmp_affinity_num_masks)
629 kmp_affin_mask_t *mask = KMP_CPU_INDEX(__kmp_affinity_masks, place_num);
630 KMP_CPU_SET_ITERATE(i, mask) {
631 if ((!KMP_CPU_ISSET(i, __kmp_affin_fullMask)) ||
632 (!KMP_CPU_ISSET(i, mask))) {
641 void FTN_STDCALL FTN_GET_PLACE_PROC_IDS(
int place_num,
int *ids) {
642 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 646 if (!TCR_4(__kmp_init_middle)) {
647 __kmp_middle_initialize();
649 if (!KMP_AFFINITY_CAPABLE())
651 if (place_num < 0 || place_num >= (
int)__kmp_affinity_num_masks)
653 kmp_affin_mask_t *mask = KMP_CPU_INDEX(__kmp_affinity_masks, place_num);
655 KMP_CPU_SET_ITERATE(i, mask) {
656 if ((!KMP_CPU_ISSET(i, __kmp_affin_fullMask)) ||
657 (!KMP_CPU_ISSET(i, mask))) {
665 int FTN_STDCALL FTN_GET_PLACE_NUM(
void) {
666 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 671 if (!TCR_4(__kmp_init_middle)) {
672 __kmp_middle_initialize();
674 if (!KMP_AFFINITY_CAPABLE())
676 gtid = __kmp_entry_gtid();
677 thread = __kmp_thread_from_gtid(gtid);
678 if (thread->th.th_current_place < 0)
680 return thread->th.th_current_place;
684 int FTN_STDCALL FTN_GET_PARTITION_NUM_PLACES(
void) {
685 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 688 int gtid, num_places, first_place, last_place;
690 if (!TCR_4(__kmp_init_middle)) {
691 __kmp_middle_initialize();
693 if (!KMP_AFFINITY_CAPABLE())
695 gtid = __kmp_entry_gtid();
696 thread = __kmp_thread_from_gtid(gtid);
697 first_place = thread->th.th_first_place;
698 last_place = thread->th.th_last_place;
699 if (first_place < 0 || last_place < 0)
701 if (first_place <= last_place)
702 num_places = last_place - first_place + 1;
704 num_places = __kmp_affinity_num_masks - first_place + last_place + 1;
709 void FTN_STDCALL FTN_GET_PARTITION_PLACE_NUMS(
int *place_nums) {
710 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 713 int i, gtid, place_num, first_place, last_place, start, end;
715 if (!TCR_4(__kmp_init_middle)) {
716 __kmp_middle_initialize();
718 if (!KMP_AFFINITY_CAPABLE())
720 gtid = __kmp_entry_gtid();
721 thread = __kmp_thread_from_gtid(gtid);
722 first_place = thread->th.th_first_place;
723 last_place = thread->th.th_last_place;
724 if (first_place < 0 || last_place < 0)
726 if (first_place <= last_place) {
733 for (i = 0, place_num = start; place_num <= end; ++place_num, ++i) {
734 place_nums[i] = place_num;
740 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_TEAMS)(void) {
744 kmp_info_t *thr = __kmp_entry_thread();
745 if (thr->th.th_teams_microtask) {
746 kmp_team_t *team = thr->th.th_team;
747 int tlevel = thr->th.th_teams_level;
748 int ii = team->t.t_level;
749 int dd = team->t.t_serialized;
750 int level = tlevel + 1;
751 KMP_DEBUG_ASSERT(ii >= tlevel);
753 for (dd = team->t.t_serialized; (dd > 0) && (ii > level); dd--, ii--) {
755 if (team->t.t_serialized && (!dd)) {
756 team = team->t.t_parent;
760 team = team->t.t_parent;
767 return team->t.t_parent->t.t_nproc;
775 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_TEAM_NUM)(void) {
779 kmp_info_t *thr = __kmp_entry_thread();
780 if (thr->th.th_teams_microtask) {
781 kmp_team_t *team = thr->th.th_team;
782 int tlevel = thr->th.th_teams_level;
783 int ii = team->t.t_level;
784 int dd = team->t.t_serialized;
785 int level = tlevel + 1;
786 KMP_DEBUG_ASSERT(ii >= tlevel);
788 for (dd = team->t.t_serialized; (dd > 0) && (ii > level); dd--, ii--) {
790 if (team->t.t_serialized && (!dd)) {
791 team = team->t.t_parent;
795 team = team->t.t_parent;
802 return team->t.t_master_tid;
810 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_DEFAULT_DEVICE)(void) {
811 #if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB) 814 return __kmp_entry_thread()->th.th_current_task->td_icvs.default_device;
818 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_DEFAULT_DEVICE)(
int KMP_DEREF arg) {
819 #if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB) 822 __kmp_entry_thread()->th.th_current_task->td_icvs.default_device =
827 #if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB) 829 int FTN_STDCALL FTN_GET_NUM_DEVICES(
void) {
return 0; }
831 #endif // KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB) 835 int FTN_STDCALL KMP_EXPAND_NAME(FTN_IS_INITIAL_DEVICE)(void) {
return 1; }
841 int _Offload_get_device_number(
void) KMP_WEAK_ATTRIBUTE;
843 int FTN_STDCALL KMP_EXPAND_NAME(FTN_IS_INITIAL_DEVICE)(void) {
844 if (_Offload_get_device_number) {
845 return _Offload_get_device_number() == -1;
851 #endif // ! KMP_OS_LINUX 853 #endif // OMP_40_ENABLED 855 #if OMP_45_ENABLED && defined(KMP_STUB) 858 int FTN_STDCALL FTN_GET_INITIAL_DEVICE(
void) {
return -1; }
861 void *FTN_STDCALL FTN_TARGET_ALLOC(
size_t size,
int device_num) {
return 0; }
863 void FTN_STDCALL FTN_TARGET_FREE(
void *device_ptr,
int device_num) {}
865 int FTN_STDCALL FTN_TARGET_IS_PRESENT(
void *ptr,
int device_num) {
return 0; }
867 int FTN_STDCALL FTN_TARGET_MEMCPY(
void *dst,
void *src,
size_t length,
868 size_t dst_offset,
size_t src_offset,
869 int dst_device,
int src_device) {
873 int FTN_STDCALL FTN_TARGET_MEMCPY_RECT(
874 void *dst,
void *src,
size_t element_size,
int num_dims,
875 const size_t *volume,
const size_t *dst_offsets,
const size_t *src_offsets,
876 const size_t *dst_dimensions,
const size_t *src_dimensions,
int dst_device,
881 int FTN_STDCALL FTN_TARGET_ASSOCIATE_PTR(
void *host_ptr,
void *device_ptr,
882 size_t size,
size_t device_offset,
887 int FTN_STDCALL FTN_TARGET_DISASSOCIATE_PTR(
void *host_ptr,
int device_num) {
890 #endif // OMP_45_ENABLED && defined(KMP_STUB) 893 typedef enum { UNINIT = -1, UNLOCKED, LOCKED } kmp_stub_lock_t;
896 #if KMP_USE_DYNAMIC_LOCK 897 void FTN_STDCALL FTN_INIT_LOCK_WITH_HINT(
void **user_lock,
898 uintptr_t KMP_DEREF hint) {
900 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
902 int gtid = __kmp_entry_gtid();
903 #if OMPT_SUPPORT && OMPT_OPTIONAL 904 OMPT_STORE_RETURN_ADDRESS(gtid);
906 __kmpc_init_lock_with_hint(NULL, gtid, user_lock, KMP_DEREF hint);
910 void FTN_STDCALL FTN_INIT_NEST_LOCK_WITH_HINT(
void **user_lock,
911 uintptr_t KMP_DEREF hint) {
913 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
915 int gtid = __kmp_entry_gtid();
916 #if OMPT_SUPPORT && OMPT_OPTIONAL 917 OMPT_STORE_RETURN_ADDRESS(gtid);
919 __kmpc_init_nest_lock_with_hint(NULL, gtid, user_lock, KMP_DEREF hint);
925 void FTN_STDCALL KMP_EXPAND_NAME(FTN_INIT_LOCK)(
void **user_lock) {
927 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
929 int gtid = __kmp_entry_gtid();
930 #if OMPT_SUPPORT && OMPT_OPTIONAL 931 OMPT_STORE_RETURN_ADDRESS(gtid);
933 __kmpc_init_lock(NULL, gtid, user_lock);
938 void FTN_STDCALL KMP_EXPAND_NAME(FTN_INIT_NEST_LOCK)(
void **user_lock) {
940 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
942 int gtid = __kmp_entry_gtid();
943 #if OMPT_SUPPORT && OMPT_OPTIONAL 944 OMPT_STORE_RETURN_ADDRESS(gtid);
946 __kmpc_init_nest_lock(NULL, gtid, user_lock);
950 void FTN_STDCALL KMP_EXPAND_NAME(FTN_DESTROY_LOCK)(
void **user_lock) {
952 *((kmp_stub_lock_t *)user_lock) = UNINIT;
954 int gtid = __kmp_entry_gtid();
955 #if OMPT_SUPPORT && OMPT_OPTIONAL 956 OMPT_STORE_RETURN_ADDRESS(gtid);
958 __kmpc_destroy_lock(NULL, gtid, user_lock);
962 void FTN_STDCALL KMP_EXPAND_NAME(FTN_DESTROY_NEST_LOCK)(
void **user_lock) {
964 *((kmp_stub_lock_t *)user_lock) = UNINIT;
966 int gtid = __kmp_entry_gtid();
967 #if OMPT_SUPPORT && OMPT_OPTIONAL 968 OMPT_STORE_RETURN_ADDRESS(gtid);
970 __kmpc_destroy_nest_lock(NULL, gtid, user_lock);
974 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_LOCK)(
void **user_lock) {
976 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
979 if (*((kmp_stub_lock_t *)user_lock) != UNLOCKED) {
982 *((kmp_stub_lock_t *)user_lock) = LOCKED;
984 int gtid = __kmp_entry_gtid();
985 #if OMPT_SUPPORT && OMPT_OPTIONAL 986 OMPT_STORE_RETURN_ADDRESS(gtid);
988 __kmpc_set_lock(NULL, gtid, user_lock);
992 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NEST_LOCK)(
void **user_lock) {
994 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
997 (*((
int *)user_lock))++;
999 int gtid = __kmp_entry_gtid();
1000 #if OMPT_SUPPORT && OMPT_OPTIONAL 1001 OMPT_STORE_RETURN_ADDRESS(gtid);
1003 __kmpc_set_nest_lock(NULL, gtid, user_lock);
1007 void FTN_STDCALL KMP_EXPAND_NAME(FTN_UNSET_LOCK)(
void **user_lock) {
1009 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1012 if (*((kmp_stub_lock_t *)user_lock) == UNLOCKED) {
1015 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1017 int gtid = __kmp_entry_gtid();
1018 #if OMPT_SUPPORT && OMPT_OPTIONAL 1019 OMPT_STORE_RETURN_ADDRESS(gtid);
1021 __kmpc_unset_lock(NULL, gtid, user_lock);
1025 void FTN_STDCALL KMP_EXPAND_NAME(FTN_UNSET_NEST_LOCK)(
void **user_lock) {
1027 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1030 if (*((kmp_stub_lock_t *)user_lock) == UNLOCKED) {
1033 (*((
int *)user_lock))--;
1035 int gtid = __kmp_entry_gtid();
1036 #if OMPT_SUPPORT && OMPT_OPTIONAL 1037 OMPT_STORE_RETURN_ADDRESS(gtid);
1039 __kmpc_unset_nest_lock(NULL, gtid, user_lock);
1043 int FTN_STDCALL KMP_EXPAND_NAME(FTN_TEST_LOCK)(
void **user_lock) {
1045 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1048 if (*((kmp_stub_lock_t *)user_lock) == LOCKED) {
1051 *((kmp_stub_lock_t *)user_lock) = LOCKED;
1054 int gtid = __kmp_entry_gtid();
1055 #if OMPT_SUPPORT && OMPT_OPTIONAL 1056 OMPT_STORE_RETURN_ADDRESS(gtid);
1058 return __kmpc_test_lock(NULL, gtid, user_lock);
1062 int FTN_STDCALL KMP_EXPAND_NAME(FTN_TEST_NEST_LOCK)(
void **user_lock) {
1064 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1067 return ++(*((
int *)user_lock));
1069 int gtid = __kmp_entry_gtid();
1070 #if OMPT_SUPPORT && OMPT_OPTIONAL 1071 OMPT_STORE_RETURN_ADDRESS(gtid);
1073 return __kmpc_test_nest_lock(NULL, gtid, user_lock);
1077 double FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_WTIME)(void) {
1079 return __kmps_get_wtime();
1085 if (!__kmp_init_serial) {
1086 __kmp_serial_initialize();
1089 __kmp_elapsed(&data);
1094 double FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_WTICK)(void) {
1096 return __kmps_get_wtick();
1099 if (!__kmp_init_serial) {
1100 __kmp_serial_initialize();
1102 __kmp_elapsed_tick(&data);
1109 void *FTN_STDCALL FTN_MALLOC(
size_t KMP_DEREF size) {
1111 return kmpc_malloc(KMP_DEREF size);
1114 void *FTN_STDCALL FTN_ALIGNED_MALLOC(
size_t KMP_DEREF size,
1115 size_t KMP_DEREF alignment) {
1117 return kmpc_aligned_malloc(KMP_DEREF size, KMP_DEREF alignment);
1120 void *FTN_STDCALL FTN_CALLOC(
size_t KMP_DEREF nelem,
size_t KMP_DEREF elsize) {
1122 return kmpc_calloc(KMP_DEREF nelem, KMP_DEREF elsize);
1125 void *FTN_STDCALL FTN_REALLOC(
void *KMP_DEREF ptr,
size_t KMP_DEREF size) {
1127 return kmpc_realloc(KMP_DEREF ptr, KMP_DEREF size);
1130 void FTN_STDCALL FTN_FREE(
void *KMP_DEREF ptr) {
1132 kmpc_free(KMP_DEREF ptr);
1135 void FTN_STDCALL FTN_SET_WARNINGS_ON(
void) {
1137 __kmp_generate_warnings = kmp_warnings_explicit;
1141 void FTN_STDCALL FTN_SET_WARNINGS_OFF(
void) {
1143 __kmp_generate_warnings = FALSE;
1147 void FTN_STDCALL FTN_SET_DEFAULTS(
char const *str
1148 #ifndef PASS_ARGS_BY_VALUE
1154 #ifdef PASS_ARGS_BY_VALUE 1155 int len = (int)KMP_STRLEN(str);
1157 __kmp_aux_set_defaults(str, len);
1165 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_CANCELLATION)(void) {
1170 if (!__kmp_init_serial) {
1171 __kmp_serial_initialize();
1173 return __kmp_omp_cancellation;
1177 int FTN_STDCALL FTN_GET_CANCELLATION_STATUS(
int cancel_kind) {
1181 return __kmp_get_cancellation_status(cancel_kind);
1185 #endif // OMP_40_ENABLED 1189 int FTN_STDCALL FTN_GET_MAX_TASK_PRIORITY(
void) {
1193 if (!__kmp_init_serial) {
1194 __kmp_serial_initialize();
1196 return __kmp_max_task_priority;
1202 #ifdef KMP_USE_VERSION_SYMBOLS 1224 KMP_VERSION_SYMBOL(FTN_SET_NUM_THREADS, 10,
"OMP_1.0");
1225 KMP_VERSION_SYMBOL(FTN_GET_NUM_THREADS, 10,
"OMP_1.0");
1226 KMP_VERSION_SYMBOL(FTN_GET_MAX_THREADS, 10,
"OMP_1.0");
1227 KMP_VERSION_SYMBOL(FTN_GET_THREAD_NUM, 10,
"OMP_1.0");
1228 KMP_VERSION_SYMBOL(FTN_GET_NUM_PROCS, 10,
"OMP_1.0");
1229 KMP_VERSION_SYMBOL(FTN_IN_PARALLEL, 10,
"OMP_1.0");
1230 KMP_VERSION_SYMBOL(FTN_SET_DYNAMIC, 10,
"OMP_1.0");
1231 KMP_VERSION_SYMBOL(FTN_GET_DYNAMIC, 10,
"OMP_1.0");
1232 KMP_VERSION_SYMBOL(FTN_SET_NESTED, 10,
"OMP_1.0");
1233 KMP_VERSION_SYMBOL(FTN_GET_NESTED, 10,
"OMP_1.0");
1234 KMP_VERSION_SYMBOL(FTN_INIT_LOCK, 10,
"OMP_1.0");
1235 KMP_VERSION_SYMBOL(FTN_INIT_NEST_LOCK, 10,
"OMP_1.0");
1236 KMP_VERSION_SYMBOL(FTN_DESTROY_LOCK, 10,
"OMP_1.0");
1237 KMP_VERSION_SYMBOL(FTN_DESTROY_NEST_LOCK, 10,
"OMP_1.0");
1238 KMP_VERSION_SYMBOL(FTN_SET_LOCK, 10,
"OMP_1.0");
1239 KMP_VERSION_SYMBOL(FTN_SET_NEST_LOCK, 10,
"OMP_1.0");
1240 KMP_VERSION_SYMBOL(FTN_UNSET_LOCK, 10,
"OMP_1.0");
1241 KMP_VERSION_SYMBOL(FTN_UNSET_NEST_LOCK, 10,
"OMP_1.0");
1242 KMP_VERSION_SYMBOL(FTN_TEST_LOCK, 10,
"OMP_1.0");
1243 KMP_VERSION_SYMBOL(FTN_TEST_NEST_LOCK, 10,
"OMP_1.0");
1246 KMP_VERSION_SYMBOL(FTN_GET_WTICK, 20,
"OMP_2.0");
1247 KMP_VERSION_SYMBOL(FTN_GET_WTIME, 20,
"OMP_2.0");
1250 KMP_VERSION_SYMBOL(FTN_SET_SCHEDULE, 30,
"OMP_3.0");
1251 KMP_VERSION_SYMBOL(FTN_GET_SCHEDULE, 30,
"OMP_3.0");
1252 KMP_VERSION_SYMBOL(FTN_GET_THREAD_LIMIT, 30,
"OMP_3.0");
1253 KMP_VERSION_SYMBOL(FTN_SET_MAX_ACTIVE_LEVELS, 30,
"OMP_3.0");
1254 KMP_VERSION_SYMBOL(FTN_GET_MAX_ACTIVE_LEVELS, 30,
"OMP_3.0");
1255 KMP_VERSION_SYMBOL(FTN_GET_ANCESTOR_THREAD_NUM, 30,
"OMP_3.0");
1256 KMP_VERSION_SYMBOL(FTN_GET_LEVEL, 30,
"OMP_3.0");
1257 KMP_VERSION_SYMBOL(FTN_GET_TEAM_SIZE, 30,
"OMP_3.0");
1258 KMP_VERSION_SYMBOL(FTN_GET_ACTIVE_LEVEL, 30,
"OMP_3.0");
1261 KMP_VERSION_SYMBOL(FTN_INIT_LOCK, 30,
"OMP_3.0");
1262 KMP_VERSION_SYMBOL(FTN_INIT_NEST_LOCK, 30,
"OMP_3.0");
1263 KMP_VERSION_SYMBOL(FTN_DESTROY_LOCK, 30,
"OMP_3.0");
1264 KMP_VERSION_SYMBOL(FTN_DESTROY_NEST_LOCK, 30,
"OMP_3.0");
1265 KMP_VERSION_SYMBOL(FTN_SET_LOCK, 30,
"OMP_3.0");
1266 KMP_VERSION_SYMBOL(FTN_SET_NEST_LOCK, 30,
"OMP_3.0");
1267 KMP_VERSION_SYMBOL(FTN_UNSET_LOCK, 30,
"OMP_3.0");
1268 KMP_VERSION_SYMBOL(FTN_UNSET_NEST_LOCK, 30,
"OMP_3.0");
1269 KMP_VERSION_SYMBOL(FTN_TEST_LOCK, 30,
"OMP_3.0");
1270 KMP_VERSION_SYMBOL(FTN_TEST_NEST_LOCK, 30,
"OMP_3.0");
1273 KMP_VERSION_SYMBOL(FTN_IN_FINAL, 31,
"OMP_3.1");
1277 KMP_VERSION_SYMBOL(FTN_GET_PROC_BIND, 40,
"OMP_4.0");
1278 KMP_VERSION_SYMBOL(FTN_GET_NUM_TEAMS, 40,
"OMP_4.0");
1279 KMP_VERSION_SYMBOL(FTN_GET_TEAM_NUM, 40,
"OMP_4.0");
1280 KMP_VERSION_SYMBOL(FTN_GET_CANCELLATION, 40,
"OMP_4.0");
1281 KMP_VERSION_SYMBOL(FTN_GET_DEFAULT_DEVICE, 40,
"OMP_4.0");
1282 KMP_VERSION_SYMBOL(FTN_SET_DEFAULT_DEVICE, 40,
"OMP_4.0");
1283 KMP_VERSION_SYMBOL(FTN_IS_INITIAL_DEVICE, 40,
"OMP_4.0");
1294 #endif // KMP_USE_VERSION_SYMBOLS 1298 #endif // __cplusplus KMP_EXPORT kmp_int32 __kmpc_bound_num_threads(ident_t *)