14#error The support file kmp_ftn_entry.h should not be compiled by itself.
28#include "ompt-specific.h"
44#if (KMP_FTN_ENTRIES == KMP_FTN_PLAIN) || (KMP_FTN_ENTRIES == KMP_FTN_UPPER)
45#define PASS_ARGS_BY_VALUE 1
49#if (KMP_FTN_ENTRIES == KMP_FTN_PLAIN) || (KMP_FTN_ENTRIES == KMP_FTN_APPEND)
50#define PASS_ARGS_BY_VALUE 1
55#ifdef PASS_ARGS_BY_VALUE
57#define KMP_FTN_PASS(x) (x)
60#define KMP_FTN_PASS(x) (&(x))
63static int __kmp_ftn_int64_to_int(kmp_int64 value) {
64 if (value > (kmp_int64)INT_MAX)
66 if (value < (kmp_int64)INT_MIN)
75#if KMP_FTN_ENTRIES == KMP_FTN_APPEND
76#define KMP_EXPAND_NAME_IF_APPEND(name) KMP_EXPAND_NAME(name)
78#define KMP_EXPAND_NAME_IF_APPEND(name) name
81void FTN_STDCALL FTN_SET_STACKSIZE(
int KMP_DEREF arg) {
83 __kmps_set_stacksize(KMP_DEREF arg);
86 __kmp_aux_set_stacksize((
size_t)KMP_DEREF arg);
90void FTN_STDCALL FTN_SET_STACKSIZE_8(kmp_int64 KMP_DEREF arg) {
91 int arg32 = __kmp_ftn_int64_to_int(KMP_DEREF arg);
92 FTN_SET_STACKSIZE(KMP_FTN_PASS(arg32));
95void FTN_STDCALL FTN_SET_STACKSIZE_S(
size_t KMP_DEREF arg) {
97 __kmps_set_stacksize(KMP_DEREF arg);
100 __kmp_aux_set_stacksize(KMP_DEREF arg);
104int FTN_STDCALL FTN_GET_STACKSIZE(
void) {
106 return (
int)__kmps_get_stacksize();
108 if (!__kmp_init_serial) {
109 __kmp_serial_initialize();
111 return (
int)__kmp_stksize;
115size_t FTN_STDCALL FTN_GET_STACKSIZE_S(
void) {
117 return __kmps_get_stacksize();
119 if (!__kmp_init_serial) {
120 __kmp_serial_initialize();
122 return __kmp_stksize;
126void FTN_STDCALL FTN_SET_BLOCKTIME(
int KMP_DEREF arg) {
128 __kmps_set_blocktime(KMP_DEREF arg);
130 int gtid, tid, bt = (KMP_DEREF arg);
133 gtid = __kmp_entry_gtid();
134 tid = __kmp_tid_from_gtid(gtid);
135 thread = __kmp_thread_from_gtid(gtid);
137 __kmp_aux_convert_blocktime(&bt);
138 __kmp_aux_set_blocktime(bt, thread, tid);
142void FTN_STDCALL FTN_SET_BLOCKTIME_8(kmp_int64 KMP_DEREF arg) {
143 int arg32 = __kmp_ftn_int64_to_int(KMP_DEREF arg);
144 FTN_SET_BLOCKTIME(KMP_FTN_PASS(arg32));
148int FTN_STDCALL FTN_GET_BLOCKTIME(
void) {
150 return __kmps_get_blocktime();
155 gtid = __kmp_entry_gtid();
156 tid = __kmp_tid_from_gtid(gtid);
157 team = __kmp_threads[gtid]->th.th_team;
160 if (__kmp_dflt_blocktime == KMP_MAX_BLOCKTIME) {
161 KF_TRACE(10, (
"kmp_get_blocktime: T#%d(%d:%d), blocktime=%d%cs\n", gtid,
162 team->t.t_id, tid, KMP_MAX_BLOCKTIME, __kmp_blocktime_units));
163 return KMP_MAX_BLOCKTIME;
165#ifdef KMP_ADJUST_BLOCKTIME
166 else if (__kmp_zero_bt && !get__bt_set(team, tid)) {
167 KF_TRACE(10, (
"kmp_get_blocktime: T#%d(%d:%d), blocktime=%d%cs\n", gtid,
168 team->t.t_id, tid, 0, __kmp_blocktime_units));
173 int bt = get__blocktime(team, tid);
174 if (__kmp_blocktime_units ==
'm')
176 KF_TRACE(10, (
"kmp_get_blocktime: T#%d(%d:%d), blocktime=%d%cs\n", gtid,
177 team->t.t_id, tid, bt, __kmp_blocktime_units));
183void FTN_STDCALL FTN_SET_LIBRARY_SERIAL(
void) {
185 __kmps_set_library(library_serial);
188 __kmp_user_set_library(library_serial);
192void FTN_STDCALL FTN_SET_LIBRARY_TURNAROUND(
void) {
194 __kmps_set_library(library_turnaround);
197 __kmp_user_set_library(library_turnaround);
201void FTN_STDCALL FTN_SET_LIBRARY_THROUGHPUT(
void) {
203 __kmps_set_library(library_throughput);
206 __kmp_user_set_library(library_throughput);
210void FTN_STDCALL FTN_SET_LIBRARY(
int KMP_DEREF arg) {
212 __kmps_set_library(KMP_DEREF arg);
214 enum library_type lib;
215 lib = (
enum library_type)KMP_DEREF arg;
217 __kmp_user_set_library(lib);
221void FTN_STDCALL FTN_SET_LIBRARY_8(kmp_int64 KMP_DEREF arg) {
222 int arg32 = __kmp_ftn_int64_to_int(KMP_DEREF arg);
223 FTN_SET_LIBRARY(KMP_FTN_PASS(arg32));
226int FTN_STDCALL FTN_GET_LIBRARY(
void) {
228 return __kmps_get_library();
230 if (!__kmp_init_serial) {
231 __kmp_serial_initialize();
233 return ((
int)__kmp_library);
237void FTN_STDCALL FTN_SET_DISP_NUM_BUFFERS(
int KMP_DEREF arg) {
243 int num_buffers = KMP_DEREF arg;
244 if (__kmp_init_serial == FALSE && num_buffers >= KMP_MIN_DISP_NUM_BUFF &&
245 num_buffers <= KMP_MAX_DISP_NUM_BUFF) {
246 __kmp_dispatch_num_buffers = num_buffers;
251void FTN_STDCALL FTN_SET_DISP_NUM_BUFFERS_8(kmp_int64 KMP_DEREF arg) {
252 int arg32 = __kmp_ftn_int64_to_int(KMP_DEREF arg);
253 FTN_SET_DISP_NUM_BUFFERS(KMP_FTN_PASS(arg32));
256int FTN_STDCALL FTN_SET_AFFINITY(
void **mask) {
257#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
260 if (!TCR_4(__kmp_init_middle)) {
261 __kmp_middle_initialize();
263 __kmp_assign_root_init_mask();
264 return __kmp_aux_set_affinity(mask);
268int FTN_STDCALL FTN_GET_AFFINITY(
void **mask) {
269#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
272 if (!TCR_4(__kmp_init_middle)) {
273 __kmp_middle_initialize();
275 __kmp_assign_root_init_mask();
276 int gtid = __kmp_get_gtid();
277 if (__kmp_threads[gtid]->th.th_team->t.t_level == 0 &&
278 __kmp_affinity.flags.reset) {
279 __kmp_reset_root_init_mask(gtid);
281 return __kmp_aux_get_affinity(mask);
285int FTN_STDCALL FTN_GET_AFFINITY_MAX_PROC(
void) {
286#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
290 if (!TCR_4(__kmp_init_middle)) {
291 __kmp_middle_initialize();
293 __kmp_assign_root_init_mask();
294 return __kmp_aux_get_affinity_max_proc();
298void FTN_STDCALL FTN_CREATE_AFFINITY_MASK(
void **mask) {
299#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
303 kmp_affin_mask_t *mask_internals;
304 if (!TCR_4(__kmp_init_middle)) {
305 __kmp_middle_initialize();
307 __kmp_assign_root_init_mask();
308 mask_internals = __kmp_affinity_dispatch->allocate_mask();
309 KMP_CPU_ZERO(mask_internals);
310 *mask = mask_internals;
314void FTN_STDCALL FTN_DESTROY_AFFINITY_MASK(
void **mask) {
315#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
319 kmp_affin_mask_t *mask_internals;
320 if (!TCR_4(__kmp_init_middle)) {
321 __kmp_middle_initialize();
323 __kmp_assign_root_init_mask();
324 if (__kmp_env_consistency_check) {
326 KMP_FATAL(AffinityInvalidMask,
"kmp_destroy_affinity_mask");
329 mask_internals = (kmp_affin_mask_t *)(*mask);
330 __kmp_affinity_dispatch->deallocate_mask(mask_internals);
335int FTN_STDCALL FTN_SET_AFFINITY_MASK_PROC(
int KMP_DEREF proc,
void **mask) {
336#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
339 if (!TCR_4(__kmp_init_middle)) {
340 __kmp_middle_initialize();
342 __kmp_assign_root_init_mask();
343 return __kmp_aux_set_affinity_mask_proc(KMP_DEREF proc, mask);
347int FTN_STDCALL FTN_SET_AFFINITY_MASK_PROC_8(kmp_int64 KMP_DEREF proc,
349 int proc32 = __kmp_ftn_int64_to_int(KMP_DEREF proc);
350 return FTN_SET_AFFINITY_MASK_PROC(KMP_FTN_PASS(proc32), mask);
353int FTN_STDCALL FTN_UNSET_AFFINITY_MASK_PROC(
int KMP_DEREF proc,
void **mask) {
354#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
357 if (!TCR_4(__kmp_init_middle)) {
358 __kmp_middle_initialize();
360 __kmp_assign_root_init_mask();
361 return __kmp_aux_unset_affinity_mask_proc(KMP_DEREF proc, mask);
365int FTN_STDCALL FTN_UNSET_AFFINITY_MASK_PROC_8(kmp_int64 KMP_DEREF proc,
367 int proc32 = __kmp_ftn_int64_to_int(KMP_DEREF proc);
368 return FTN_UNSET_AFFINITY_MASK_PROC(KMP_FTN_PASS(proc32), mask);
371int FTN_STDCALL FTN_GET_AFFINITY_MASK_PROC(
int KMP_DEREF proc,
void **mask) {
372#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
375 if (!TCR_4(__kmp_init_middle)) {
376 __kmp_middle_initialize();
378 __kmp_assign_root_init_mask();
379 return __kmp_aux_get_affinity_mask_proc(KMP_DEREF proc, mask);
383int FTN_STDCALL FTN_GET_AFFINITY_MASK_PROC_8(kmp_int64 KMP_DEREF proc,
385 int proc32 = __kmp_ftn_int64_to_int(KMP_DEREF proc);
386 return FTN_GET_AFFINITY_MASK_PROC(KMP_FTN_PASS(proc32), mask);
392void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NUM_THREADS)(
int KMP_DEREF arg) {
396 __kmp_set_num_threads(KMP_DEREF arg, __kmp_entry_gtid());
401void FTN_STDCALL FTN_SET_NUM_THREADS_8(kmp_int64 KMP_DEREF arg) {
402 int arg32 = __kmp_ftn_int64_to_int(KMP_DEREF arg);
403 KMP_EXPAND_NAME(FTN_SET_NUM_THREADS)(KMP_FTN_PASS(arg32));
407int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_THREADS)(void) {
416int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_MAX_THREADS)(void) {
422 if (!TCR_4(__kmp_init_middle)) {
423 __kmp_middle_initialize();
425 gtid = __kmp_entry_gtid();
426 thread = __kmp_threads[gtid];
427#if KMP_AFFINITY_SUPPORTED
428 if (thread->th.th_team->t.t_level == 0 && !__kmp_affinity.flags.reset) {
429 __kmp_assign_root_init_mask();
434 return thread->th.th_current_task->td_icvs.nproc;
438int FTN_STDCALL FTN_CONTROL_TOOL(
int command,
int modifier,
void *arg) {
439#if defined(KMP_STUB) || !OMPT_SUPPORT
442 OMPT_STORE_RETURN_ADDRESS(__kmp_entry_gtid());
443 if (!TCR_4(__kmp_init_middle)) {
444 __kmp_middle_initialize();
446 kmp_info_t *this_thr = __kmp_threads[__kmp_entry_gtid()];
447 ompt_task_info_t *parent_task_info = OMPT_CUR_TASK_INFO(this_thr);
448 parent_task_info->frame.enter_frame.ptr = OMPT_GET_FRAME_ADDRESS(0);
449 int ret = __kmp_control_tool(command, modifier, arg);
450 parent_task_info->frame.enter_frame.ptr = 0;
456omp_allocator_handle_t FTN_STDCALL
457FTN_INIT_ALLOCATOR(omp_memspace_handle_t KMP_DEREF m,
int KMP_DEREF ntraits,
458 omp_alloctrait_t tr[]) {
462 return __kmpc_init_allocator(__kmp_entry_gtid(), KMP_DEREF m,
463 KMP_DEREF ntraits, tr);
467void FTN_STDCALL FTN_DESTROY_ALLOCATOR(omp_allocator_handle_t al) {
469 __kmpc_destroy_allocator(__kmp_entry_gtid(), al);
472void FTN_STDCALL FTN_SET_DEFAULT_ALLOCATOR(omp_allocator_handle_t al) {
474 __kmpc_set_default_allocator(__kmp_entry_gtid(), al);
477omp_allocator_handle_t FTN_STDCALL FTN_GET_DEFAULT_ALLOCATOR(
void) {
481 return __kmpc_get_default_allocator(__kmp_entry_gtid());
486omp_memspace_handle_t FTN_STDCALL
487FTN_GET_DEVICES_MEMSPACE(
int KMP_DEREF ndevs,
const int *devs,
488 omp_memspace_handle_t KMP_DEREF memspace) {
492 return __kmp_get_devices_memspace(KMP_DEREF ndevs, devs, KMP_DEREF memspace,
497omp_memspace_handle_t FTN_STDCALL FTN_GET_DEVICE_MEMSPACE(
498 int KMP_DEREF dev, omp_memspace_handle_t KMP_DEREF memspace) {
502 int dev_num = KMP_DEREF dev;
503 return __kmp_get_devices_memspace(1, &dev_num, KMP_DEREF memspace, 0);
507omp_memspace_handle_t FTN_STDCALL
508FTN_GET_DEVICES_AND_HOST_MEMSPACE(
int KMP_DEREF ndevs,
const int *devs,
509 omp_memspace_handle_t KMP_DEREF memspace) {
513 return __kmp_get_devices_memspace(KMP_DEREF ndevs, devs, KMP_DEREF memspace,
518omp_memspace_handle_t FTN_STDCALL FTN_GET_DEVICE_AND_HOST_MEMSPACE(
519 int KMP_DEREF dev, omp_memspace_handle_t KMP_DEREF memspace) {
523 int dev_num = KMP_DEREF dev;
524 return __kmp_get_devices_memspace(1, &dev_num, KMP_DEREF memspace, 1);
528omp_memspace_handle_t FTN_STDCALL
529FTN_GET_DEVICES_ALL_MEMSPACE(omp_memspace_handle_t KMP_DEREF memspace) {
533 return __kmp_get_devices_memspace(0, NULL, KMP_DEREF memspace, 1);
537omp_allocator_handle_t FTN_STDCALL
538FTN_GET_DEVICES_ALLOCATOR(
int KMP_DEREF ndevs,
const int *devs,
539 omp_allocator_handle_t KMP_DEREF memspace) {
543 return __kmp_get_devices_allocator(KMP_DEREF ndevs, devs, KMP_DEREF memspace,
548omp_allocator_handle_t FTN_STDCALL FTN_GET_DEVICE_ALLOCATOR(
549 int KMP_DEREF dev, omp_allocator_handle_t KMP_DEREF memspace) {
553 int dev_num = KMP_DEREF dev;
554 return __kmp_get_devices_allocator(1, &dev_num, KMP_DEREF memspace, 0);
558omp_allocator_handle_t FTN_STDCALL
559FTN_GET_DEVICES_AND_HOST_ALLOCATOR(
int KMP_DEREF ndevs,
const int *devs,
560 omp_allocator_handle_t KMP_DEREF memspace) {
564 return __kmp_get_devices_allocator(KMP_DEREF ndevs, devs, KMP_DEREF memspace,
569omp_allocator_handle_t FTN_STDCALL FTN_GET_DEVICE_AND_HOST_ALLOCATOR(
570 int KMP_DEREF dev, omp_allocator_handle_t KMP_DEREF memspace) {
574 int dev_num = KMP_DEREF dev;
575 return __kmp_get_devices_allocator(1, &dev_num, KMP_DEREF memspace, 1);
579omp_allocator_handle_t FTN_STDCALL
580FTN_GET_DEVICES_ALL_ALLOCATOR(omp_allocator_handle_t KMP_DEREF memspace) {
584 return __kmp_get_devices_allocator(0, NULL, KMP_DEREF memspace, 1);
589FTN_GET_MEMSPACE_NUM_RESOURCES(omp_memspace_handle_t KMP_DEREF memspace) {
593 return __kmp_get_memspace_num_resources(KMP_DEREF memspace);
597omp_memspace_handle_t FTN_STDCALL
598FTN_GET_SUBMEMSPACE(omp_memspace_handle_t KMP_DEREF memspace,
599 int KMP_DEREF num_resources,
int *resources) {
603 return __kmp_get_submemspace(KMP_DEREF memspace, KMP_DEREF num_resources,
610static void __kmp_fortran_strncpy_truncate(
char *buffer,
size_t buf_size,
611 char const *csrc,
size_t csrc_size) {
612 size_t capped_src_size = csrc_size;
613 if (csrc_size >= buf_size) {
614 capped_src_size = buf_size - 1;
616 KMP_STRNCPY_S(buffer, buf_size, csrc, capped_src_size);
617 if (csrc_size >= buf_size) {
618 KMP_DEBUG_ASSERT(buffer[buf_size - 1] ==
'\0');
619 buffer[buf_size - 1] = csrc[buf_size - 1];
621 for (
size_t i = csrc_size; i < buf_size; ++i)
627class ConvertedString {
631 ConvertedString(
char const *fortran_str,
size_t size) {
632 buf = (
char *)KMP_INTERNAL_MALLOC(size + 1);
633 KMP_STRNCPY_S(buf, size + 1, fortran_str, size);
636 ~ConvertedString() { KMP_INTERNAL_FREE(buf); }
637 const char *get()
const {
return buf; }
645void FTN_STDCALL KMP_EXPAND_NAME_IF_APPEND(FTN_SET_AFFINITY_FORMAT)(
646 char const *format,
size_t size) {
650 if (!__kmp_init_serial) {
651 __kmp_serial_initialize();
653 ConvertedString cformat(format, size);
656 __kmp_strncpy_truncate(__kmp_affinity_format, KMP_AFFINITY_FORMAT_SIZE,
657 cformat.get(), KMP_STRLEN(cformat.get()));
667size_t FTN_STDCALL KMP_EXPAND_NAME_IF_APPEND(FTN_GET_AFFINITY_FORMAT)(
668 char *buffer,
size_t size) {
673 if (!__kmp_init_serial) {
674 __kmp_serial_initialize();
676 format_size = KMP_STRLEN(__kmp_affinity_format);
677 if (buffer && size) {
678 __kmp_fortran_strncpy_truncate(buffer, size, __kmp_affinity_format,
690void FTN_STDCALL KMP_EXPAND_NAME_IF_APPEND(FTN_DISPLAY_AFFINITY)(
691 char const *format,
size_t size) {
696 if (!TCR_4(__kmp_init_middle)) {
697 __kmp_middle_initialize();
699 __kmp_assign_root_init_mask();
700 gtid = __kmp_get_gtid();
701#if KMP_AFFINITY_SUPPORTED
702 if (__kmp_threads[gtid]->th.th_team->t.t_level == 0 &&
703 __kmp_affinity.flags.reset) {
704 __kmp_reset_root_init_mask(gtid);
707 ConvertedString cformat(format, size);
708 __kmp_aux_display_affinity(gtid, cformat.get());
722size_t FTN_STDCALL KMP_EXPAND_NAME_IF_APPEND(FTN_CAPTURE_AFFINITY)(
723 char *buffer,
char const *format,
size_t buf_size,
size_t for_size) {
729 kmp_str_buf_t capture_buf;
730 if (!TCR_4(__kmp_init_middle)) {
731 __kmp_middle_initialize();
733 __kmp_assign_root_init_mask();
734 gtid = __kmp_get_gtid();
735#if KMP_AFFINITY_SUPPORTED
736 if (__kmp_threads[gtid]->th.th_team->t.t_level == 0 &&
737 __kmp_affinity.flags.reset) {
738 __kmp_reset_root_init_mask(gtid);
741 __kmp_str_buf_init(&capture_buf);
742 ConvertedString cformat(format, for_size);
743 num_required = __kmp_aux_capture_affinity(gtid, cformat.get(), &capture_buf);
744 if (buffer && buf_size) {
745 __kmp_fortran_strncpy_truncate(buffer, buf_size, capture_buf.str,
748 __kmp_str_buf_free(&capture_buf);
753int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_THREAD_NUM)(void) {
759#if KMP_OS_DARWIN || KMP_OS_DRAGONFLY || KMP_OS_FREEBSD || KMP_OS_NETBSD || \
760 KMP_OS_OPENBSD || KMP_OS_HAIKU || KMP_OS_HURD || KMP_OS_SOLARIS || \
762 gtid = __kmp_entry_gtid();
764 if (!__kmp_init_parallel ||
765 (gtid = (
int)((kmp_intptr_t)TlsGetValue(__kmp_gtid_threadprivate_key))) ==
772#elif KMP_OS_LINUX || KMP_OS_WASI
774 if (__kmp_gtid_mode >= 3) {
775 if ((gtid = __kmp_gtid) == KMP_GTID_DNE) {
780 if (!__kmp_init_parallel ||
781 (gtid = (
int)((kmp_intptr_t)(
782 pthread_getspecific(__kmp_gtid_threadprivate_key)))) == 0) {
790#error Unknown or unsupported OS
793 return __kmp_tid_from_gtid(gtid);
797int FTN_STDCALL FTN_GET_NUM_KNOWN_THREADS(
void) {
801 if (!__kmp_init_serial) {
802 __kmp_serial_initialize();
806 return TCR_4(__kmp_nth);
810int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_PROCS)(void) {
814 if (!TCR_4(__kmp_init_middle)) {
815 __kmp_middle_initialize();
817#if KMP_AFFINITY_SUPPORTED
818 if (!__kmp_affinity.flags.reset) {
820 int gtid = __kmp_entry_gtid();
821 kmp_info_t *thread = __kmp_threads[gtid];
822 if (thread->th.th_team->t.t_level == 0) {
823 __kmp_assign_root_init_mask();
827 return __kmp_avail_proc;
831void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NESTED)(
int KMP_DEREF flag) {
833 __kmps_set_nested(KMP_DEREF flag);
837 thread = __kmp_entry_thread();
838 KMP_INFORM(APIDeprecated,
"omp_set_nested",
"omp_set_max_active_levels");
839 __kmp_save_internal_controls(thread);
841 int max_active_levels = get__max_active_levels(thread);
842 if (max_active_levels == 1)
843 max_active_levels = KMP_MAX_ACTIVE_LEVELS_LIMIT;
844 set__max_active_levels(thread, (KMP_DEREF flag) ? max_active_levels : 1);
848int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NESTED)(void) {
850 return __kmps_get_nested();
853 thread = __kmp_entry_thread();
854 KMP_INFORM(APIDeprecated,
"omp_get_nested",
"omp_get_max_active_levels");
855 return get__max_active_levels(thread) > 1;
859void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_DYNAMIC)(
int KMP_DEREF flag) {
861 __kmps_set_dynamic(KMP_DEREF flag ? TRUE : FALSE);
865 thread = __kmp_entry_thread();
867 __kmp_save_internal_controls(thread);
868 set__dynamic(thread, KMP_DEREF flag ?
true : false);
872int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_DYNAMIC)(void) {
874 return __kmps_get_dynamic();
877 thread = __kmp_entry_thread();
878 return get__dynamic(thread);
882int FTN_STDCALL KMP_EXPAND_NAME(FTN_IN_PARALLEL)(void) {
886 kmp_info_t *th = __kmp_entry_thread();
887 if (th->th.th_teams_microtask) {
892 return (th->th.th_team->t.t_active_level ? 1 : 0);
894 return (th->th.th_root->r.r_in_parallel ? FTN_TRUE : FTN_FALSE);
898void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_SCHEDULE)(kmp_sched_t KMP_DEREF kind,
899 int KMP_DEREF modifier) {
901 __kmps_set_schedule(KMP_DEREF kind, KMP_DEREF modifier);
904 __kmp_set_schedule(__kmp_entry_gtid(), KMP_DEREF kind, KMP_DEREF modifier);
908void FTN_STDCALL FTN_SET_SCHEDULE_8(kmp_sched_t KMP_DEREF kind,
909 kmp_int64 KMP_DEREF modifier) {
910 int modifier32 = __kmp_ftn_int64_to_int(KMP_DEREF modifier);
911 KMP_EXPAND_NAME(FTN_SET_SCHEDULE)(kind, KMP_FTN_PASS(modifier32));
914void FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_SCHEDULE)(kmp_sched_t *kind,
917 __kmps_get_schedule(kind, modifier);
920 __kmp_get_schedule(__kmp_entry_gtid(), kind, modifier);
924void FTN_STDCALL FTN_GET_SCHEDULE_8(kmp_sched_t *kind, kmp_int64 *modifier) {
926 KMP_EXPAND_NAME(FTN_GET_SCHEDULE)(kind, &modifier32);
927 *modifier = modifier32;
930void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_MAX_ACTIVE_LEVELS)(
int KMP_DEREF arg) {
935 __kmp_set_max_active_levels(__kmp_entry_gtid(), KMP_DEREF arg);
939void FTN_STDCALL FTN_SET_MAX_ACTIVE_LEVELS_8(kmp_int64 KMP_DEREF arg) {
940 int arg32 = __kmp_ftn_int64_to_int(KMP_DEREF arg);
941 KMP_EXPAND_NAME(FTN_SET_MAX_ACTIVE_LEVELS)(KMP_FTN_PASS(arg32));
944int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_MAX_ACTIVE_LEVELS)(void) {
949 if (!TCR_4(__kmp_init_middle)) {
950 __kmp_middle_initialize();
952 return __kmp_get_max_active_levels(__kmp_entry_gtid());
956int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_ACTIVE_LEVEL)(void) {
961 return __kmp_entry_thread()->th.th_team->t.t_active_level;
965int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_LEVEL)(void) {
970 return __kmp_entry_thread()->th.th_team->t.t_level;
975KMP_EXPAND_NAME(FTN_GET_ANCESTOR_THREAD_NUM)(
int KMP_DEREF level) {
977 return (KMP_DEREF level) ? (-1) : (0);
979 return __kmp_get_ancestor_thread_num(__kmp_entry_gtid(), KMP_DEREF level);
983int FTN_STDCALL FTN_GET_ANCESTOR_THREAD_NUM_8(kmp_int64 KMP_DEREF level) {
984 int level32 = __kmp_ftn_int64_to_int(KMP_DEREF level);
985 return KMP_EXPAND_NAME(FTN_GET_ANCESTOR_THREAD_NUM)(KMP_FTN_PASS(level32));
988int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_TEAM_SIZE)(
int KMP_DEREF level) {
990 return (KMP_DEREF level) ? (-1) : (1);
992 return __kmp_get_team_size(__kmp_entry_gtid(), KMP_DEREF level);
996int FTN_STDCALL FTN_GET_TEAM_SIZE_8(kmp_int64 KMP_DEREF level) {
997 int level32 = __kmp_ftn_int64_to_int(KMP_DEREF level);
998 return KMP_EXPAND_NAME(FTN_GET_TEAM_SIZE)(KMP_FTN_PASS(level32));
1001int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_THREAD_LIMIT)(void) {
1007 if (!__kmp_init_serial) {
1008 __kmp_serial_initialize();
1011 gtid = __kmp_entry_gtid();
1012 thread = __kmp_threads[gtid];
1015 if (
int thread_limit = thread->th.th_current_task->td_icvs.task_thread_limit)
1016 return thread_limit;
1017 return thread->th.th_current_task->td_icvs.thread_limit;
1021int FTN_STDCALL KMP_EXPAND_NAME(FTN_IN_FINAL)(void) {
1025 if (!TCR_4(__kmp_init_parallel)) {
1028 return __kmp_entry_thread()->th.th_current_task->td_flags.final;
1032kmp_proc_bind_t FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PROC_BIND)(void) {
1034 return __kmps_get_proc_bind();
1036 return get__proc_bind(__kmp_entry_thread());
1040int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_PLACES)(void) {
1041#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
1044 if (!TCR_4(__kmp_init_middle)) {
1045 __kmp_middle_initialize();
1047 if (!KMP_AFFINITY_CAPABLE())
1049 if (!__kmp_affinity.flags.reset) {
1051 int gtid = __kmp_entry_gtid();
1052 kmp_info_t *thread = __kmp_threads[gtid];
1053 if (thread->th.th_team->t.t_level == 0) {
1054 __kmp_assign_root_init_mask();
1057 return __kmp_affinity.num_masks;
1061int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_NUM_PROCS)(
int place_num) {
1062#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
1067 if (!TCR_4(__kmp_init_middle)) {
1068 __kmp_middle_initialize();
1070 if (!KMP_AFFINITY_CAPABLE())
1072 if (!__kmp_affinity.flags.reset) {
1074 int gtid = __kmp_entry_gtid();
1075 kmp_info_t *thread = __kmp_threads[gtid];
1076 if (thread->th.th_team->t.t_level == 0) {
1077 __kmp_assign_root_init_mask();
1080 if (place_num < 0 || place_num >= (
int)__kmp_affinity.num_masks)
1082 kmp_affin_mask_t *mask = KMP_CPU_INDEX(__kmp_affinity.masks, place_num);
1083 KMP_CPU_SET_ITERATE(i, mask) {
1084 if ((!KMP_CPU_ISSET(i, __kmp_affin_fullMask)) ||
1085 (!KMP_CPU_ISSET(i, mask))) {
1094int FTN_STDCALL FTN_GET_PLACE_NUM_PROCS_8(kmp_int64 KMP_DEREF place_num) {
1095 return KMP_EXPAND_NAME(FTN_GET_PLACE_NUM_PROCS)(
1096 __kmp_ftn_int64_to_int(KMP_DEREF place_num));
1099void FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_PROC_IDS)(
int place_num,
1101#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
1105 if (!TCR_4(__kmp_init_middle)) {
1106 __kmp_middle_initialize();
1108 if (!KMP_AFFINITY_CAPABLE())
1110 if (!__kmp_affinity.flags.reset) {
1112 int gtid = __kmp_entry_gtid();
1113 kmp_info_t *thread = __kmp_threads[gtid];
1114 if (thread->th.th_team->t.t_level == 0) {
1115 __kmp_assign_root_init_mask();
1118 if (place_num < 0 || place_num >= (
int)__kmp_affinity.num_masks)
1120 kmp_affin_mask_t *mask = KMP_CPU_INDEX(__kmp_affinity.masks, place_num);
1122 KMP_CPU_SET_ITERATE(i, mask) {
1123 if ((!KMP_CPU_ISSET(i, __kmp_affin_fullMask)) ||
1124 (!KMP_CPU_ISSET(i, mask))) {
1132void FTN_STDCALL FTN_GET_PLACE_PROC_IDS_8(kmp_int64 KMP_DEREF place_num,
1134 int place_num32 = __kmp_ftn_int64_to_int(KMP_DEREF place_num);
1135 int n = KMP_EXPAND_NAME(FTN_GET_PLACE_NUM_PROCS)(place_num32);
1139 ids32 = (
int *)KMP_INTERNAL_MALLOC(
sizeof(
int) * n);
1142 KMP_EXPAND_NAME(FTN_GET_PLACE_PROC_IDS)(place_num32, ids32);
1143 for (
int i = 0; i < n; ++i)
1145 KMP_INTERNAL_FREE(ids32);
1148int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_NUM)(void) {
1149#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
1154 if (!TCR_4(__kmp_init_middle)) {
1155 __kmp_middle_initialize();
1157 if (!KMP_AFFINITY_CAPABLE())
1159 gtid = __kmp_entry_gtid();
1160 thread = __kmp_thread_from_gtid(gtid);
1161 if (thread->th.th_team->t.t_level == 0 && !__kmp_affinity.flags.reset) {
1162 __kmp_assign_root_init_mask();
1164 if (thread->th.th_current_place < 0)
1166 return thread->th.th_current_place;
1170int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PARTITION_NUM_PLACES)(void) {
1171#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
1174 int gtid, num_places, first_place, last_place;
1176 if (!TCR_4(__kmp_init_middle)) {
1177 __kmp_middle_initialize();
1179 if (!KMP_AFFINITY_CAPABLE())
1181 gtid = __kmp_entry_gtid();
1182 thread = __kmp_thread_from_gtid(gtid);
1183 if (thread->th.th_team->t.t_level == 0 && !__kmp_affinity.flags.reset) {
1184 __kmp_assign_root_init_mask();
1186 first_place = thread->th.th_first_place;
1187 last_place = thread->th.th_last_place;
1188 if (first_place < 0 || last_place < 0)
1190 if (first_place <= last_place)
1191 num_places = last_place - first_place + 1;
1193 num_places = __kmp_affinity.num_masks - first_place + last_place + 1;
1199KMP_EXPAND_NAME(FTN_GET_PARTITION_PLACE_NUMS)(
int *place_nums) {
1200#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
1203 int i, gtid, place_num, first_place, last_place, start, end;
1205 if (!TCR_4(__kmp_init_middle)) {
1206 __kmp_middle_initialize();
1208 if (!KMP_AFFINITY_CAPABLE())
1210 gtid = __kmp_entry_gtid();
1211 thread = __kmp_thread_from_gtid(gtid);
1212 if (thread->th.th_team->t.t_level == 0 && !__kmp_affinity.flags.reset) {
1213 __kmp_assign_root_init_mask();
1215 first_place = thread->th.th_first_place;
1216 last_place = thread->th.th_last_place;
1217 if (first_place < 0 || last_place < 0)
1219 if (first_place <= last_place) {
1220 start = first_place;
1226 for (i = 0, place_num = start; place_num <= end; ++place_num, ++i) {
1227 place_nums[i] = place_num;
1232void FTN_STDCALL FTN_GET_PARTITION_PLACE_NUMS_8(kmp_int64 *place_nums) {
1233#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
1236 int i, gtid, place_num, first_place, last_place, start, end;
1238 if (!TCR_4(__kmp_init_middle)) {
1239 __kmp_middle_initialize();
1241 if (!KMP_AFFINITY_CAPABLE())
1243 gtid = __kmp_entry_gtid();
1244 thread = __kmp_thread_from_gtid(gtid);
1245 if (thread->th.th_team->t.t_level == 0 && !__kmp_affinity.flags.reset) {
1246 __kmp_assign_root_init_mask();
1248 first_place = thread->th.th_first_place;
1249 last_place = thread->th.th_last_place;
1250 if (first_place < 0 || last_place < 0)
1252 if (first_place <= last_place) {
1253 start = first_place;
1259 for (i = 0, place_num = start; place_num <= end; ++place_num, ++i) {
1260 place_nums[i] = place_num;
1265int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_TEAMS)(void) {
1269 return __kmp_aux_get_num_teams();
1273int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_TEAM_NUM)(void) {
1277 return __kmp_aux_get_team_num();
1281int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_DEFAULT_DEVICE)(void) {
1282#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
1285 return __kmp_entry_thread()->th.th_current_task->td_icvs.default_device;
1289void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_DEFAULT_DEVICE)(
int KMP_DEREF arg) {
1290#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
1293 __kmp_entry_thread()->th.th_current_task->td_icvs.default_device =
1298void FTN_STDCALL FTN_SET_DEFAULT_DEVICE_8(kmp_int64 KMP_DEREF arg) {
1299 int arg32 = __kmp_ftn_int64_to_int(KMP_DEREF arg);
1300 KMP_EXPAND_NAME(FTN_SET_DEFAULT_DEVICE)(KMP_FTN_PASS(arg32));
1305int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_DEVICES)(void)
1306 KMP_WEAK_ATTRIBUTE_EXTERNAL;
1307int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_NUM_DEVICES)(void) {
1308#if KMP_MIC || KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
1312 if ((*(
void **)(&fptr) = KMP_DLSYM(
"__tgt_get_num_devices"))) {
1314 }
else if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_num_devices"))) {
1316 }
else if ((*(
void **)(&fptr) = KMP_DLSYM(
"_Offload_number_of_devices"))) {
1326int FTN_STDCALL KMP_EXPAND_NAME(FTN_IS_INITIAL_DEVICE)(void)
1327 KMP_WEAK_ATTRIBUTE_EXTERNAL;
1328int FTN_STDCALL KMP_EXPAND_NAME(FTN_IS_INITIAL_DEVICE)(void) {
1333int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_INITIAL_DEVICE)(void)
1334 KMP_WEAK_ATTRIBUTE_EXTERNAL;
1335int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_INITIAL_DEVICE)(void) {
1337 return KMP_EXPAND_NAME(FTN_GET_NUM_DEVICES)();
1340#if defined(KMP_STUB)
1343void *FTN_STDCALL FTN_TARGET_ALLOC(
size_t size,
int device_num) {
return 0; }
1345void FTN_STDCALL FTN_TARGET_FREE(
void *device_ptr,
int device_num) {}
1347int FTN_STDCALL FTN_TARGET_IS_PRESENT(
void *ptr,
int device_num) {
return 0; }
1349int FTN_STDCALL FTN_TARGET_MEMCPY(
void *dst,
void *src,
size_t length,
1350 size_t dst_offset,
size_t src_offset,
1351 int dst_device,
int src_device) {
1355int FTN_STDCALL FTN_TARGET_MEMCPY_RECT(
1356 void *dst,
void *src,
size_t element_size,
int num_dims,
1357 const size_t *volume,
const size_t *dst_offsets,
const size_t *src_offsets,
1358 const size_t *dst_dimensions,
const size_t *src_dimensions,
int dst_device,
1363int FTN_STDCALL FTN_TARGET_ASSOCIATE_PTR(
void *host_ptr,
void *device_ptr,
1364 size_t size,
size_t device_offset,
1369int FTN_STDCALL FTN_TARGET_DISASSOCIATE_PTR(
void *host_ptr,
int device_num) {
1375typedef enum { UNINIT = -1, UNLOCKED, LOCKED } kmp_stub_lock_t;
1378#if KMP_USE_DYNAMIC_LOCK
1379void FTN_STDCALL FTN_INIT_LOCK_WITH_HINT(
void **user_lock,
1380 uintptr_t KMP_DEREF hint) {
1382 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1384 int gtid = __kmp_entry_gtid();
1385#if OMPT_SUPPORT && OMPT_OPTIONAL
1386 OMPT_STORE_RETURN_ADDRESS(gtid);
1388 __kmpc_init_lock_with_hint(NULL, gtid, user_lock, KMP_DEREF hint);
1392void FTN_STDCALL FTN_INIT_NEST_LOCK_WITH_HINT(
void **user_lock,
1393 uintptr_t KMP_DEREF hint) {
1395 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1397 int gtid = __kmp_entry_gtid();
1398#if OMPT_SUPPORT && OMPT_OPTIONAL
1399 OMPT_STORE_RETURN_ADDRESS(gtid);
1401 __kmpc_init_nest_lock_with_hint(NULL, gtid, user_lock, KMP_DEREF hint);
1407void FTN_STDCALL KMP_EXPAND_NAME(FTN_INIT_LOCK)(
void **user_lock) {
1409 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1411 int gtid = __kmp_entry_gtid();
1412#if OMPT_SUPPORT && OMPT_OPTIONAL
1413 OMPT_STORE_RETURN_ADDRESS(gtid);
1415 __kmpc_init_lock(NULL, gtid, user_lock);
1420void FTN_STDCALL KMP_EXPAND_NAME(FTN_INIT_NEST_LOCK)(
void **user_lock) {
1422 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1424 int gtid = __kmp_entry_gtid();
1425#if OMPT_SUPPORT && OMPT_OPTIONAL
1426 OMPT_STORE_RETURN_ADDRESS(gtid);
1428 __kmpc_init_nest_lock(NULL, gtid, user_lock);
1432void FTN_STDCALL KMP_EXPAND_NAME(FTN_DESTROY_LOCK)(
void **user_lock) {
1434 *((kmp_stub_lock_t *)user_lock) = UNINIT;
1436 int gtid = __kmp_entry_gtid();
1437#if OMPT_SUPPORT && OMPT_OPTIONAL
1438 OMPT_STORE_RETURN_ADDRESS(gtid);
1440 __kmpc_destroy_lock(NULL, gtid, user_lock);
1444void FTN_STDCALL KMP_EXPAND_NAME(FTN_DESTROY_NEST_LOCK)(
void **user_lock) {
1446 *((kmp_stub_lock_t *)user_lock) = UNINIT;
1448 int gtid = __kmp_entry_gtid();
1449#if OMPT_SUPPORT && OMPT_OPTIONAL
1450 OMPT_STORE_RETURN_ADDRESS(gtid);
1452 __kmpc_destroy_nest_lock(NULL, gtid, user_lock);
1456void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_LOCK)(
void **user_lock) {
1458 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1461 if (*((kmp_stub_lock_t *)user_lock) != UNLOCKED) {
1464 *((kmp_stub_lock_t *)user_lock) = LOCKED;
1466 int gtid = __kmp_entry_gtid();
1467#if OMPT_SUPPORT && OMPT_OPTIONAL
1468 OMPT_STORE_RETURN_ADDRESS(gtid);
1470 __kmpc_set_lock(NULL, gtid, user_lock);
1474void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NEST_LOCK)(
void **user_lock) {
1476 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1479 (*((
int *)user_lock))++;
1481 int gtid = __kmp_entry_gtid();
1482#if OMPT_SUPPORT && OMPT_OPTIONAL
1483 OMPT_STORE_RETURN_ADDRESS(gtid);
1485 __kmpc_set_nest_lock(NULL, gtid, user_lock);
1489void FTN_STDCALL KMP_EXPAND_NAME(FTN_UNSET_LOCK)(
void **user_lock) {
1491 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1494 if (*((kmp_stub_lock_t *)user_lock) == UNLOCKED) {
1497 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1499 int gtid = __kmp_entry_gtid();
1500#if OMPT_SUPPORT && OMPT_OPTIONAL
1501 OMPT_STORE_RETURN_ADDRESS(gtid);
1503 __kmpc_unset_lock(NULL, gtid, user_lock);
1507void FTN_STDCALL KMP_EXPAND_NAME(FTN_UNSET_NEST_LOCK)(
void **user_lock) {
1509 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1512 if (*((kmp_stub_lock_t *)user_lock) == UNLOCKED) {
1515 (*((
int *)user_lock))--;
1517 int gtid = __kmp_entry_gtid();
1518#if OMPT_SUPPORT && OMPT_OPTIONAL
1519 OMPT_STORE_RETURN_ADDRESS(gtid);
1521 __kmpc_unset_nest_lock(NULL, gtid, user_lock);
1525int FTN_STDCALL KMP_EXPAND_NAME(FTN_TEST_LOCK)(
void **user_lock) {
1527 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1530 if (*((kmp_stub_lock_t *)user_lock) == LOCKED) {
1533 *((kmp_stub_lock_t *)user_lock) = LOCKED;
1536 int gtid = __kmp_entry_gtid();
1537#if OMPT_SUPPORT && OMPT_OPTIONAL
1538 OMPT_STORE_RETURN_ADDRESS(gtid);
1540 return __kmpc_test_lock(NULL, gtid, user_lock);
1544int FTN_STDCALL KMP_EXPAND_NAME(FTN_TEST_NEST_LOCK)(
void **user_lock) {
1546 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1549 return ++(*((
int *)user_lock));
1551 int gtid = __kmp_entry_gtid();
1552#if OMPT_SUPPORT && OMPT_OPTIONAL
1553 OMPT_STORE_RETURN_ADDRESS(gtid);
1555 return __kmpc_test_nest_lock(NULL, gtid, user_lock);
1559double FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_WTIME)(void) {
1561 return __kmps_get_wtime();
1567 if (!__kmp_init_serial) {
1568 __kmp_serial_initialize();
1571 __kmp_elapsed(&data);
1576double FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_WTICK)(void) {
1578 return __kmps_get_wtick();
1581 if (!__kmp_init_serial) {
1582 __kmp_serial_initialize();
1584 __kmp_elapsed_tick(&data);
1591void *FTN_STDCALL FTN_MALLOC(
size_t KMP_DEREF size) {
1593 return kmpc_malloc(KMP_DEREF size);
1596void *FTN_STDCALL FTN_ALIGNED_MALLOC(
size_t KMP_DEREF size,
1597 size_t KMP_DEREF alignment) {
1599 return kmpc_aligned_malloc(KMP_DEREF size, KMP_DEREF alignment);
1602void *FTN_STDCALL FTN_CALLOC(
size_t KMP_DEREF nelem,
size_t KMP_DEREF elsize) {
1604 return kmpc_calloc(KMP_DEREF nelem, KMP_DEREF elsize);
1607void *FTN_STDCALL FTN_REALLOC(
void *KMP_DEREF ptr,
size_t KMP_DEREF size) {
1609 return kmpc_realloc(KMP_DEREF ptr, KMP_DEREF size);
1612void FTN_STDCALL FTN_KFREE(
void *KMP_DEREF ptr) {
1614 kmpc_free(KMP_DEREF ptr);
1617void FTN_STDCALL FTN_SET_WARNINGS_ON(
void) {
1619 __kmp_generate_warnings = kmp_warnings_explicit;
1623void FTN_STDCALL FTN_SET_WARNINGS_OFF(
void) {
1625 __kmp_generate_warnings = FALSE;
1629void FTN_STDCALL FTN_SET_DEFAULTS(
char const *str
1630#ifndef PASS_ARGS_BY_VALUE
1637 char const *defaults = str;
1639#ifdef PASS_ARGS_BY_VALUE
1640 sz = KMP_STRLEN(str);
1643 ConvertedString cstr(str, sz);
1644 defaults = cstr.get();
1647 __kmp_aux_set_defaults(defaults, sz);
1654int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_CANCELLATION)(void) {
1659 if (!__kmp_init_serial) {
1660 __kmp_serial_initialize();
1662 return __kmp_omp_cancellation;
1666int FTN_STDCALL FTN_GET_CANCELLATION_STATUS(
int cancel_kind) {
1670 return __kmp_get_cancellation_status(cancel_kind);
1675int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_MAX_TASK_PRIORITY)(void) {
1679 if (!__kmp_init_serial) {
1680 __kmp_serial_initialize();
1682 return __kmp_max_task_priority;
1689int FTN_STDCALL FTN_GET_DEVICE_NUM(
void) KMP_WEAK_ATTRIBUTE_EXTERNAL;
1690int FTN_STDCALL FTN_GET_DEVICE_NUM(
void) {
1691 return KMP_EXPAND_NAME(FTN_GET_INITIAL_DEVICE)();
1693const char *FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_UID_FROM_DEVICE)(
int device_num)
1694 KMP_WEAK_ATTRIBUTE_EXTERNAL;
1695const char *FTN_STDCALL
1696KMP_EXPAND_NAME(FTN_GET_UID_FROM_DEVICE)(
int device_num) {
1697#if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
1700 const char *(*fptr)(int);
1701 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_uid_from_device")))
1702 return (*fptr)(device_num);
1707int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_DEVICE_FROM_UID)(
const char *device_uid)
1708 KMP_WEAK_ATTRIBUTE_EXTERNAL;
1710KMP_EXPAND_NAME(FTN_GET_DEVICE_FROM_UID)(
const char *device_uid) {
1711#if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
1714 int (*fptr)(
const char *);
1715 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_device_from_uid")))
1716 return (*fptr)(device_uid);
1717 return KMP_EXPAND_NAME(FTN_GET_INITIAL_DEVICE)();
1722int FTN_STDCALL KMP_EXPAND_NAME(FTN_PAUSE_RESOURCE)(kmp_pause_status_t kind,
1727 if (kind == kmp_stop_tool_paused)
1729 if (device_num == KMP_EXPAND_NAME(FTN_GET_INITIAL_DEVICE)())
1730 return __kmpc_pause_resource(kind);
1732 int (*fptr)(kmp_pause_status_t, int);
1733 if ((*(
void **)(&fptr) = KMP_DLSYM(
"tgt_pause_resource")))
1734 return (*fptr)(kind, device_num);
1741int FTN_STDCALL FTN_PAUSE_RESOURCE_8(kmp_pause_status_t kind,
1742 kmp_int64 KMP_DEREF device_num) {
1743 return KMP_EXPAND_NAME(FTN_PAUSE_RESOURCE)(
1744 kind, __kmp_ftn_int64_to_int(KMP_DEREF device_num));
1749 KMP_EXPAND_NAME(FTN_PAUSE_RESOURCE_ALL)(kmp_pause_status_t kind) {
1754 int (*fptr)(kmp_pause_status_t, int);
1755 if ((*(
void **)(&fptr) = KMP_DLSYM(
"tgt_pause_resource")))
1756 fails = (*fptr)(kind, KMP_DEVICE_ALL);
1757 fails += __kmpc_pause_resource(kind);
1763int FTN_STDCALL FTN_GET_SUPPORTED_ACTIVE_LEVELS(
void) {
1767 return KMP_MAX_ACTIVE_LEVELS_LIMIT;
1771void FTN_STDCALL FTN_FULFILL_EVENT(kmp_event_t *event) {
1773 __kmp_fulfill_event(event);
1778void FTN_STDCALL FTN_SET_NUM_TEAMS(
int KMP_DEREF num_teams) {
1782 if (!__kmp_init_serial) {
1783 __kmp_serial_initialize();
1785 kmp_info_t *th = __kmp_entry_thread();
1794 if (th->th.th_teams_microtask || th->th.th_team->t.t_level > 0) {
1795 KMP_WARNING(SetNumTeamsInParOrTeamsRegion,
"omp_set_num_teams");
1798 __kmp_set_num_teams(KMP_DEREF num_teams);
1802void FTN_STDCALL FTN_SET_NUM_TEAMS_8(kmp_int64 KMP_DEREF num_teams) {
1803 int num_teams32 = __kmp_ftn_int64_to_int(KMP_DEREF num_teams);
1804 FTN_SET_NUM_TEAMS(KMP_FTN_PASS(num_teams32));
1807int FTN_STDCALL FTN_GET_MAX_TEAMS(
void) {
1811 if (!__kmp_init_serial) {
1812 __kmp_serial_initialize();
1814 return __kmp_get_max_teams();
1818void FTN_STDCALL FTN_SET_TEAMS_THREAD_LIMIT(
int KMP_DEREF limit) {
1822 if (!__kmp_init_serial) {
1823 __kmp_serial_initialize();
1825 kmp_info_t *th = __kmp_entry_thread();
1834 if (th->th.th_teams_microtask || th->th.th_team->t.t_level > 0) {
1835 KMP_WARNING(SetTeamsThreadLimitInParOrTeamsRegion,
1836 "omp_set_teams_thread_limit");
1839 __kmp_set_teams_thread_limit(KMP_DEREF limit);
1843void FTN_STDCALL FTN_SET_TEAMS_THREAD_LIMIT_8(kmp_int64 KMP_DEREF limit) {
1844 int limit32 = __kmp_ftn_int64_to_int(KMP_DEREF limit);
1845 FTN_SET_TEAMS_THREAD_LIMIT(KMP_FTN_PASS(limit32));
1848int FTN_STDCALL FTN_GET_TEAMS_THREAD_LIMIT(
void) {
1852 if (!__kmp_init_serial) {
1853 __kmp_serial_initialize();
1855 return __kmp_get_teams_thread_limit();
1861typedef intptr_t omp_intptr_t;
1865typedef enum omp_interop_property {
1867 omp_ipr_fr_name = -2,
1868 omp_ipr_vendor = -3,
1869 omp_ipr_vendor_name = -4,
1870 omp_ipr_device_num = -5,
1871 omp_ipr_platform = -6,
1872 omp_ipr_device = -7,
1873 omp_ipr_device_context = -8,
1874 omp_ipr_targetsync = -9,
1876} omp_interop_property_t;
1878#define omp_interop_none 0
1880typedef enum omp_interop_rc {
1881 omp_irc_no_value = 1,
1882 omp_irc_success = 0,
1884 omp_irc_out_of_range = -2,
1885 omp_irc_type_int = -3,
1886 omp_irc_type_ptr = -4,
1887 omp_irc_type_str = -5,
1891typedef enum omp_interop_fr {
1893 omp_ifr_cuda_driver = 2,
1897 omp_ifr_level_zero = 6,
1901typedef void *omp_interop_t;
1904int FTN_STDCALL FTN_GET_NUM_INTEROP_PROPERTIES(
const omp_interop_t interop) {
1905#if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
1908 int (*fptr)(
const omp_interop_t);
1909 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_num_interop_properties")))
1910 return (*fptr)(interop);
1917intptr_t FTN_STDCALL FTN_GET_INTEROP_INT(
const omp_interop_t interop,
1918 omp_interop_property_t property_id,
1920#if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
1923 intptr_t (*fptr)(
const omp_interop_t, omp_interop_property_t,
int *);
1924 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_int")))
1925 return (*fptr)(interop, property_id, err);
1931void *FTN_STDCALL FTN_GET_INTEROP_PTR(
const omp_interop_t interop,
1932 omp_interop_property_t property_id,
1934#if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
1937 void *(*fptr)(
const omp_interop_t, omp_interop_property_t,
int *);
1938 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_ptr")))
1939 return (*fptr)(interop, property_id, err);
1945const char *FTN_STDCALL FTN_GET_INTEROP_STR(
const omp_interop_t interop,
1946 omp_interop_property_t property_id,
1948#if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
1951 const char *(*fptr)(
const omp_interop_t, omp_interop_property_t,
int *);
1952 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_str")))
1953 return (*fptr)(interop, property_id, err);
1959const char *FTN_STDCALL FTN_GET_INTEROP_NAME(
1960 const omp_interop_t interop, omp_interop_property_t property_id) {
1961#if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
1964 const char *(*fptr)(
const omp_interop_t, omp_interop_property_t);
1965 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_name")))
1966 return (*fptr)(interop, property_id);
1972const char *FTN_STDCALL FTN_GET_INTEROP_TYPE_DESC(
1973 const omp_interop_t interop, omp_interop_property_t property_id) {
1974#if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
1977 const char *(*fptr)(
const omp_interop_t, omp_interop_property_t);
1978 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_type_desc")))
1979 return (*fptr)(interop, property_id);
1985const char *FTN_STDCALL FTN_GET_INTEROP_RC_DESC(
1986 const omp_interop_t interop, omp_interop_property_t property_id) {
1987#if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
1990 const char *(*fptr)(
const omp_interop_t, omp_interop_property_t);
1991 if ((*(
void **)(&fptr) = KMP_DLSYM_NEXT(
"omp_get_interop_rec_desc")))
1992 return (*fptr)(interop, property_id);
1998void FTN_STDCALL FTN_DISPLAY_ENV(
int verbose) {
2000 __kmp_omp_display_env(verbose);
2004int FTN_STDCALL FTN_IN_EXPLICIT_TASK(
void) {
2008 int gtid = __kmp_entry_gtid();
2009 return __kmp_thread_from_gtid(gtid)->th.th_current_task->td_flags.tasktype;
2014#ifdef KMP_USE_VERSION_SYMBOLS
2036KMP_VERSION_SYMBOL(FTN_SET_NUM_THREADS, 10,
"OMP_1.0");
2037KMP_VERSION_SYMBOL(FTN_GET_NUM_THREADS, 10,
"OMP_1.0");
2038KMP_VERSION_SYMBOL(FTN_GET_MAX_THREADS, 10,
"OMP_1.0");
2039KMP_VERSION_SYMBOL(FTN_GET_THREAD_NUM, 10,
"OMP_1.0");
2040KMP_VERSION_SYMBOL(FTN_GET_NUM_PROCS, 10,
"OMP_1.0");
2041KMP_VERSION_SYMBOL(FTN_IN_PARALLEL, 10,
"OMP_1.0");
2042KMP_VERSION_SYMBOL(FTN_SET_DYNAMIC, 10,
"OMP_1.0");
2043KMP_VERSION_SYMBOL(FTN_GET_DYNAMIC, 10,
"OMP_1.0");
2044KMP_VERSION_SYMBOL(FTN_SET_NESTED, 10,
"OMP_1.0");
2045KMP_VERSION_SYMBOL(FTN_GET_NESTED, 10,
"OMP_1.0");
2046KMP_VERSION_SYMBOL(FTN_INIT_LOCK, 10,
"OMP_1.0");
2047KMP_VERSION_SYMBOL(FTN_INIT_NEST_LOCK, 10,
"OMP_1.0");
2048KMP_VERSION_SYMBOL(FTN_DESTROY_LOCK, 10,
"OMP_1.0");
2049KMP_VERSION_SYMBOL(FTN_DESTROY_NEST_LOCK, 10,
"OMP_1.0");
2050KMP_VERSION_SYMBOL(FTN_SET_LOCK, 10,
"OMP_1.0");
2051KMP_VERSION_SYMBOL(FTN_SET_NEST_LOCK, 10,
"OMP_1.0");
2052KMP_VERSION_SYMBOL(FTN_UNSET_LOCK, 10,
"OMP_1.0");
2053KMP_VERSION_SYMBOL(FTN_UNSET_NEST_LOCK, 10,
"OMP_1.0");
2054KMP_VERSION_SYMBOL(FTN_TEST_LOCK, 10,
"OMP_1.0");
2055KMP_VERSION_SYMBOL(FTN_TEST_NEST_LOCK, 10,
"OMP_1.0");
2058KMP_VERSION_SYMBOL(FTN_GET_WTICK, 20,
"OMP_2.0");
2059KMP_VERSION_SYMBOL(FTN_GET_WTIME, 20,
"OMP_2.0");
2062KMP_VERSION_SYMBOL(FTN_SET_SCHEDULE, 30,
"OMP_3.0");
2063KMP_VERSION_SYMBOL(FTN_GET_SCHEDULE, 30,
"OMP_3.0");
2064KMP_VERSION_SYMBOL(FTN_GET_THREAD_LIMIT, 30,
"OMP_3.0");
2065KMP_VERSION_SYMBOL(FTN_SET_MAX_ACTIVE_LEVELS, 30,
"OMP_3.0");
2066KMP_VERSION_SYMBOL(FTN_GET_MAX_ACTIVE_LEVELS, 30,
"OMP_3.0");
2067KMP_VERSION_SYMBOL(FTN_GET_ANCESTOR_THREAD_NUM, 30,
"OMP_3.0");
2068KMP_VERSION_SYMBOL(FTN_GET_LEVEL, 30,
"OMP_3.0");
2069KMP_VERSION_SYMBOL(FTN_GET_TEAM_SIZE, 30,
"OMP_3.0");
2070KMP_VERSION_SYMBOL(FTN_GET_ACTIVE_LEVEL, 30,
"OMP_3.0");
2073KMP_VERSION_SYMBOL(FTN_INIT_LOCK, 30,
"OMP_3.0");
2074KMP_VERSION_SYMBOL(FTN_INIT_NEST_LOCK, 30,
"OMP_3.0");
2075KMP_VERSION_SYMBOL(FTN_DESTROY_LOCK, 30,
"OMP_3.0");
2076KMP_VERSION_SYMBOL(FTN_DESTROY_NEST_LOCK, 30,
"OMP_3.0");
2077KMP_VERSION_SYMBOL(FTN_SET_LOCK, 30,
"OMP_3.0");
2078KMP_VERSION_SYMBOL(FTN_SET_NEST_LOCK, 30,
"OMP_3.0");
2079KMP_VERSION_SYMBOL(FTN_UNSET_LOCK, 30,
"OMP_3.0");
2080KMP_VERSION_SYMBOL(FTN_UNSET_NEST_LOCK, 30,
"OMP_3.0");
2081KMP_VERSION_SYMBOL(FTN_TEST_LOCK, 30,
"OMP_3.0");
2082KMP_VERSION_SYMBOL(FTN_TEST_NEST_LOCK, 30,
"OMP_3.0");
2085KMP_VERSION_SYMBOL(FTN_IN_FINAL, 31,
"OMP_3.1");
2088KMP_VERSION_SYMBOL(FTN_GET_PROC_BIND, 40,
"OMP_4.0");
2089KMP_VERSION_SYMBOL(FTN_GET_NUM_TEAMS, 40,
"OMP_4.0");
2090KMP_VERSION_SYMBOL(FTN_GET_TEAM_NUM, 40,
"OMP_4.0");
2091KMP_VERSION_SYMBOL(FTN_GET_CANCELLATION, 40,
"OMP_4.0");
2092KMP_VERSION_SYMBOL(FTN_GET_DEFAULT_DEVICE, 40,
"OMP_4.0");
2093KMP_VERSION_SYMBOL(FTN_SET_DEFAULT_DEVICE, 40,
"OMP_4.0");
2094KMP_VERSION_SYMBOL(FTN_IS_INITIAL_DEVICE, 40,
"OMP_4.0");
2095KMP_VERSION_SYMBOL(FTN_GET_NUM_DEVICES, 40,
"OMP_4.0");
2098KMP_VERSION_SYMBOL(FTN_GET_MAX_TASK_PRIORITY, 45,
"OMP_4.5");
2099KMP_VERSION_SYMBOL(FTN_GET_NUM_PLACES, 45,
"OMP_4.5");
2100KMP_VERSION_SYMBOL(FTN_GET_PLACE_NUM_PROCS, 45,
"OMP_4.5");
2101KMP_VERSION_SYMBOL(FTN_GET_PLACE_PROC_IDS, 45,
"OMP_4.5");
2102KMP_VERSION_SYMBOL(FTN_GET_PLACE_NUM, 45,
"OMP_4.5");
2103KMP_VERSION_SYMBOL(FTN_GET_PARTITION_NUM_PLACES, 45,
"OMP_4.5");
2104KMP_VERSION_SYMBOL(FTN_GET_PARTITION_PLACE_NUMS, 45,
"OMP_4.5");
2105KMP_VERSION_SYMBOL(FTN_GET_INITIAL_DEVICE, 45,
"OMP_4.5");
2109KMP_VERSION_SYMBOL(FTN_PAUSE_RESOURCE, 50,
"OMP_5.0");
2110KMP_VERSION_SYMBOL(FTN_PAUSE_RESOURCE_ALL, 50,
"OMP_5.0");
2112#if KMP_FTN_ENTRIES == KMP_FTN_APPEND
2113KMP_VERSION_SYMBOL(FTN_CAPTURE_AFFINITY, 50,
"OMP_5.0");
2114KMP_VERSION_SYMBOL(FTN_DISPLAY_AFFINITY, 50,
"OMP_5.0");
2115KMP_VERSION_SYMBOL(FTN_GET_AFFINITY_FORMAT, 50,
"OMP_5.0");
2116KMP_VERSION_SYMBOL(FTN_SET_AFFINITY_FORMAT, 50,
"OMP_5.0");
2122KMP_VERSION_SYMBOL(FTN_GET_UID_FROM_DEVICE, 60,
"OMP_6.0");
2123KMP_VERSION_SYMBOL(FTN_GET_DEVICE_FROM_UID, 60,
"OMP_6.0");
KMP_EXPORT kmp_int32 __kmpc_bound_num_threads(ident_t *)