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 void FTN_STDCALL FTN_SET_DEFAULT_ALLOCATOR(
const omp_allocator_t *allocator) {
368 __kmpc_set_default_allocator(__kmp_entry_gtid(), allocator);
371 const omp_allocator_t *FTN_STDCALL FTN_GET_DEFAULT_ALLOCATOR(
void) {
375 return __kmpc_get_default_allocator(__kmp_entry_gtid());
378 void *FTN_STDCALL FTN_ALLOC(
size_t size,
const omp_allocator_t *allocator) {
382 return __kmpc_alloc(__kmp_entry_gtid(), size, allocator);
385 void FTN_STDCALL FTN_FREE(
void *ptr,
const omp_allocator_t *allocator) {
389 __kmpc_free(__kmp_entry_gtid(), ptr, allocator);
394 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_THREAD_NUM)(void) {
400 #if KMP_OS_DARWIN || KMP_OS_FREEBSD || KMP_OS_NETBSD 401 gtid = __kmp_entry_gtid();
403 if (!__kmp_init_parallel ||
404 (gtid = (
int)((kmp_intptr_t)TlsGetValue(__kmp_gtid_threadprivate_key))) ==
412 #ifdef KMP_TDATA_GTID 413 if (__kmp_gtid_mode >= 3) {
414 if ((gtid = __kmp_gtid) == KMP_GTID_DNE) {
419 if (!__kmp_init_parallel ||
420 (gtid = (kmp_intptr_t)(
421 pthread_getspecific(__kmp_gtid_threadprivate_key))) == 0) {
425 #ifdef KMP_TDATA_GTID 429 #error Unknown or unsupported OS 432 return __kmp_tid_from_gtid(gtid);
436 int FTN_STDCALL FTN_GET_NUM_KNOWN_THREADS(
void) {
440 if (!__kmp_init_serial) {
441 __kmp_serial_initialize();
445 return TCR_4(__kmp_nth);
449 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_PROCS)(void) {
453 if (!TCR_4(__kmp_init_middle)) {
454 __kmp_middle_initialize();
456 return __kmp_avail_proc;
460 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NESTED)(
int KMP_DEREF flag) {
462 __kmps_set_nested(KMP_DEREF flag);
466 thread = __kmp_entry_thread();
467 __kmp_save_internal_controls(thread);
468 set__nested(thread, ((KMP_DEREF flag) ? TRUE : FALSE));
472 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NESTED)(void) {
474 return __kmps_get_nested();
477 thread = __kmp_entry_thread();
478 return get__nested(thread);
482 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_DYNAMIC)(
int KMP_DEREF flag) {
484 __kmps_set_dynamic(KMP_DEREF flag ? TRUE : FALSE);
488 thread = __kmp_entry_thread();
490 __kmp_save_internal_controls(thread);
491 set__dynamic(thread, KMP_DEREF flag ? TRUE : FALSE);
495 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_DYNAMIC)(void) {
497 return __kmps_get_dynamic();
500 thread = __kmp_entry_thread();
501 return get__dynamic(thread);
505 int FTN_STDCALL KMP_EXPAND_NAME(FTN_IN_PARALLEL)(void) {
509 kmp_info_t *th = __kmp_entry_thread();
511 if (th->th.th_teams_microtask) {
516 return (th->th.th_team->t.t_active_level ? 1 : 0);
519 return (th->th.th_root->r.r_in_parallel ? FTN_TRUE : FTN_FALSE);
523 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_SCHEDULE)(kmp_sched_t KMP_DEREF kind,
524 int KMP_DEREF modifier) {
526 __kmps_set_schedule(KMP_DEREF kind, KMP_DEREF modifier);
529 __kmp_set_schedule(__kmp_entry_gtid(), KMP_DEREF kind, KMP_DEREF modifier);
533 void FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_SCHEDULE)(kmp_sched_t *kind,
536 __kmps_get_schedule(kind, modifier);
539 __kmp_get_schedule(__kmp_entry_gtid(), kind, modifier);
543 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_MAX_ACTIVE_LEVELS)(
int KMP_DEREF arg) {
548 __kmp_set_max_active_levels(__kmp_entry_gtid(), KMP_DEREF arg);
552 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_MAX_ACTIVE_LEVELS)(void) {
557 return __kmp_get_max_active_levels(__kmp_entry_gtid());
561 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_ACTIVE_LEVEL)(void) {
566 return __kmp_entry_thread()->th.th_team->t.t_active_level;
570 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_LEVEL)(void) {
575 return __kmp_entry_thread()->th.th_team->t.t_level;
580 KMP_EXPAND_NAME(FTN_GET_ANCESTOR_THREAD_NUM)(
int KMP_DEREF level) {
582 return (KMP_DEREF level) ? (-1) : (0);
584 return __kmp_get_ancestor_thread_num(__kmp_entry_gtid(), KMP_DEREF level);
588 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_TEAM_SIZE)(
int KMP_DEREF level) {
590 return (KMP_DEREF level) ? (-1) : (1);
592 return __kmp_get_team_size(__kmp_entry_gtid(), KMP_DEREF level);
596 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_THREAD_LIMIT)(void) {
600 if (!__kmp_init_serial) {
601 __kmp_serial_initialize();
604 return __kmp_cg_max_nth;
608 int FTN_STDCALL KMP_EXPAND_NAME(FTN_IN_FINAL)(void) {
612 if (!TCR_4(__kmp_init_parallel)) {
615 return __kmp_entry_thread()->th.th_current_task->td_flags.final;
621 kmp_proc_bind_t FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PROC_BIND)(void) {
623 return __kmps_get_proc_bind();
625 return get__proc_bind(__kmp_entry_thread());
630 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_PLACES)(void) {
631 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 634 if (!TCR_4(__kmp_init_middle)) {
635 __kmp_middle_initialize();
637 if (!KMP_AFFINITY_CAPABLE())
639 return __kmp_affinity_num_masks;
643 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_NUM_PROCS)(
int place_num) {
644 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 649 if (!TCR_4(__kmp_init_middle)) {
650 __kmp_middle_initialize();
652 if (!KMP_AFFINITY_CAPABLE())
654 if (place_num < 0 || place_num >= (
int)__kmp_affinity_num_masks)
656 kmp_affin_mask_t *mask = KMP_CPU_INDEX(__kmp_affinity_masks, place_num);
657 KMP_CPU_SET_ITERATE(i, mask) {
658 if ((!KMP_CPU_ISSET(i, __kmp_affin_fullMask)) ||
659 (!KMP_CPU_ISSET(i, mask))) {
668 void FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_PROC_IDS)(
int place_num,
670 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 674 if (!TCR_4(__kmp_init_middle)) {
675 __kmp_middle_initialize();
677 if (!KMP_AFFINITY_CAPABLE())
679 if (place_num < 0 || place_num >= (
int)__kmp_affinity_num_masks)
681 kmp_affin_mask_t *mask = KMP_CPU_INDEX(__kmp_affinity_masks, place_num);
683 KMP_CPU_SET_ITERATE(i, mask) {
684 if ((!KMP_CPU_ISSET(i, __kmp_affin_fullMask)) ||
685 (!KMP_CPU_ISSET(i, mask))) {
693 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_NUM)(void) {
694 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 699 if (!TCR_4(__kmp_init_middle)) {
700 __kmp_middle_initialize();
702 if (!KMP_AFFINITY_CAPABLE())
704 gtid = __kmp_entry_gtid();
705 thread = __kmp_thread_from_gtid(gtid);
706 if (thread->th.th_current_place < 0)
708 return thread->th.th_current_place;
712 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PARTITION_NUM_PLACES)(void) {
713 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 716 int gtid, num_places, first_place, last_place;
718 if (!TCR_4(__kmp_init_middle)) {
719 __kmp_middle_initialize();
721 if (!KMP_AFFINITY_CAPABLE())
723 if (KMP_AFFINITY_NON_PROC_BIND) {
726 gtid = __kmp_entry_gtid();
727 thread = __kmp_thread_from_gtid(gtid);
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)
733 num_places = last_place - first_place + 1;
735 num_places = __kmp_affinity_num_masks - first_place + last_place + 1;
741 FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PARTITION_PLACE_NUMS)(
int *place_nums) {
742 #if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED 745 int i, gtid, place_num, first_place, last_place, start, end;
747 if (!TCR_4(__kmp_init_middle)) {
748 __kmp_middle_initialize();
750 if (!KMP_AFFINITY_CAPABLE())
752 gtid = __kmp_entry_gtid();
753 thread = __kmp_thread_from_gtid(gtid);
754 if (KMP_AFFINITY_NON_PROC_BIND) {
755 place_nums[0] = thread->th.th_current_place;
758 first_place = thread->th.th_first_place;
759 last_place = thread->th.th_last_place;
760 if (first_place < 0 || last_place < 0)
762 if (first_place <= last_place) {
769 for (i = 0, place_num = start; place_num <= end; ++place_num, ++i) {
770 place_nums[i] = place_num;
776 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_TEAMS)(void) {
780 kmp_info_t *thr = __kmp_entry_thread();
781 if (thr->th.th_teams_microtask) {
782 kmp_team_t *team = thr->th.th_team;
783 int tlevel = thr->th.th_teams_level;
784 int ii = team->t.t_level;
785 int dd = team->t.t_serialized;
786 int level = tlevel + 1;
787 KMP_DEBUG_ASSERT(ii >= tlevel);
789 for (dd = team->t.t_serialized; (dd > 0) && (ii > level); dd--, ii--) {
791 if (team->t.t_serialized && (!dd)) {
792 team = team->t.t_parent;
796 team = team->t.t_parent;
803 return team->t.t_parent->t.t_nproc;
811 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_TEAM_NUM)(void) {
815 kmp_info_t *thr = __kmp_entry_thread();
816 if (thr->th.th_teams_microtask) {
817 kmp_team_t *team = thr->th.th_team;
818 int tlevel = thr->th.th_teams_level;
819 int ii = team->t.t_level;
820 int dd = team->t.t_serialized;
821 int level = tlevel + 1;
822 KMP_DEBUG_ASSERT(ii >= tlevel);
824 for (dd = team->t.t_serialized; (dd > 0) && (ii > level); dd--, ii--) {
826 if (team->t.t_serialized && (!dd)) {
827 team = team->t.t_parent;
831 team = team->t.t_parent;
838 return team->t.t_master_tid;
846 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_DEFAULT_DEVICE)(void) {
847 #if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB) 850 return __kmp_entry_thread()->th.th_current_task->td_icvs.default_device;
854 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_DEFAULT_DEVICE)(
int KMP_DEREF arg) {
855 #if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB) 858 __kmp_entry_thread()->th.th_current_task->td_icvs.default_device =
863 #if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB) 865 int FTN_STDCALL FTN_GET_NUM_DEVICES(
void) {
return 0; }
867 #endif // KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB) 871 int FTN_STDCALL KMP_EXPAND_NAME(FTN_IS_INITIAL_DEVICE)(void) {
return 1; }
877 int _Offload_get_device_number(
void) KMP_WEAK_ATTRIBUTE;
879 int FTN_STDCALL KMP_EXPAND_NAME(FTN_IS_INITIAL_DEVICE)(void) {
880 if (_Offload_get_device_number) {
881 return _Offload_get_device_number() == -1;
887 #endif // ! KMP_OS_LINUX 889 #endif // OMP_40_ENABLED 891 #if OMP_45_ENABLED && defined(KMP_STUB) 894 int FTN_STDCALL FTN_GET_INITIAL_DEVICE(
void) {
return -1; }
897 void *FTN_STDCALL FTN_TARGET_ALLOC(
size_t size,
int device_num) {
return 0; }
899 void FTN_STDCALL FTN_TARGET_FREE(
void *device_ptr,
int device_num) {}
901 int FTN_STDCALL FTN_TARGET_IS_PRESENT(
void *ptr,
int device_num) {
return 0; }
903 int FTN_STDCALL FTN_TARGET_MEMCPY(
void *dst,
void *src,
size_t length,
904 size_t dst_offset,
size_t src_offset,
905 int dst_device,
int src_device) {
909 int FTN_STDCALL FTN_TARGET_MEMCPY_RECT(
910 void *dst,
void *src,
size_t element_size,
int num_dims,
911 const size_t *volume,
const size_t *dst_offsets,
const size_t *src_offsets,
912 const size_t *dst_dimensions,
const size_t *src_dimensions,
int dst_device,
917 int FTN_STDCALL FTN_TARGET_ASSOCIATE_PTR(
void *host_ptr,
void *device_ptr,
918 size_t size,
size_t device_offset,
923 int FTN_STDCALL FTN_TARGET_DISASSOCIATE_PTR(
void *host_ptr,
int device_num) {
926 #endif // OMP_45_ENABLED && defined(KMP_STUB) 929 typedef enum { UNINIT = -1, UNLOCKED, LOCKED } kmp_stub_lock_t;
932 #if KMP_USE_DYNAMIC_LOCK 933 void FTN_STDCALL FTN_INIT_LOCK_WITH_HINT(
void **user_lock,
934 uintptr_t KMP_DEREF hint) {
936 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
938 int gtid = __kmp_entry_gtid();
939 #if OMPT_SUPPORT && OMPT_OPTIONAL 940 OMPT_STORE_RETURN_ADDRESS(gtid);
942 __kmpc_init_lock_with_hint(NULL, gtid, user_lock, KMP_DEREF hint);
946 void FTN_STDCALL FTN_INIT_NEST_LOCK_WITH_HINT(
void **user_lock,
947 uintptr_t KMP_DEREF hint) {
949 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
951 int gtid = __kmp_entry_gtid();
952 #if OMPT_SUPPORT && OMPT_OPTIONAL 953 OMPT_STORE_RETURN_ADDRESS(gtid);
955 __kmpc_init_nest_lock_with_hint(NULL, gtid, user_lock, KMP_DEREF hint);
961 void FTN_STDCALL KMP_EXPAND_NAME(FTN_INIT_LOCK)(
void **user_lock) {
963 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
965 int gtid = __kmp_entry_gtid();
966 #if OMPT_SUPPORT && OMPT_OPTIONAL 967 OMPT_STORE_RETURN_ADDRESS(gtid);
969 __kmpc_init_lock(NULL, gtid, user_lock);
974 void FTN_STDCALL KMP_EXPAND_NAME(FTN_INIT_NEST_LOCK)(
void **user_lock) {
976 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
978 int gtid = __kmp_entry_gtid();
979 #if OMPT_SUPPORT && OMPT_OPTIONAL 980 OMPT_STORE_RETURN_ADDRESS(gtid);
982 __kmpc_init_nest_lock(NULL, gtid, user_lock);
986 void FTN_STDCALL KMP_EXPAND_NAME(FTN_DESTROY_LOCK)(
void **user_lock) {
988 *((kmp_stub_lock_t *)user_lock) = UNINIT;
990 int gtid = __kmp_entry_gtid();
991 #if OMPT_SUPPORT && OMPT_OPTIONAL 992 OMPT_STORE_RETURN_ADDRESS(gtid);
994 __kmpc_destroy_lock(NULL, gtid, user_lock);
998 void FTN_STDCALL KMP_EXPAND_NAME(FTN_DESTROY_NEST_LOCK)(
void **user_lock) {
1000 *((kmp_stub_lock_t *)user_lock) = UNINIT;
1002 int gtid = __kmp_entry_gtid();
1003 #if OMPT_SUPPORT && OMPT_OPTIONAL 1004 OMPT_STORE_RETURN_ADDRESS(gtid);
1006 __kmpc_destroy_nest_lock(NULL, gtid, user_lock);
1010 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_LOCK)(
void **user_lock) {
1012 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1015 if (*((kmp_stub_lock_t *)user_lock) != UNLOCKED) {
1018 *((kmp_stub_lock_t *)user_lock) = LOCKED;
1020 int gtid = __kmp_entry_gtid();
1021 #if OMPT_SUPPORT && OMPT_OPTIONAL 1022 OMPT_STORE_RETURN_ADDRESS(gtid);
1024 __kmpc_set_lock(NULL, gtid, user_lock);
1028 void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NEST_LOCK)(
void **user_lock) {
1030 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1033 (*((
int *)user_lock))++;
1035 int gtid = __kmp_entry_gtid();
1036 #if OMPT_SUPPORT && OMPT_OPTIONAL 1037 OMPT_STORE_RETURN_ADDRESS(gtid);
1039 __kmpc_set_nest_lock(NULL, gtid, user_lock);
1043 void FTN_STDCALL KMP_EXPAND_NAME(FTN_UNSET_LOCK)(
void **user_lock) {
1045 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1048 if (*((kmp_stub_lock_t *)user_lock) == UNLOCKED) {
1051 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1053 int gtid = __kmp_entry_gtid();
1054 #if OMPT_SUPPORT && OMPT_OPTIONAL 1055 OMPT_STORE_RETURN_ADDRESS(gtid);
1057 __kmpc_unset_lock(NULL, gtid, user_lock);
1061 void FTN_STDCALL KMP_EXPAND_NAME(FTN_UNSET_NEST_LOCK)(
void **user_lock) {
1063 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1066 if (*((kmp_stub_lock_t *)user_lock) == UNLOCKED) {
1069 (*((
int *)user_lock))--;
1071 int gtid = __kmp_entry_gtid();
1072 #if OMPT_SUPPORT && OMPT_OPTIONAL 1073 OMPT_STORE_RETURN_ADDRESS(gtid);
1075 __kmpc_unset_nest_lock(NULL, gtid, user_lock);
1079 int FTN_STDCALL KMP_EXPAND_NAME(FTN_TEST_LOCK)(
void **user_lock) {
1081 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1084 if (*((kmp_stub_lock_t *)user_lock) == LOCKED) {
1087 *((kmp_stub_lock_t *)user_lock) = LOCKED;
1090 int gtid = __kmp_entry_gtid();
1091 #if OMPT_SUPPORT && OMPT_OPTIONAL 1092 OMPT_STORE_RETURN_ADDRESS(gtid);
1094 return __kmpc_test_lock(NULL, gtid, user_lock);
1098 int FTN_STDCALL KMP_EXPAND_NAME(FTN_TEST_NEST_LOCK)(
void **user_lock) {
1100 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1103 return ++(*((
int *)user_lock));
1105 int gtid = __kmp_entry_gtid();
1106 #if OMPT_SUPPORT && OMPT_OPTIONAL 1107 OMPT_STORE_RETURN_ADDRESS(gtid);
1109 return __kmpc_test_nest_lock(NULL, gtid, user_lock);
1113 double FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_WTIME)(void) {
1115 return __kmps_get_wtime();
1121 if (!__kmp_init_serial) {
1122 __kmp_serial_initialize();
1125 __kmp_elapsed(&data);
1130 double FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_WTICK)(void) {
1132 return __kmps_get_wtick();
1135 if (!__kmp_init_serial) {
1136 __kmp_serial_initialize();
1138 __kmp_elapsed_tick(&data);
1145 void *FTN_STDCALL FTN_MALLOC(
size_t KMP_DEREF size) {
1147 return kmpc_malloc(KMP_DEREF size);
1150 void *FTN_STDCALL FTN_ALIGNED_MALLOC(
size_t KMP_DEREF size,
1151 size_t KMP_DEREF alignment) {
1153 return kmpc_aligned_malloc(KMP_DEREF size, KMP_DEREF alignment);
1156 void *FTN_STDCALL FTN_CALLOC(
size_t KMP_DEREF nelem,
size_t KMP_DEREF elsize) {
1158 return kmpc_calloc(KMP_DEREF nelem, KMP_DEREF elsize);
1161 void *FTN_STDCALL FTN_REALLOC(
void *KMP_DEREF ptr,
size_t KMP_DEREF size) {
1163 return kmpc_realloc(KMP_DEREF ptr, KMP_DEREF size);
1166 void FTN_STDCALL FTN_KFREE(
void *KMP_DEREF ptr) {
1168 kmpc_free(KMP_DEREF ptr);
1171 void FTN_STDCALL FTN_SET_WARNINGS_ON(
void) {
1173 __kmp_generate_warnings = kmp_warnings_explicit;
1177 void FTN_STDCALL FTN_SET_WARNINGS_OFF(
void) {
1179 __kmp_generate_warnings = FALSE;
1183 void FTN_STDCALL FTN_SET_DEFAULTS(
char const *str
1184 #ifndef PASS_ARGS_BY_VALUE
1190 #ifdef PASS_ARGS_BY_VALUE 1191 int len = (int)KMP_STRLEN(str);
1193 __kmp_aux_set_defaults(str, len);
1201 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_CANCELLATION)(void) {
1206 if (!__kmp_init_serial) {
1207 __kmp_serial_initialize();
1209 return __kmp_omp_cancellation;
1213 int FTN_STDCALL FTN_GET_CANCELLATION_STATUS(
int cancel_kind) {
1217 return __kmp_get_cancellation_status(cancel_kind);
1221 #endif // OMP_40_ENABLED 1225 int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_MAX_TASK_PRIORITY)(void) {
1229 if (!__kmp_init_serial) {
1230 __kmp_serial_initialize();
1232 return __kmp_max_task_priority;
1238 #ifdef KMP_USE_VERSION_SYMBOLS 1260 KMP_VERSION_SYMBOL(FTN_SET_NUM_THREADS, 10,
"OMP_1.0");
1261 KMP_VERSION_SYMBOL(FTN_GET_NUM_THREADS, 10,
"OMP_1.0");
1262 KMP_VERSION_SYMBOL(FTN_GET_MAX_THREADS, 10,
"OMP_1.0");
1263 KMP_VERSION_SYMBOL(FTN_GET_THREAD_NUM, 10,
"OMP_1.0");
1264 KMP_VERSION_SYMBOL(FTN_GET_NUM_PROCS, 10,
"OMP_1.0");
1265 KMP_VERSION_SYMBOL(FTN_IN_PARALLEL, 10,
"OMP_1.0");
1266 KMP_VERSION_SYMBOL(FTN_SET_DYNAMIC, 10,
"OMP_1.0");
1267 KMP_VERSION_SYMBOL(FTN_GET_DYNAMIC, 10,
"OMP_1.0");
1268 KMP_VERSION_SYMBOL(FTN_SET_NESTED, 10,
"OMP_1.0");
1269 KMP_VERSION_SYMBOL(FTN_GET_NESTED, 10,
"OMP_1.0");
1270 KMP_VERSION_SYMBOL(FTN_INIT_LOCK, 10,
"OMP_1.0");
1271 KMP_VERSION_SYMBOL(FTN_INIT_NEST_LOCK, 10,
"OMP_1.0");
1272 KMP_VERSION_SYMBOL(FTN_DESTROY_LOCK, 10,
"OMP_1.0");
1273 KMP_VERSION_SYMBOL(FTN_DESTROY_NEST_LOCK, 10,
"OMP_1.0");
1274 KMP_VERSION_SYMBOL(FTN_SET_LOCK, 10,
"OMP_1.0");
1275 KMP_VERSION_SYMBOL(FTN_SET_NEST_LOCK, 10,
"OMP_1.0");
1276 KMP_VERSION_SYMBOL(FTN_UNSET_LOCK, 10,
"OMP_1.0");
1277 KMP_VERSION_SYMBOL(FTN_UNSET_NEST_LOCK, 10,
"OMP_1.0");
1278 KMP_VERSION_SYMBOL(FTN_TEST_LOCK, 10,
"OMP_1.0");
1279 KMP_VERSION_SYMBOL(FTN_TEST_NEST_LOCK, 10,
"OMP_1.0");
1282 KMP_VERSION_SYMBOL(FTN_GET_WTICK, 20,
"OMP_2.0");
1283 KMP_VERSION_SYMBOL(FTN_GET_WTIME, 20,
"OMP_2.0");
1286 KMP_VERSION_SYMBOL(FTN_SET_SCHEDULE, 30,
"OMP_3.0");
1287 KMP_VERSION_SYMBOL(FTN_GET_SCHEDULE, 30,
"OMP_3.0");
1288 KMP_VERSION_SYMBOL(FTN_GET_THREAD_LIMIT, 30,
"OMP_3.0");
1289 KMP_VERSION_SYMBOL(FTN_SET_MAX_ACTIVE_LEVELS, 30,
"OMP_3.0");
1290 KMP_VERSION_SYMBOL(FTN_GET_MAX_ACTIVE_LEVELS, 30,
"OMP_3.0");
1291 KMP_VERSION_SYMBOL(FTN_GET_ANCESTOR_THREAD_NUM, 30,
"OMP_3.0");
1292 KMP_VERSION_SYMBOL(FTN_GET_LEVEL, 30,
"OMP_3.0");
1293 KMP_VERSION_SYMBOL(FTN_GET_TEAM_SIZE, 30,
"OMP_3.0");
1294 KMP_VERSION_SYMBOL(FTN_GET_ACTIVE_LEVEL, 30,
"OMP_3.0");
1297 KMP_VERSION_SYMBOL(FTN_INIT_LOCK, 30,
"OMP_3.0");
1298 KMP_VERSION_SYMBOL(FTN_INIT_NEST_LOCK, 30,
"OMP_3.0");
1299 KMP_VERSION_SYMBOL(FTN_DESTROY_LOCK, 30,
"OMP_3.0");
1300 KMP_VERSION_SYMBOL(FTN_DESTROY_NEST_LOCK, 30,
"OMP_3.0");
1301 KMP_VERSION_SYMBOL(FTN_SET_LOCK, 30,
"OMP_3.0");
1302 KMP_VERSION_SYMBOL(FTN_SET_NEST_LOCK, 30,
"OMP_3.0");
1303 KMP_VERSION_SYMBOL(FTN_UNSET_LOCK, 30,
"OMP_3.0");
1304 KMP_VERSION_SYMBOL(FTN_UNSET_NEST_LOCK, 30,
"OMP_3.0");
1305 KMP_VERSION_SYMBOL(FTN_TEST_LOCK, 30,
"OMP_3.0");
1306 KMP_VERSION_SYMBOL(FTN_TEST_NEST_LOCK, 30,
"OMP_3.0");
1309 KMP_VERSION_SYMBOL(FTN_IN_FINAL, 31,
"OMP_3.1");
1313 KMP_VERSION_SYMBOL(FTN_GET_PROC_BIND, 40,
"OMP_4.0");
1314 KMP_VERSION_SYMBOL(FTN_GET_NUM_TEAMS, 40,
"OMP_4.0");
1315 KMP_VERSION_SYMBOL(FTN_GET_TEAM_NUM, 40,
"OMP_4.0");
1316 KMP_VERSION_SYMBOL(FTN_GET_CANCELLATION, 40,
"OMP_4.0");
1317 KMP_VERSION_SYMBOL(FTN_GET_DEFAULT_DEVICE, 40,
"OMP_4.0");
1318 KMP_VERSION_SYMBOL(FTN_SET_DEFAULT_DEVICE, 40,
"OMP_4.0");
1319 KMP_VERSION_SYMBOL(FTN_IS_INITIAL_DEVICE, 40,
"OMP_4.0");
1324 KMP_VERSION_SYMBOL(FTN_GET_MAX_TASK_PRIORITY, 45,
"OMP_4.5");
1325 KMP_VERSION_SYMBOL(FTN_GET_NUM_PLACES, 45,
"OMP_4.5");
1326 KMP_VERSION_SYMBOL(FTN_GET_PLACE_NUM_PROCS, 45,
"OMP_4.5");
1327 KMP_VERSION_SYMBOL(FTN_GET_PLACE_PROC_IDS, 45,
"OMP_4.5");
1328 KMP_VERSION_SYMBOL(FTN_GET_PLACE_NUM, 45,
"OMP_4.5");
1329 KMP_VERSION_SYMBOL(FTN_GET_PARTITION_NUM_PLACES, 45,
"OMP_4.5");
1330 KMP_VERSION_SYMBOL(FTN_GET_PARTITION_PLACE_NUMS, 45,
"OMP_4.5");
1337 #endif // KMP_USE_VERSION_SYMBOLS 1341 #endif // __cplusplus KMP_EXPORT kmp_int32 __kmpc_bound_num_threads(ident_t *)