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 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 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 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 FTN_GET_PLACE_PROC_IDS(
int place_num,
int *ids) {
641 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 645 if (!TCR_4(__kmp_init_middle)) {
646 __kmp_middle_initialize();
648 if (!KMP_AFFINITY_CAPABLE())
650 if (place_num < 0 || place_num >= (
int)__kmp_affinity_num_masks)
652 kmp_affin_mask_t *mask = KMP_CPU_INDEX(__kmp_affinity_masks, place_num);
654 KMP_CPU_SET_ITERATE(i, mask) {
655 if ((!KMP_CPU_ISSET(i, __kmp_affin_fullMask)) ||
656 (!KMP_CPU_ISSET(i, mask))) {
664 int FTN_STDCALL FTN_GET_PLACE_NUM(
void) {
665 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 670 if (!TCR_4(__kmp_init_middle)) {
671 __kmp_middle_initialize();
673 if (!KMP_AFFINITY_CAPABLE())
675 gtid = __kmp_entry_gtid();
676 thread = __kmp_thread_from_gtid(gtid);
677 if (thread->th.th_current_place < 0)
679 return thread->th.th_current_place;
683 int FTN_STDCALL FTN_GET_PARTITION_NUM_PLACES(
void) {
684 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 687 int gtid, num_places, first_place, last_place;
689 if (!TCR_4(__kmp_init_middle)) {
690 __kmp_middle_initialize();
692 if (!KMP_AFFINITY_CAPABLE())
694 if (KMP_AFFINITY_NON_PROC_BIND) {
697 gtid = __kmp_entry_gtid();
698 thread = __kmp_thread_from_gtid(gtid);
699 first_place = thread->th.th_first_place;
700 last_place = thread->th.th_last_place;
701 if (first_place < 0 || last_place < 0)
703 if (first_place <= last_place)
704 num_places = last_place - first_place + 1;
706 num_places = __kmp_affinity_num_masks - first_place + last_place + 1;
711 void FTN_STDCALL FTN_GET_PARTITION_PLACE_NUMS(
int *place_nums) {
712 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 715 int i, gtid, place_num, first_place, last_place, start, end;
717 if (!TCR_4(__kmp_init_middle)) {
718 __kmp_middle_initialize();
720 if (!KMP_AFFINITY_CAPABLE())
722 gtid = __kmp_entry_gtid();
723 thread = __kmp_thread_from_gtid(gtid);
724 if (KMP_AFFINITY_NON_PROC_BIND) {
725 place_nums[0] = thread->th.th_current_place;
728 first_place = thread->th.th_first_place;
729 last_place = thread->th.th_last_place;
730 if (first_place < 0 || last_place < 0)
732 if (first_place <= last_place) {
739 for (i = 0, place_num = start; place_num <= end; ++place_num, ++i) {
740 place_nums[i] = place_num;
746 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_TEAMS)(void) {
750 kmp_info_t *thr = __kmp_entry_thread();
751 if (thr->th.th_teams_microtask) {
752 kmp_team_t *team = thr->th.th_team;
753 int tlevel = thr->th.th_teams_level;
754 int ii = team->t.t_level;
755 int dd = team->t.t_serialized;
756 int level = tlevel + 1;
757 KMP_DEBUG_ASSERT(ii >= tlevel);
759 for (dd = team->t.t_serialized; (dd > 0) && (ii > level); dd--, ii--) {
761 if (team->t.t_serialized && (!dd)) {
762 team = team->t.t_parent;
766 team = team->t.t_parent;
773 return team->t.t_parent->t.t_nproc;
781 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_TEAM_NUM)(void) {
785 kmp_info_t *thr = __kmp_entry_thread();
786 if (thr->th.th_teams_microtask) {
787 kmp_team_t *team = thr->th.th_team;
788 int tlevel = thr->th.th_teams_level;
789 int ii = team->t.t_level;
790 int dd = team->t.t_serialized;
791 int level = tlevel + 1;
792 KMP_DEBUG_ASSERT(ii >= tlevel);
794 for (dd = team->t.t_serialized; (dd > 0) && (ii > level); dd--, ii--) {
796 if (team->t.t_serialized && (!dd)) {
797 team = team->t.t_parent;
801 team = team->t.t_parent;
808 return team->t.t_master_tid;
816 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_DEFAULT_DEVICE)(void) {
817 #if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB) 820 return __kmp_entry_thread()->th.th_current_task->td_icvs.default_device;
824 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_DEFAULT_DEVICE)(
int KMP_DEREF arg) {
825 #if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB) 828 __kmp_entry_thread()->th.th_current_task->td_icvs.default_device =
833 #if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB) 835 int FTN_STDCALL FTN_GET_NUM_DEVICES(
void) {
return 0; }
837 #endif // KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB) 841 int FTN_STDCALL KMP_EXPAND_NAME(FTN_IS_INITIAL_DEVICE)(void) {
return 1; }
847 int _Offload_get_device_number(
void) KMP_WEAK_ATTRIBUTE;
849 int FTN_STDCALL KMP_EXPAND_NAME(FTN_IS_INITIAL_DEVICE)(void) {
850 if (_Offload_get_device_number) {
851 return _Offload_get_device_number() == -1;
857 #endif // ! KMP_OS_LINUX 859 #endif // OMP_40_ENABLED 861 #if OMP_45_ENABLED && defined(KMP_STUB) 864 int FTN_STDCALL FTN_GET_INITIAL_DEVICE(
void) {
return -1; }
867 void *FTN_STDCALL FTN_TARGET_ALLOC(
size_t size,
int device_num) {
return 0; }
869 void FTN_STDCALL FTN_TARGET_FREE(
void *device_ptr,
int device_num) {}
871 int FTN_STDCALL FTN_TARGET_IS_PRESENT(
void *ptr,
int device_num) {
return 0; }
873 int FTN_STDCALL FTN_TARGET_MEMCPY(
void *dst,
void *src,
size_t length,
874 size_t dst_offset,
size_t src_offset,
875 int dst_device,
int src_device) {
879 int FTN_STDCALL FTN_TARGET_MEMCPY_RECT(
880 void *dst,
void *src,
size_t element_size,
int num_dims,
881 const size_t *volume,
const size_t *dst_offsets,
const size_t *src_offsets,
882 const size_t *dst_dimensions,
const size_t *src_dimensions,
int dst_device,
887 int FTN_STDCALL FTN_TARGET_ASSOCIATE_PTR(
void *host_ptr,
void *device_ptr,
888 size_t size,
size_t device_offset,
893 int FTN_STDCALL FTN_TARGET_DISASSOCIATE_PTR(
void *host_ptr,
int device_num) {
896 #endif // OMP_45_ENABLED && defined(KMP_STUB) 899 typedef enum { UNINIT = -1, UNLOCKED, LOCKED } kmp_stub_lock_t;
902 #if KMP_USE_DYNAMIC_LOCK 903 void FTN_STDCALL FTN_INIT_LOCK_WITH_HINT(
void **user_lock,
904 uintptr_t KMP_DEREF hint) {
906 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
908 int gtid = __kmp_entry_gtid();
909 #if OMPT_SUPPORT && OMPT_OPTIONAL 910 OMPT_STORE_RETURN_ADDRESS(gtid);
912 __kmpc_init_lock_with_hint(NULL, gtid, user_lock, KMP_DEREF hint);
916 void FTN_STDCALL FTN_INIT_NEST_LOCK_WITH_HINT(
void **user_lock,
917 uintptr_t KMP_DEREF hint) {
919 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
921 int gtid = __kmp_entry_gtid();
922 #if OMPT_SUPPORT && OMPT_OPTIONAL 923 OMPT_STORE_RETURN_ADDRESS(gtid);
925 __kmpc_init_nest_lock_with_hint(NULL, gtid, user_lock, KMP_DEREF hint);
931 void FTN_STDCALL KMP_EXPAND_NAME(FTN_INIT_LOCK)(
void **user_lock) {
933 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
935 int gtid = __kmp_entry_gtid();
936 #if OMPT_SUPPORT && OMPT_OPTIONAL 937 OMPT_STORE_RETURN_ADDRESS(gtid);
939 __kmpc_init_lock(NULL, gtid, user_lock);
944 void FTN_STDCALL KMP_EXPAND_NAME(FTN_INIT_NEST_LOCK)(
void **user_lock) {
946 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
948 int gtid = __kmp_entry_gtid();
949 #if OMPT_SUPPORT && OMPT_OPTIONAL 950 OMPT_STORE_RETURN_ADDRESS(gtid);
952 __kmpc_init_nest_lock(NULL, gtid, user_lock);
956 void FTN_STDCALL KMP_EXPAND_NAME(FTN_DESTROY_LOCK)(
void **user_lock) {
958 *((kmp_stub_lock_t *)user_lock) = UNINIT;
960 int gtid = __kmp_entry_gtid();
961 #if OMPT_SUPPORT && OMPT_OPTIONAL 962 OMPT_STORE_RETURN_ADDRESS(gtid);
964 __kmpc_destroy_lock(NULL, gtid, user_lock);
968 void FTN_STDCALL KMP_EXPAND_NAME(FTN_DESTROY_NEST_LOCK)(
void **user_lock) {
970 *((kmp_stub_lock_t *)user_lock) = UNINIT;
972 int gtid = __kmp_entry_gtid();
973 #if OMPT_SUPPORT && OMPT_OPTIONAL 974 OMPT_STORE_RETURN_ADDRESS(gtid);
976 __kmpc_destroy_nest_lock(NULL, gtid, user_lock);
980 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_LOCK)(
void **user_lock) {
982 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
985 if (*((kmp_stub_lock_t *)user_lock) != UNLOCKED) {
988 *((kmp_stub_lock_t *)user_lock) = LOCKED;
990 int gtid = __kmp_entry_gtid();
991 #if OMPT_SUPPORT && OMPT_OPTIONAL 992 OMPT_STORE_RETURN_ADDRESS(gtid);
994 __kmpc_set_lock(NULL, gtid, user_lock);
998 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NEST_LOCK)(
void **user_lock) {
1000 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1003 (*((
int *)user_lock))++;
1005 int gtid = __kmp_entry_gtid();
1006 #if OMPT_SUPPORT && OMPT_OPTIONAL 1007 OMPT_STORE_RETURN_ADDRESS(gtid);
1009 __kmpc_set_nest_lock(NULL, gtid, user_lock);
1013 void FTN_STDCALL KMP_EXPAND_NAME(FTN_UNSET_LOCK)(
void **user_lock) {
1015 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1018 if (*((kmp_stub_lock_t *)user_lock) == UNLOCKED) {
1021 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1023 int gtid = __kmp_entry_gtid();
1024 #if OMPT_SUPPORT && OMPT_OPTIONAL 1025 OMPT_STORE_RETURN_ADDRESS(gtid);
1027 __kmpc_unset_lock(NULL, gtid, user_lock);
1031 void FTN_STDCALL KMP_EXPAND_NAME(FTN_UNSET_NEST_LOCK)(
void **user_lock) {
1033 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1036 if (*((kmp_stub_lock_t *)user_lock) == UNLOCKED) {
1039 (*((
int *)user_lock))--;
1041 int gtid = __kmp_entry_gtid();
1042 #if OMPT_SUPPORT && OMPT_OPTIONAL 1043 OMPT_STORE_RETURN_ADDRESS(gtid);
1045 __kmpc_unset_nest_lock(NULL, gtid, user_lock);
1049 int FTN_STDCALL KMP_EXPAND_NAME(FTN_TEST_LOCK)(
void **user_lock) {
1051 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1054 if (*((kmp_stub_lock_t *)user_lock) == LOCKED) {
1057 *((kmp_stub_lock_t *)user_lock) = LOCKED;
1060 int gtid = __kmp_entry_gtid();
1061 #if OMPT_SUPPORT && OMPT_OPTIONAL 1062 OMPT_STORE_RETURN_ADDRESS(gtid);
1064 return __kmpc_test_lock(NULL, gtid, user_lock);
1068 int FTN_STDCALL KMP_EXPAND_NAME(FTN_TEST_NEST_LOCK)(
void **user_lock) {
1070 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1073 return ++(*((
int *)user_lock));
1075 int gtid = __kmp_entry_gtid();
1076 #if OMPT_SUPPORT && OMPT_OPTIONAL 1077 OMPT_STORE_RETURN_ADDRESS(gtid);
1079 return __kmpc_test_nest_lock(NULL, gtid, user_lock);
1083 double FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_WTIME)(void) {
1085 return __kmps_get_wtime();
1091 if (!__kmp_init_serial) {
1092 __kmp_serial_initialize();
1095 __kmp_elapsed(&data);
1100 double FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_WTICK)(void) {
1102 return __kmps_get_wtick();
1105 if (!__kmp_init_serial) {
1106 __kmp_serial_initialize();
1108 __kmp_elapsed_tick(&data);
1115 void *FTN_STDCALL FTN_MALLOC(
size_t KMP_DEREF size) {
1117 return kmpc_malloc(KMP_DEREF size);
1120 void *FTN_STDCALL FTN_ALIGNED_MALLOC(
size_t KMP_DEREF size,
1121 size_t KMP_DEREF alignment) {
1123 return kmpc_aligned_malloc(KMP_DEREF size, KMP_DEREF alignment);
1126 void *FTN_STDCALL FTN_CALLOC(
size_t KMP_DEREF nelem,
size_t KMP_DEREF elsize) {
1128 return kmpc_calloc(KMP_DEREF nelem, KMP_DEREF elsize);
1131 void *FTN_STDCALL FTN_REALLOC(
void *KMP_DEREF ptr,
size_t KMP_DEREF size) {
1133 return kmpc_realloc(KMP_DEREF ptr, KMP_DEREF size);
1136 void FTN_STDCALL FTN_FREE(
void *KMP_DEREF ptr) {
1138 kmpc_free(KMP_DEREF ptr);
1141 void FTN_STDCALL FTN_SET_WARNINGS_ON(
void) {
1143 __kmp_generate_warnings = kmp_warnings_explicit;
1147 void FTN_STDCALL FTN_SET_WARNINGS_OFF(
void) {
1149 __kmp_generate_warnings = FALSE;
1153 void FTN_STDCALL FTN_SET_DEFAULTS(
char const *str
1154 #ifndef PASS_ARGS_BY_VALUE
1160 #ifdef PASS_ARGS_BY_VALUE 1161 int len = (int)KMP_STRLEN(str);
1163 __kmp_aux_set_defaults(str, len);
1171 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_CANCELLATION)(void) {
1176 if (!__kmp_init_serial) {
1177 __kmp_serial_initialize();
1179 return __kmp_omp_cancellation;
1183 int FTN_STDCALL FTN_GET_CANCELLATION_STATUS(
int cancel_kind) {
1187 return __kmp_get_cancellation_status(cancel_kind);
1191 #endif // OMP_40_ENABLED 1195 int FTN_STDCALL FTN_GET_MAX_TASK_PRIORITY(
void) {
1199 if (!__kmp_init_serial) {
1200 __kmp_serial_initialize();
1202 return __kmp_max_task_priority;
1208 #ifdef KMP_USE_VERSION_SYMBOLS 1230 KMP_VERSION_SYMBOL(FTN_SET_NUM_THREADS, 10,
"OMP_1.0");
1231 KMP_VERSION_SYMBOL(FTN_GET_NUM_THREADS, 10,
"OMP_1.0");
1232 KMP_VERSION_SYMBOL(FTN_GET_MAX_THREADS, 10,
"OMP_1.0");
1233 KMP_VERSION_SYMBOL(FTN_GET_THREAD_NUM, 10,
"OMP_1.0");
1234 KMP_VERSION_SYMBOL(FTN_GET_NUM_PROCS, 10,
"OMP_1.0");
1235 KMP_VERSION_SYMBOL(FTN_IN_PARALLEL, 10,
"OMP_1.0");
1236 KMP_VERSION_SYMBOL(FTN_SET_DYNAMIC, 10,
"OMP_1.0");
1237 KMP_VERSION_SYMBOL(FTN_GET_DYNAMIC, 10,
"OMP_1.0");
1238 KMP_VERSION_SYMBOL(FTN_SET_NESTED, 10,
"OMP_1.0");
1239 KMP_VERSION_SYMBOL(FTN_GET_NESTED, 10,
"OMP_1.0");
1240 KMP_VERSION_SYMBOL(FTN_INIT_LOCK, 10,
"OMP_1.0");
1241 KMP_VERSION_SYMBOL(FTN_INIT_NEST_LOCK, 10,
"OMP_1.0");
1242 KMP_VERSION_SYMBOL(FTN_DESTROY_LOCK, 10,
"OMP_1.0");
1243 KMP_VERSION_SYMBOL(FTN_DESTROY_NEST_LOCK, 10,
"OMP_1.0");
1244 KMP_VERSION_SYMBOL(FTN_SET_LOCK, 10,
"OMP_1.0");
1245 KMP_VERSION_SYMBOL(FTN_SET_NEST_LOCK, 10,
"OMP_1.0");
1246 KMP_VERSION_SYMBOL(FTN_UNSET_LOCK, 10,
"OMP_1.0");
1247 KMP_VERSION_SYMBOL(FTN_UNSET_NEST_LOCK, 10,
"OMP_1.0");
1248 KMP_VERSION_SYMBOL(FTN_TEST_LOCK, 10,
"OMP_1.0");
1249 KMP_VERSION_SYMBOL(FTN_TEST_NEST_LOCK, 10,
"OMP_1.0");
1252 KMP_VERSION_SYMBOL(FTN_GET_WTICK, 20,
"OMP_2.0");
1253 KMP_VERSION_SYMBOL(FTN_GET_WTIME, 20,
"OMP_2.0");
1256 KMP_VERSION_SYMBOL(FTN_SET_SCHEDULE, 30,
"OMP_3.0");
1257 KMP_VERSION_SYMBOL(FTN_GET_SCHEDULE, 30,
"OMP_3.0");
1258 KMP_VERSION_SYMBOL(FTN_GET_THREAD_LIMIT, 30,
"OMP_3.0");
1259 KMP_VERSION_SYMBOL(FTN_SET_MAX_ACTIVE_LEVELS, 30,
"OMP_3.0");
1260 KMP_VERSION_SYMBOL(FTN_GET_MAX_ACTIVE_LEVELS, 30,
"OMP_3.0");
1261 KMP_VERSION_SYMBOL(FTN_GET_ANCESTOR_THREAD_NUM, 30,
"OMP_3.0");
1262 KMP_VERSION_SYMBOL(FTN_GET_LEVEL, 30,
"OMP_3.0");
1263 KMP_VERSION_SYMBOL(FTN_GET_TEAM_SIZE, 30,
"OMP_3.0");
1264 KMP_VERSION_SYMBOL(FTN_GET_ACTIVE_LEVEL, 30,
"OMP_3.0");
1267 KMP_VERSION_SYMBOL(FTN_INIT_LOCK, 30,
"OMP_3.0");
1268 KMP_VERSION_SYMBOL(FTN_INIT_NEST_LOCK, 30,
"OMP_3.0");
1269 KMP_VERSION_SYMBOL(FTN_DESTROY_LOCK, 30,
"OMP_3.0");
1270 KMP_VERSION_SYMBOL(FTN_DESTROY_NEST_LOCK, 30,
"OMP_3.0");
1271 KMP_VERSION_SYMBOL(FTN_SET_LOCK, 30,
"OMP_3.0");
1272 KMP_VERSION_SYMBOL(FTN_SET_NEST_LOCK, 30,
"OMP_3.0");
1273 KMP_VERSION_SYMBOL(FTN_UNSET_LOCK, 30,
"OMP_3.0");
1274 KMP_VERSION_SYMBOL(FTN_UNSET_NEST_LOCK, 30,
"OMP_3.0");
1275 KMP_VERSION_SYMBOL(FTN_TEST_LOCK, 30,
"OMP_3.0");
1276 KMP_VERSION_SYMBOL(FTN_TEST_NEST_LOCK, 30,
"OMP_3.0");
1279 KMP_VERSION_SYMBOL(FTN_IN_FINAL, 31,
"OMP_3.1");
1283 KMP_VERSION_SYMBOL(FTN_GET_PROC_BIND, 40,
"OMP_4.0");
1284 KMP_VERSION_SYMBOL(FTN_GET_NUM_TEAMS, 40,
"OMP_4.0");
1285 KMP_VERSION_SYMBOL(FTN_GET_TEAM_NUM, 40,
"OMP_4.0");
1286 KMP_VERSION_SYMBOL(FTN_GET_CANCELLATION, 40,
"OMP_4.0");
1287 KMP_VERSION_SYMBOL(FTN_GET_DEFAULT_DEVICE, 40,
"OMP_4.0");
1288 KMP_VERSION_SYMBOL(FTN_SET_DEFAULT_DEVICE, 40,
"OMP_4.0");
1289 KMP_VERSION_SYMBOL(FTN_IS_INITIAL_DEVICE, 40,
"OMP_4.0");
1300 #endif // KMP_USE_VERSION_SYMBOLS 1304 #endif // __cplusplus KMP_EXPORT kmp_int32 __kmpc_bound_num_threads(ident_t *)