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,
void *arg) {
349 #if defined(KMP_STUB) || !OMPT_SUPPORT 352 OMPT_STORE_RETURN_ADDRESS(__kmp_entry_gtid());
353 if (!TCR_4(__kmp_init_middle)) {
356 kmp_info_t *this_thr = __kmp_threads[__kmp_entry_gtid()];
357 ompt_task_info_t *parent_task_info = OMPT_CUR_TASK_INFO(this_thr);
358 parent_task_info->frame.enter_frame = OMPT_GET_FRAME_ADDRESS(1);
359 int ret = __kmp_control_tool(command, modifier, arg);
360 parent_task_info->frame.enter_frame = 0;
366 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_THREAD_NUM)(void) {
372 #if KMP_OS_DARWIN || KMP_OS_FREEBSD || KMP_OS_NETBSD || KMP_OS_HURD 373 gtid = __kmp_entry_gtid();
375 if (!__kmp_init_parallel ||
376 (gtid = (
int)((kmp_intptr_t)TlsGetValue(__kmp_gtid_threadprivate_key))) ==
384 #ifdef KMP_TDATA_GTID 385 if (__kmp_gtid_mode >= 3) {
386 if ((gtid = __kmp_gtid) == KMP_GTID_DNE) {
391 if (!__kmp_init_parallel ||
392 (gtid = (kmp_intptr_t)(
393 pthread_getspecific(__kmp_gtid_threadprivate_key))) == 0) {
397 #ifdef KMP_TDATA_GTID 401 #error Unknown or unsupported OS 404 return __kmp_tid_from_gtid(gtid);
408 int FTN_STDCALL FTN_GET_NUM_KNOWN_THREADS(
void) {
412 if (!__kmp_init_serial) {
413 __kmp_serial_initialize();
417 return TCR_4(__kmp_nth);
421 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_PROCS)(void) {
425 if (!TCR_4(__kmp_init_middle)) {
426 __kmp_middle_initialize();
428 return __kmp_avail_proc;
432 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NESTED)(
int KMP_DEREF flag) {
434 __kmps_set_nested(KMP_DEREF flag);
438 thread = __kmp_entry_thread();
439 __kmp_save_internal_controls(thread);
440 set__nested(thread, ((KMP_DEREF flag) ? TRUE : FALSE));
444 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NESTED)(void) {
446 return __kmps_get_nested();
449 thread = __kmp_entry_thread();
450 return get__nested(thread);
454 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_DYNAMIC)(
int KMP_DEREF flag) {
456 __kmps_set_dynamic(KMP_DEREF flag ? TRUE : FALSE);
460 thread = __kmp_entry_thread();
462 __kmp_save_internal_controls(thread);
463 set__dynamic(thread, KMP_DEREF flag ? TRUE : FALSE);
467 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_DYNAMIC)(void) {
469 return __kmps_get_dynamic();
472 thread = __kmp_entry_thread();
473 return get__dynamic(thread);
477 int FTN_STDCALL KMP_EXPAND_NAME(FTN_IN_PARALLEL)(void) {
481 kmp_info_t *th = __kmp_entry_thread();
483 if (th->th.th_teams_microtask) {
488 return (th->th.th_team->t.t_active_level ? 1 : 0);
491 return (th->th.th_root->r.r_in_parallel ? FTN_TRUE : FTN_FALSE);
495 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_SCHEDULE)(kmp_sched_t KMP_DEREF kind,
496 int KMP_DEREF modifier) {
498 __kmps_set_schedule(KMP_DEREF kind, KMP_DEREF modifier);
501 __kmp_set_schedule(__kmp_entry_gtid(), KMP_DEREF kind, KMP_DEREF modifier);
505 void FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_SCHEDULE)(kmp_sched_t *kind,
508 __kmps_get_schedule(kind, modifier);
511 __kmp_get_schedule(__kmp_entry_gtid(), kind, modifier);
515 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_MAX_ACTIVE_LEVELS)(
int KMP_DEREF arg) {
520 __kmp_set_max_active_levels(__kmp_entry_gtid(), KMP_DEREF arg);
524 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_MAX_ACTIVE_LEVELS)(void) {
529 return __kmp_get_max_active_levels(__kmp_entry_gtid());
533 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_ACTIVE_LEVEL)(void) {
538 return __kmp_entry_thread()->th.th_team->t.t_active_level;
542 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_LEVEL)(void) {
547 return __kmp_entry_thread()->th.th_team->t.t_level;
552 KMP_EXPAND_NAME(FTN_GET_ANCESTOR_THREAD_NUM)(
int KMP_DEREF level) {
554 return (KMP_DEREF level) ? (-1) : (0);
556 return __kmp_get_ancestor_thread_num(__kmp_entry_gtid(), KMP_DEREF level);
560 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_TEAM_SIZE)(
int KMP_DEREF level) {
562 return (KMP_DEREF level) ? (-1) : (1);
564 return __kmp_get_team_size(__kmp_entry_gtid(), KMP_DEREF level);
568 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_THREAD_LIMIT)(void) {
572 if (!__kmp_init_serial) {
573 __kmp_serial_initialize();
576 return __kmp_cg_max_nth;
580 int FTN_STDCALL KMP_EXPAND_NAME(FTN_IN_FINAL)(void) {
584 if (!TCR_4(__kmp_init_parallel)) {
587 return __kmp_entry_thread()->th.th_current_task->td_flags.final;
593 kmp_proc_bind_t FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PROC_BIND)(void) {
595 return __kmps_get_proc_bind();
597 return get__proc_bind(__kmp_entry_thread());
602 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_PLACES)(void) {
603 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 606 if (!TCR_4(__kmp_init_middle)) {
607 __kmp_middle_initialize();
609 if (!KMP_AFFINITY_CAPABLE())
611 return __kmp_affinity_num_masks;
615 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_NUM_PROCS)(
int place_num) {
616 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 621 if (!TCR_4(__kmp_init_middle)) {
622 __kmp_middle_initialize();
624 if (!KMP_AFFINITY_CAPABLE())
626 if (place_num < 0 || place_num >= (
int)__kmp_affinity_num_masks)
628 kmp_affin_mask_t *mask = KMP_CPU_INDEX(__kmp_affinity_masks, place_num);
629 KMP_CPU_SET_ITERATE(i, mask) {
630 if ((!KMP_CPU_ISSET(i, __kmp_affin_fullMask)) ||
631 (!KMP_CPU_ISSET(i, mask))) {
640 void FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_PROC_IDS)(
int place_num,
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 KMP_EXPAND_NAME(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 KMP_EXPAND_NAME(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 if (KMP_AFFINITY_NON_PROC_BIND) {
698 gtid = __kmp_entry_gtid();
699 thread = __kmp_thread_from_gtid(gtid);
700 first_place = thread->th.th_first_place;
701 last_place = thread->th.th_last_place;
702 if (first_place < 0 || last_place < 0)
704 if (first_place <= last_place)
705 num_places = last_place - first_place + 1;
707 num_places = __kmp_affinity_num_masks - first_place + last_place + 1;
713 FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PARTITION_PLACE_NUMS)(
int *place_nums) {
714 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 717 int i, gtid, place_num, first_place, last_place, start, end;
719 if (!TCR_4(__kmp_init_middle)) {
720 __kmp_middle_initialize();
722 if (!KMP_AFFINITY_CAPABLE())
724 gtid = __kmp_entry_gtid();
725 thread = __kmp_thread_from_gtid(gtid);
726 if (KMP_AFFINITY_NON_PROC_BIND) {
727 place_nums[0] = thread->th.th_current_place;
730 first_place = thread->th.th_first_place;
731 last_place = thread->th.th_last_place;
732 if (first_place < 0 || last_place < 0)
734 if (first_place <= last_place) {
741 for (i = 0, place_num = start; place_num <= end; ++place_num, ++i) {
742 place_nums[i] = place_num;
748 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_TEAMS)(void) {
752 kmp_info_t *thr = __kmp_entry_thread();
753 if (thr->th.th_teams_microtask) {
754 kmp_team_t *team = thr->th.th_team;
755 int tlevel = thr->th.th_teams_level;
756 int ii = team->t.t_level;
757 int dd = team->t.t_serialized;
758 int level = tlevel + 1;
759 KMP_DEBUG_ASSERT(ii >= tlevel);
761 for (dd = team->t.t_serialized; (dd > 0) && (ii > level); dd--, ii--) {
763 if (team->t.t_serialized && (!dd)) {
764 team = team->t.t_parent;
768 team = team->t.t_parent;
775 return team->t.t_parent->t.t_nproc;
783 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_TEAM_NUM)(void) {
787 kmp_info_t *thr = __kmp_entry_thread();
788 if (thr->th.th_teams_microtask) {
789 kmp_team_t *team = thr->th.th_team;
790 int tlevel = thr->th.th_teams_level;
791 int ii = team->t.t_level;
792 int dd = team->t.t_serialized;
793 int level = tlevel + 1;
794 KMP_DEBUG_ASSERT(ii >= tlevel);
796 for (dd = team->t.t_serialized; (dd > 0) && (ii > level); dd--, ii--) {
798 if (team->t.t_serialized && (!dd)) {
799 team = team->t.t_parent;
803 team = team->t.t_parent;
810 return team->t.t_master_tid;
818 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_DEFAULT_DEVICE)(void) {
819 #if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB) 822 return __kmp_entry_thread()->th.th_current_task->td_icvs.default_device;
826 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_DEFAULT_DEVICE)(
int KMP_DEREF arg) {
827 #if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB) 830 __kmp_entry_thread()->th.th_current_task->td_icvs.default_device =
835 #if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB) 837 int FTN_STDCALL FTN_GET_NUM_DEVICES(
void) {
return 0; }
839 #endif // KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB) 843 int FTN_STDCALL KMP_EXPAND_NAME(FTN_IS_INITIAL_DEVICE)(void) {
return 1; }
849 int _Offload_get_device_number(
void) KMP_WEAK_ATTRIBUTE;
851 int FTN_STDCALL KMP_EXPAND_NAME(FTN_IS_INITIAL_DEVICE)(void) {
852 if (_Offload_get_device_number) {
853 return _Offload_get_device_number() == -1;
859 #endif // ! KMP_OS_LINUX 861 #endif // OMP_40_ENABLED 863 #if OMP_45_ENABLED && defined(KMP_STUB) 866 int FTN_STDCALL FTN_GET_INITIAL_DEVICE(
void) {
return -1; }
869 void *FTN_STDCALL FTN_TARGET_ALLOC(
size_t size,
int device_num) {
return 0; }
871 void FTN_STDCALL FTN_TARGET_FREE(
void *device_ptr,
int device_num) {}
873 int FTN_STDCALL FTN_TARGET_IS_PRESENT(
void *ptr,
int device_num) {
return 0; }
875 int FTN_STDCALL FTN_TARGET_MEMCPY(
void *dst,
void *src,
size_t length,
876 size_t dst_offset,
size_t src_offset,
877 int dst_device,
int src_device) {
881 int FTN_STDCALL FTN_TARGET_MEMCPY_RECT(
882 void *dst,
void *src,
size_t element_size,
int num_dims,
883 const size_t *volume,
const size_t *dst_offsets,
const size_t *src_offsets,
884 const size_t *dst_dimensions,
const size_t *src_dimensions,
int dst_device,
889 int FTN_STDCALL FTN_TARGET_ASSOCIATE_PTR(
void *host_ptr,
void *device_ptr,
890 size_t size,
size_t device_offset,
895 int FTN_STDCALL FTN_TARGET_DISASSOCIATE_PTR(
void *host_ptr,
int device_num) {
898 #endif // OMP_45_ENABLED && defined(KMP_STUB) 901 typedef enum { UNINIT = -1, UNLOCKED, LOCKED } kmp_stub_lock_t;
904 #if KMP_USE_DYNAMIC_LOCK 905 void FTN_STDCALL FTN_INIT_LOCK_WITH_HINT(
void **user_lock,
906 uintptr_t KMP_DEREF hint) {
908 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
910 int gtid = __kmp_entry_gtid();
911 #if OMPT_SUPPORT && OMPT_OPTIONAL 912 OMPT_STORE_RETURN_ADDRESS(gtid);
914 __kmpc_init_lock_with_hint(NULL, gtid, user_lock, KMP_DEREF hint);
918 void FTN_STDCALL FTN_INIT_NEST_LOCK_WITH_HINT(
void **user_lock,
919 uintptr_t KMP_DEREF hint) {
921 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
923 int gtid = __kmp_entry_gtid();
924 #if OMPT_SUPPORT && OMPT_OPTIONAL 925 OMPT_STORE_RETURN_ADDRESS(gtid);
927 __kmpc_init_nest_lock_with_hint(NULL, gtid, user_lock, KMP_DEREF hint);
933 void FTN_STDCALL KMP_EXPAND_NAME(FTN_INIT_LOCK)(
void **user_lock) {
935 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
937 int gtid = __kmp_entry_gtid();
938 #if OMPT_SUPPORT && OMPT_OPTIONAL 939 OMPT_STORE_RETURN_ADDRESS(gtid);
941 __kmpc_init_lock(NULL, gtid, user_lock);
946 void FTN_STDCALL KMP_EXPAND_NAME(FTN_INIT_NEST_LOCK)(
void **user_lock) {
948 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
950 int gtid = __kmp_entry_gtid();
951 #if OMPT_SUPPORT && OMPT_OPTIONAL 952 OMPT_STORE_RETURN_ADDRESS(gtid);
954 __kmpc_init_nest_lock(NULL, gtid, user_lock);
958 void FTN_STDCALL KMP_EXPAND_NAME(FTN_DESTROY_LOCK)(
void **user_lock) {
960 *((kmp_stub_lock_t *)user_lock) = UNINIT;
962 int gtid = __kmp_entry_gtid();
963 #if OMPT_SUPPORT && OMPT_OPTIONAL 964 OMPT_STORE_RETURN_ADDRESS(gtid);
966 __kmpc_destroy_lock(NULL, gtid, user_lock);
970 void FTN_STDCALL KMP_EXPAND_NAME(FTN_DESTROY_NEST_LOCK)(
void **user_lock) {
972 *((kmp_stub_lock_t *)user_lock) = UNINIT;
974 int gtid = __kmp_entry_gtid();
975 #if OMPT_SUPPORT && OMPT_OPTIONAL 976 OMPT_STORE_RETURN_ADDRESS(gtid);
978 __kmpc_destroy_nest_lock(NULL, gtid, user_lock);
982 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_LOCK)(
void **user_lock) {
984 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
987 if (*((kmp_stub_lock_t *)user_lock) != UNLOCKED) {
990 *((kmp_stub_lock_t *)user_lock) = LOCKED;
992 int gtid = __kmp_entry_gtid();
993 #if OMPT_SUPPORT && OMPT_OPTIONAL 994 OMPT_STORE_RETURN_ADDRESS(gtid);
996 __kmpc_set_lock(NULL, gtid, user_lock);
1000 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NEST_LOCK)(
void **user_lock) {
1002 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1005 (*((
int *)user_lock))++;
1007 int gtid = __kmp_entry_gtid();
1008 #if OMPT_SUPPORT && OMPT_OPTIONAL 1009 OMPT_STORE_RETURN_ADDRESS(gtid);
1011 __kmpc_set_nest_lock(NULL, gtid, user_lock);
1015 void FTN_STDCALL KMP_EXPAND_NAME(FTN_UNSET_LOCK)(
void **user_lock) {
1017 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1020 if (*((kmp_stub_lock_t *)user_lock) == UNLOCKED) {
1023 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1025 int gtid = __kmp_entry_gtid();
1026 #if OMPT_SUPPORT && OMPT_OPTIONAL 1027 OMPT_STORE_RETURN_ADDRESS(gtid);
1029 __kmpc_unset_lock(NULL, gtid, user_lock);
1033 void FTN_STDCALL KMP_EXPAND_NAME(FTN_UNSET_NEST_LOCK)(
void **user_lock) {
1035 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1038 if (*((kmp_stub_lock_t *)user_lock) == UNLOCKED) {
1041 (*((
int *)user_lock))--;
1043 int gtid = __kmp_entry_gtid();
1044 #if OMPT_SUPPORT && OMPT_OPTIONAL 1045 OMPT_STORE_RETURN_ADDRESS(gtid);
1047 __kmpc_unset_nest_lock(NULL, gtid, user_lock);
1051 int FTN_STDCALL KMP_EXPAND_NAME(FTN_TEST_LOCK)(
void **user_lock) {
1053 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1056 if (*((kmp_stub_lock_t *)user_lock) == LOCKED) {
1059 *((kmp_stub_lock_t *)user_lock) = LOCKED;
1062 int gtid = __kmp_entry_gtid();
1063 #if OMPT_SUPPORT && OMPT_OPTIONAL 1064 OMPT_STORE_RETURN_ADDRESS(gtid);
1066 return __kmpc_test_lock(NULL, gtid, user_lock);
1070 int FTN_STDCALL KMP_EXPAND_NAME(FTN_TEST_NEST_LOCK)(
void **user_lock) {
1072 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1075 return ++(*((
int *)user_lock));
1077 int gtid = __kmp_entry_gtid();
1078 #if OMPT_SUPPORT && OMPT_OPTIONAL 1079 OMPT_STORE_RETURN_ADDRESS(gtid);
1081 return __kmpc_test_nest_lock(NULL, gtid, user_lock);
1085 double FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_WTIME)(void) {
1087 return __kmps_get_wtime();
1093 if (!__kmp_init_serial) {
1094 __kmp_serial_initialize();
1097 __kmp_elapsed(&data);
1102 double FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_WTICK)(void) {
1104 return __kmps_get_wtick();
1107 if (!__kmp_init_serial) {
1108 __kmp_serial_initialize();
1110 __kmp_elapsed_tick(&data);
1117 void *FTN_STDCALL FTN_MALLOC(
size_t KMP_DEREF size) {
1119 return kmpc_malloc(KMP_DEREF size);
1122 void *FTN_STDCALL FTN_ALIGNED_MALLOC(
size_t KMP_DEREF size,
1123 size_t KMP_DEREF alignment) {
1125 return kmpc_aligned_malloc(KMP_DEREF size, KMP_DEREF alignment);
1128 void *FTN_STDCALL FTN_CALLOC(
size_t KMP_DEREF nelem,
size_t KMP_DEREF elsize) {
1130 return kmpc_calloc(KMP_DEREF nelem, KMP_DEREF elsize);
1133 void *FTN_STDCALL FTN_REALLOC(
void *KMP_DEREF ptr,
size_t KMP_DEREF size) {
1135 return kmpc_realloc(KMP_DEREF ptr, KMP_DEREF size);
1138 void FTN_STDCALL FTN_FREE(
void *KMP_DEREF ptr) {
1140 kmpc_free(KMP_DEREF ptr);
1143 void FTN_STDCALL FTN_SET_WARNINGS_ON(
void) {
1145 __kmp_generate_warnings = kmp_warnings_explicit;
1149 void FTN_STDCALL FTN_SET_WARNINGS_OFF(
void) {
1151 __kmp_generate_warnings = FALSE;
1155 void FTN_STDCALL FTN_SET_DEFAULTS(
char const *str
1156 #ifndef PASS_ARGS_BY_VALUE
1162 #ifdef PASS_ARGS_BY_VALUE 1163 int len = (int)KMP_STRLEN(str);
1165 __kmp_aux_set_defaults(str, len);
1173 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_CANCELLATION)(void) {
1178 if (!__kmp_init_serial) {
1179 __kmp_serial_initialize();
1181 return __kmp_omp_cancellation;
1185 int FTN_STDCALL FTN_GET_CANCELLATION_STATUS(
int cancel_kind) {
1189 return __kmp_get_cancellation_status(cancel_kind);
1193 #endif // OMP_40_ENABLED 1197 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_MAX_TASK_PRIORITY)(void) {
1201 if (!__kmp_init_serial) {
1202 __kmp_serial_initialize();
1204 return __kmp_max_task_priority;
1210 #ifdef KMP_USE_VERSION_SYMBOLS 1232 KMP_VERSION_SYMBOL(FTN_SET_NUM_THREADS, 10,
"OMP_1.0");
1233 KMP_VERSION_SYMBOL(FTN_GET_NUM_THREADS, 10,
"OMP_1.0");
1234 KMP_VERSION_SYMBOL(FTN_GET_MAX_THREADS, 10,
"OMP_1.0");
1235 KMP_VERSION_SYMBOL(FTN_GET_THREAD_NUM, 10,
"OMP_1.0");
1236 KMP_VERSION_SYMBOL(FTN_GET_NUM_PROCS, 10,
"OMP_1.0");
1237 KMP_VERSION_SYMBOL(FTN_IN_PARALLEL, 10,
"OMP_1.0");
1238 KMP_VERSION_SYMBOL(FTN_SET_DYNAMIC, 10,
"OMP_1.0");
1239 KMP_VERSION_SYMBOL(FTN_GET_DYNAMIC, 10,
"OMP_1.0");
1240 KMP_VERSION_SYMBOL(FTN_SET_NESTED, 10,
"OMP_1.0");
1241 KMP_VERSION_SYMBOL(FTN_GET_NESTED, 10,
"OMP_1.0");
1242 KMP_VERSION_SYMBOL(FTN_INIT_LOCK, 10,
"OMP_1.0");
1243 KMP_VERSION_SYMBOL(FTN_INIT_NEST_LOCK, 10,
"OMP_1.0");
1244 KMP_VERSION_SYMBOL(FTN_DESTROY_LOCK, 10,
"OMP_1.0");
1245 KMP_VERSION_SYMBOL(FTN_DESTROY_NEST_LOCK, 10,
"OMP_1.0");
1246 KMP_VERSION_SYMBOL(FTN_SET_LOCK, 10,
"OMP_1.0");
1247 KMP_VERSION_SYMBOL(FTN_SET_NEST_LOCK, 10,
"OMP_1.0");
1248 KMP_VERSION_SYMBOL(FTN_UNSET_LOCK, 10,
"OMP_1.0");
1249 KMP_VERSION_SYMBOL(FTN_UNSET_NEST_LOCK, 10,
"OMP_1.0");
1250 KMP_VERSION_SYMBOL(FTN_TEST_LOCK, 10,
"OMP_1.0");
1251 KMP_VERSION_SYMBOL(FTN_TEST_NEST_LOCK, 10,
"OMP_1.0");
1254 KMP_VERSION_SYMBOL(FTN_GET_WTICK, 20,
"OMP_2.0");
1255 KMP_VERSION_SYMBOL(FTN_GET_WTIME, 20,
"OMP_2.0");
1258 KMP_VERSION_SYMBOL(FTN_SET_SCHEDULE, 30,
"OMP_3.0");
1259 KMP_VERSION_SYMBOL(FTN_GET_SCHEDULE, 30,
"OMP_3.0");
1260 KMP_VERSION_SYMBOL(FTN_GET_THREAD_LIMIT, 30,
"OMP_3.0");
1261 KMP_VERSION_SYMBOL(FTN_SET_MAX_ACTIVE_LEVELS, 30,
"OMP_3.0");
1262 KMP_VERSION_SYMBOL(FTN_GET_MAX_ACTIVE_LEVELS, 30,
"OMP_3.0");
1263 KMP_VERSION_SYMBOL(FTN_GET_ANCESTOR_THREAD_NUM, 30,
"OMP_3.0");
1264 KMP_VERSION_SYMBOL(FTN_GET_LEVEL, 30,
"OMP_3.0");
1265 KMP_VERSION_SYMBOL(FTN_GET_TEAM_SIZE, 30,
"OMP_3.0");
1266 KMP_VERSION_SYMBOL(FTN_GET_ACTIVE_LEVEL, 30,
"OMP_3.0");
1269 KMP_VERSION_SYMBOL(FTN_INIT_LOCK, 30,
"OMP_3.0");
1270 KMP_VERSION_SYMBOL(FTN_INIT_NEST_LOCK, 30,
"OMP_3.0");
1271 KMP_VERSION_SYMBOL(FTN_DESTROY_LOCK, 30,
"OMP_3.0");
1272 KMP_VERSION_SYMBOL(FTN_DESTROY_NEST_LOCK, 30,
"OMP_3.0");
1273 KMP_VERSION_SYMBOL(FTN_SET_LOCK, 30,
"OMP_3.0");
1274 KMP_VERSION_SYMBOL(FTN_SET_NEST_LOCK, 30,
"OMP_3.0");
1275 KMP_VERSION_SYMBOL(FTN_UNSET_LOCK, 30,
"OMP_3.0");
1276 KMP_VERSION_SYMBOL(FTN_UNSET_NEST_LOCK, 30,
"OMP_3.0");
1277 KMP_VERSION_SYMBOL(FTN_TEST_LOCK, 30,
"OMP_3.0");
1278 KMP_VERSION_SYMBOL(FTN_TEST_NEST_LOCK, 30,
"OMP_3.0");
1281 KMP_VERSION_SYMBOL(FTN_IN_FINAL, 31,
"OMP_3.1");
1285 KMP_VERSION_SYMBOL(FTN_GET_PROC_BIND, 40,
"OMP_4.0");
1286 KMP_VERSION_SYMBOL(FTN_GET_NUM_TEAMS, 40,
"OMP_4.0");
1287 KMP_VERSION_SYMBOL(FTN_GET_TEAM_NUM, 40,
"OMP_4.0");
1288 KMP_VERSION_SYMBOL(FTN_GET_CANCELLATION, 40,
"OMP_4.0");
1289 KMP_VERSION_SYMBOL(FTN_GET_DEFAULT_DEVICE, 40,
"OMP_4.0");
1290 KMP_VERSION_SYMBOL(FTN_SET_DEFAULT_DEVICE, 40,
"OMP_4.0");
1291 KMP_VERSION_SYMBOL(FTN_IS_INITIAL_DEVICE, 40,
"OMP_4.0");
1296 KMP_VERSION_SYMBOL(FTN_GET_MAX_TASK_PRIORITY, 45,
"OMP_4.5");
1297 KMP_VERSION_SYMBOL(FTN_GET_NUM_PLACES, 45,
"OMP_4.5");
1298 KMP_VERSION_SYMBOL(FTN_GET_PLACE_NUM_PROCS, 45,
"OMP_4.5");
1299 KMP_VERSION_SYMBOL(FTN_GET_PLACE_PROC_IDS, 45,
"OMP_4.5");
1300 KMP_VERSION_SYMBOL(FTN_GET_PLACE_NUM, 45,
"OMP_4.5");
1301 KMP_VERSION_SYMBOL(FTN_GET_PARTITION_NUM_PLACES, 45,
"OMP_4.5");
1302 KMP_VERSION_SYMBOL(FTN_GET_PARTITION_PLACE_NUMS, 45,
"OMP_4.5");
1309 #endif // KMP_USE_VERSION_SYMBOLS 1313 #endif // __cplusplus KMP_EXPORT kmp_int32 __kmpc_bound_num_threads(ident_t *)