LLVM OpenMP
kmp_ftn_entry.h
Go to the documentation of this file.
1/*
2 * kmp_ftn_entry.h -- Fortran entry linkage support for OpenMP.
3 */
4
5//===----------------------------------------------------------------------===//
6//
7// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
8// See https://llvm.org/LICENSE.txt for license information.
9// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
10//
11//===----------------------------------------------------------------------===//
12
13#ifndef FTN_STDCALL
14#error The support file kmp_ftn_entry.h should not be compiled by itself.
15#endif
16
17#ifdef KMP_STUB
18#include "kmp_stub.h"
19#endif
20
21#include "kmp_i18n.h"
22
23// For affinity format functions
24#include "kmp_io.h"
25#include "kmp_str.h"
26
27#if OMPT_SUPPORT
28#include "ompt-specific.h"
29#endif
30
31#ifdef __cplusplus
32extern "C" {
33#endif // __cplusplus
34
35/* For compatibility with the Gnu/MS Open MP codegen, omp_set_num_threads(),
36 * omp_set_nested(), and omp_set_dynamic() [in lowercase on MS, and w/o
37 * a trailing underscore on Linux* OS] take call by value integer arguments.
38 * + omp_set_max_active_levels()
39 * + omp_set_schedule()
40 *
41 * For backward compatibility with 9.1 and previous Intel compiler, these
42 * entry points take call by reference integer arguments. */
43#ifdef KMP_GOMP_COMPAT
44#if (KMP_FTN_ENTRIES == KMP_FTN_PLAIN) || (KMP_FTN_ENTRIES == KMP_FTN_UPPER)
45#define PASS_ARGS_BY_VALUE 1
46#endif
47#endif
48#if KMP_OS_WINDOWS
49#if (KMP_FTN_ENTRIES == KMP_FTN_PLAIN) || (KMP_FTN_ENTRIES == KMP_FTN_APPEND)
50#define PASS_ARGS_BY_VALUE 1
51#endif
52#endif
53
54// This macro helps to reduce code duplication.
55#ifdef PASS_ARGS_BY_VALUE
56#define KMP_DEREF
57#define KMP_FTN_PASS(x) (x)
58#else
59#define KMP_DEREF *
60#define KMP_FTN_PASS(x) (&(x))
61#endif
62
64 if (value > (kmp_int64)INT_MAX)
65 return INT_MAX;
66 if (value < (kmp_int64)INT_MIN)
67 return INT_MIN;
68 return (int)value;
69}
70
71// For API with specific C vs. Fortran interfaces (ompc_* exists in
72// kmp_csupport.cpp), only create GOMP versioned symbols of the API for the
73// APPEND Fortran entries in this file. The GOMP versioned symbols of the C API
74// will take place where the ompc_* functions are defined.
75#if KMP_FTN_ENTRIES == KMP_FTN_APPEND
76#define KMP_EXPAND_NAME_IF_APPEND(name) KMP_EXPAND_NAME(name)
77#else
78#define KMP_EXPAND_NAME_IF_APPEND(name) name
79#endif
80
81void FTN_STDCALL FTN_SET_STACKSIZE(int KMP_DEREF arg) {
82#ifdef KMP_STUB
84#else
85 // __kmp_aux_set_stacksize initializes the library if needed
87#endif
88}
89
91 int arg32 = __kmp_ftn_int64_to_int(KMP_DEREF arg);
93}
94
95void FTN_STDCALL FTN_SET_STACKSIZE_S(size_t KMP_DEREF arg) {
96#ifdef KMP_STUB
98#else
99 // __kmp_aux_set_stacksize initializes the library if needed
101#endif
102}
103
104int FTN_STDCALL FTN_GET_STACKSIZE(void) {
105#ifdef KMP_STUB
106 return (int)__kmps_get_stacksize();
107#else
108 if (!__kmp_init_serial) {
110 }
111 return (int)__kmp_stksize;
112#endif
113}
114
115size_t FTN_STDCALL FTN_GET_STACKSIZE_S(void) {
116#ifdef KMP_STUB
117 return __kmps_get_stacksize();
118#else
119 if (!__kmp_init_serial) {
121 }
122 return __kmp_stksize;
123#endif
124}
125
126void FTN_STDCALL FTN_SET_BLOCKTIME(int KMP_DEREF arg) {
127#ifdef KMP_STUB
129#else
130 int gtid, tid, bt = (KMP_DEREF arg);
131 kmp_info_t *thread;
132
133 gtid = __kmp_entry_gtid();
134 tid = __kmp_tid_from_gtid(gtid);
135 thread = __kmp_thread_from_gtid(gtid);
136
138 __kmp_aux_set_blocktime(bt, thread, tid);
139#endif
140}
141
143 int arg32 = __kmp_ftn_int64_to_int(KMP_DEREF arg);
145}
146
147// Gets blocktime in units used for KMP_BLOCKTIME, ms otherwise
148int FTN_STDCALL FTN_GET_BLOCKTIME(void) {
149#ifdef KMP_STUB
150 return __kmps_get_blocktime();
151#else
152 int gtid, tid;
153 kmp_team_p *team;
154
155 gtid = __kmp_entry_gtid();
156 tid = __kmp_tid_from_gtid(gtid);
157 team = __kmp_threads[gtid]->th.th_team;
158
159 /* These must match the settings used in __kmp_wait_sleep() */
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;
164 }
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));
169 return 0;
170 }
171#endif /* KMP_ADJUST_BLOCKTIME */
172 else {
173 int bt = get__blocktime(team, tid);
174 if (__kmp_blocktime_units == 'm')
175 bt = bt / 1000;
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));
178 return bt;
179 }
180#endif
181}
182
183void FTN_STDCALL FTN_SET_LIBRARY_SERIAL(void) {
184#ifdef KMP_STUB
186#else
187 // __kmp_user_set_library initializes the library if needed
189#endif
190}
191
192void FTN_STDCALL FTN_SET_LIBRARY_TURNAROUND(void) {
193#ifdef KMP_STUB
195#else
196 // __kmp_user_set_library initializes the library if needed
198#endif
199}
200
201void FTN_STDCALL FTN_SET_LIBRARY_THROUGHPUT(void) {
202#ifdef KMP_STUB
204#else
205 // __kmp_user_set_library initializes the library if needed
207#endif
208}
209
210void FTN_STDCALL FTN_SET_LIBRARY(int KMP_DEREF arg) {
211#ifdef KMP_STUB
213#else
214 enum library_type lib;
215 lib = (enum library_type)KMP_DEREF arg;
216 // __kmp_user_set_library initializes the library if needed
218#endif
219}
220
221void FTN_STDCALL FTN_SET_LIBRARY_8(kmp_int64 KMP_DEREF arg) {
222 int arg32 = __kmp_ftn_int64_to_int(KMP_DEREF arg);
224}
225
226int FTN_STDCALL FTN_GET_LIBRARY(void) {
227#ifdef KMP_STUB
228 return __kmps_get_library();
229#else
230 if (!__kmp_init_serial) {
232 }
233 return ((int)__kmp_library);
234#endif
235}
236
237void FTN_STDCALL FTN_SET_DISP_NUM_BUFFERS(int KMP_DEREF arg) {
238#ifdef KMP_STUB
239 ; // empty routine
240#else
241 // ignore after initialization because some teams have already
242 // allocated dispatch buffers
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;
247 }
248#endif
249}
250
255
256int FTN_STDCALL FTN_SET_AFFINITY(void **mask) {
257#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
258 return -1;
259#else
260 if (!TCR_4(__kmp_init_middle)) {
262 }
264 return __kmp_aux_set_affinity(mask);
265#endif
266}
267
268int FTN_STDCALL FTN_GET_AFFINITY(void **mask) {
269#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
270 return -1;
271#else
272 if (!TCR_4(__kmp_init_middle)) {
274 }
276 int gtid = __kmp_get_gtid();
277 if (__kmp_threads[gtid]->th.th_team->t.t_level == 0 &&
278 __kmp_affinity.flags.reset) {
280 }
281 return __kmp_aux_get_affinity(mask);
282#endif
283}
284
285int FTN_STDCALL FTN_GET_AFFINITY_MAX_PROC(void) {
286#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
287 return 0;
288#else
289 // We really only NEED serial initialization here.
290 if (!TCR_4(__kmp_init_middle)) {
292 }
294 return __kmp_aux_get_affinity_max_proc();
295#endif
296}
297
298void FTN_STDCALL FTN_CREATE_AFFINITY_MASK(void **mask) {
299#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
300 *mask = NULL;
301#else
302 // We really only NEED serial initialization here.
303 kmp_affin_mask_t *mask_internals;
304 if (!TCR_4(__kmp_init_middle)) {
306 }
308 mask_internals = __kmp_affinity_dispatch->allocate_mask();
309 KMP_CPU_ZERO(mask_internals);
310 *mask = mask_internals;
311#endif
312}
313
314void FTN_STDCALL FTN_DESTROY_AFFINITY_MASK(void **mask) {
315#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
316// Nothing
317#else
318 // We really only NEED serial initialization here.
319 kmp_affin_mask_t *mask_internals;
320 if (!TCR_4(__kmp_init_middle)) {
322 }
325 if (*mask == NULL) {
326 KMP_FATAL(AffinityInvalidMask, "kmp_destroy_affinity_mask");
327 }
328 }
329 mask_internals = (kmp_affin_mask_t *)(*mask);
330 __kmp_affinity_dispatch->deallocate_mask(mask_internals);
331 *mask = NULL;
332#endif
333}
334
335int FTN_STDCALL FTN_SET_AFFINITY_MASK_PROC(int KMP_DEREF proc, void **mask) {
336#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
337 return -1;
338#else
339 if (!TCR_4(__kmp_init_middle)) {
341 }
343 return __kmp_aux_set_affinity_mask_proc(KMP_DEREF proc, mask);
344#endif
345}
346
348 void **mask) {
349 int proc32 = __kmp_ftn_int64_to_int(KMP_DEREF proc);
351}
352
353int FTN_STDCALL FTN_UNSET_AFFINITY_MASK_PROC(int KMP_DEREF proc, void **mask) {
354#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
355 return -1;
356#else
357 if (!TCR_4(__kmp_init_middle)) {
359 }
361 return __kmp_aux_unset_affinity_mask_proc(KMP_DEREF proc, mask);
362#endif
363}
364
366 void **mask) {
367 int proc32 = __kmp_ftn_int64_to_int(KMP_DEREF proc);
369}
370
371int FTN_STDCALL FTN_GET_AFFINITY_MASK_PROC(int KMP_DEREF proc, void **mask) {
372#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
373 return -1;
374#else
375 if (!TCR_4(__kmp_init_middle)) {
377 }
379 return __kmp_aux_get_affinity_mask_proc(KMP_DEREF proc, mask);
380#endif
381}
382
384 void **mask) {
385 int proc32 = __kmp_ftn_int64_to_int(KMP_DEREF proc);
387}
388
389/* ------------------------------------------------------------------------ */
390
391/* sets the requested number of threads for the next parallel region */
393#ifdef KMP_STUB
394// Nothing.
395#else
397#endif
398}
399
400/* Same as omp_set_num_threads, but accepts a 64-bit integer argument. */
405
406/* returns the number of threads in current team */
408#ifdef KMP_STUB
409 return 1;
410#else
411 // __kmpc_bound_num_threads initializes the library if needed
412 return __kmpc_bound_num_threads(NULL);
413#endif
414}
415
417#ifdef KMP_STUB
418 return 1;
419#else
420 int gtid;
421 kmp_info_t *thread;
422 if (!TCR_4(__kmp_init_middle)) {
424 }
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) {
430 }
431#endif
432 // return thread -> th.th_team -> t.t_current_task[
433 // thread->th.th_info.ds.ds_tid ] -> icvs.nproc;
434 return thread->th.th_current_task->td_icvs.nproc;
435#endif
436}
437
438int FTN_STDCALL FTN_CONTROL_TOOL(int command, int modifier, void *arg) {
439#if defined(KMP_STUB) || !OMPT_SUPPORT
440 return -2;
441#else
442 OMPT_STORE_RETURN_ADDRESS(__kmp_entry_gtid());
443 if (!TCR_4(__kmp_init_middle)) {
445 }
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;
451 return ret;
452#endif
453}
454
455/* OpenMP 5.0 Memory Management support */
456omp_allocator_handle_t FTN_STDCALL
458 omp_alloctrait_t tr[]) {
459#ifdef KMP_STUB
460 return NULL;
461#else
463 KMP_DEREF ntraits, tr);
464#endif
465}
466
468#ifndef KMP_STUB
470#endif
471}
473#ifndef KMP_STUB
475#endif
476}
478#ifdef KMP_STUB
479 return NULL;
480#else
482#endif
483}
484
485/* OpenMP 6.0 (TR11) Memory Management support */
486omp_memspace_handle_t FTN_STDCALL
487FTN_GET_DEVICES_MEMSPACE(int KMP_DEREF ndevs, const int *devs,
489#ifdef KMP_STUB
490 return NULL;
491#else
492 return __kmp_get_devices_memspace(KMP_DEREF ndevs, devs, KMP_DEREF memspace,
493 0 /* host */);
494#endif
495}
496
498 int KMP_DEREF dev, omp_memspace_handle_t KMP_DEREF memspace) {
499#ifdef KMP_STUB
500 return NULL;
501#else
502 int dev_num = KMP_DEREF dev;
503 return __kmp_get_devices_memspace(1, &dev_num, KMP_DEREF memspace, 0);
504#endif
505}
506
507omp_memspace_handle_t FTN_STDCALL
510#ifdef KMP_STUB
511 return NULL;
512#else
513 return __kmp_get_devices_memspace(KMP_DEREF ndevs, devs, KMP_DEREF memspace,
514 1);
515#endif
516}
517
519 int KMP_DEREF dev, omp_memspace_handle_t KMP_DEREF memspace) {
520#ifdef KMP_STUB
521 return NULL;
522#else
523 int dev_num = KMP_DEREF dev;
524 return __kmp_get_devices_memspace(1, &dev_num, KMP_DEREF memspace, 1);
525#endif
526}
527
528omp_memspace_handle_t FTN_STDCALL
530#ifdef KMP_STUB
531 return NULL;
532#else
533 return __kmp_get_devices_memspace(0, NULL, KMP_DEREF memspace, 1);
534#endif
535}
536
537omp_allocator_handle_t FTN_STDCALL
538FTN_GET_DEVICES_ALLOCATOR(int KMP_DEREF ndevs, const int *devs,
540#ifdef KMP_STUB
541 return NULL;
542#else
543 return __kmp_get_devices_allocator(KMP_DEREF ndevs, devs, KMP_DEREF memspace,
544 0 /* host */);
545#endif
546}
547
549 int KMP_DEREF dev, omp_allocator_handle_t KMP_DEREF memspace) {
550#ifdef KMP_STUB
551 return NULL;
552#else
553 int dev_num = KMP_DEREF dev;
554 return __kmp_get_devices_allocator(1, &dev_num, KMP_DEREF memspace, 0);
555#endif
556}
557
558omp_allocator_handle_t FTN_STDCALL
561#ifdef KMP_STUB
562 return NULL;
563#else
564 return __kmp_get_devices_allocator(KMP_DEREF ndevs, devs, KMP_DEREF memspace,
565 1);
566#endif
567}
568
570 int KMP_DEREF dev, omp_allocator_handle_t KMP_DEREF memspace) {
571#ifdef KMP_STUB
572 return NULL;
573#else
574 int dev_num = KMP_DEREF dev;
575 return __kmp_get_devices_allocator(1, &dev_num, KMP_DEREF memspace, 1);
576#endif
577}
578
579omp_allocator_handle_t FTN_STDCALL
581#ifdef KMP_STUB
582 return NULL;
583#else
584 return __kmp_get_devices_allocator(0, NULL, KMP_DEREF memspace, 1);
585#endif
586}
587
588int FTN_STDCALL
590#ifdef KMP_STUB
591 return 0;
592#else
594#endif
595}
596
597omp_memspace_handle_t FTN_STDCALL
599 int KMP_DEREF num_resources, int *resources) {
600#ifdef KMP_STUB
601 return NULL;
602#else
603 return __kmp_get_submemspace(KMP_DEREF memspace, KMP_DEREF num_resources,
604 resources);
605#endif
606}
607
608/* OpenMP 5.0 affinity format support */
609#ifndef KMP_STUB
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;
615 }
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];
620 } else {
621 for (size_t i = csrc_size; i < buf_size; ++i)
622 buffer[i] = ' ';
623 }
624}
625
626// Convert a Fortran string to a C string by adding null byte
628 char *buf;
629
630public:
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);
634 buf[size] = '\0';
635 }
637 const char *get() const { return buf; }
638};
639#endif // KMP_STUB
640
641/*
642 * Set the value of the affinity-format-var ICV on the current device to the
643 * format specified in the argument.
644 */
646 char const *format, size_t size) {
647#ifdef KMP_STUB
648 return;
649#else
650 if (!__kmp_init_serial) {
652 }
653 ConvertedString cformat(format, size);
654 // Since the __kmp_affinity_format variable is a C string, do not
655 // use the fortran strncpy function
657 cformat.get(), KMP_STRLEN(cformat.get()));
658#endif
659}
660
661/*
662 * Returns the number of characters required to hold the entire affinity format
663 * specification (not including null byte character) and writes the value of the
664 * affinity-format-var ICV on the current device to buffer. If the return value
665 * is larger than size, the affinity format specification is truncated.
666 */
668 char *buffer, size_t size) {
669#ifdef KMP_STUB
670 return 0;
671#else
672 size_t format_size;
673 if (!__kmp_init_serial) {
675 }
676 format_size = KMP_STRLEN(__kmp_affinity_format);
677 if (buffer && size) {
679 format_size);
680 }
681 return format_size;
682#endif
683}
684
685/*
686 * Prints the thread affinity information of the current thread in the format
687 * specified by the format argument. If the format is NULL or a zero-length
688 * string, the value of the affinity-format-var ICV is used.
689 */
691 char const *format, size_t size) {
692#ifdef KMP_STUB
693 return;
694#else
695 int gtid;
696 if (!TCR_4(__kmp_init_middle)) {
698 }
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) {
705 }
706#endif
707 ConvertedString cformat(format, size);
708 __kmp_aux_display_affinity(gtid, cformat.get());
709#endif
710}
711
712/*
713 * Returns the number of characters required to hold the entire affinity format
714 * specification (not including null byte) and prints the thread affinity
715 * information of the current thread into the character string buffer with the
716 * size of size in the format specified by the format argument. If the format is
717 * NULL or a zero-length string, the value of the affinity-format-var ICV is
718 * used. The buffer must be allocated prior to calling the routine. If the
719 * return value is larger than size, the affinity format specification is
720 * truncated.
721 */
723 char *buffer, char const *format, size_t buf_size, size_t for_size) {
724#if defined(KMP_STUB)
725 return 0;
726#else
727 int gtid;
728 size_t num_required;
729 kmp_str_buf_t capture_buf;
730 if (!TCR_4(__kmp_init_middle)) {
732 }
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) {
739 }
740#endif
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,
746 capture_buf.used);
747 }
748 __kmp_str_buf_free(&capture_buf);
749 return num_required;
750#endif
751}
752
754#ifdef KMP_STUB
755 return 0;
756#else
757 int gtid;
758
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 || \
761 KMP_OS_AIX
762 gtid = __kmp_entry_gtid();
763#elif KMP_OS_WINDOWS
764 if (!__kmp_init_parallel ||
765 (gtid = (int)((kmp_intptr_t)TlsGetValue(__kmp_gtid_threadprivate_key))) ==
766 0) {
767 // Either library isn't initialized or thread is not registered
768 // 0 is the correct TID in this case
769 return 0;
770 }
771 --gtid; // We keep (gtid+1) in TLS
772#elif KMP_OS_LINUX || KMP_OS_WASI
773#ifdef KMP_TDATA_GTID
774 if (__kmp_gtid_mode >= 3) {
775 if ((gtid = __kmp_gtid) == KMP_GTID_DNE) {
776 return 0;
777 }
778 } else {
779#endif
780 if (!__kmp_init_parallel ||
781 (gtid = (int)((kmp_intptr_t)(
782 pthread_getspecific(__kmp_gtid_threadprivate_key)))) == 0) {
783 return 0;
784 }
785 --gtid;
786#ifdef KMP_TDATA_GTID
787 }
788#endif
789#else
790#error Unknown or unsupported OS
791#endif
792
793 return __kmp_tid_from_gtid(gtid);
794#endif
795}
796
797int FTN_STDCALL FTN_GET_NUM_KNOWN_THREADS(void) {
798#ifdef KMP_STUB
799 return 1;
800#else
801 if (!__kmp_init_serial) {
803 }
804 /* NOTE: this is not syncronized, so it can change at any moment */
805 /* NOTE: this number also includes threads preallocated in hot-teams */
806 return TCR_4(__kmp_nth);
807#endif
808}
809
811#ifdef KMP_STUB
812 return 1;
813#else
814 if (!TCR_4(__kmp_init_middle)) {
816 }
817#if KMP_AFFINITY_SUPPORTED
818 if (!__kmp_affinity.flags.reset) {
819 // only bind root here if its affinity reset is not requested
820 int gtid = __kmp_entry_gtid();
821 kmp_info_t *thread = __kmp_threads[gtid];
822 if (thread->th.th_team->t.t_level == 0) {
824 }
825 }
826#endif
827 return __kmp_avail_proc;
828#endif
829}
830
832#ifdef KMP_STUB
834#else
835 kmp_info_t *thread;
836 /* For the thread-private internal controls implementation */
837 thread = __kmp_entry_thread();
838 KMP_INFORM(APIDeprecated, "omp_set_nested", "omp_set_max_active_levels");
840 // Somewhat arbitrarily decide where to get a value for max_active_levels
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);
845#endif
846}
847
849#ifdef KMP_STUB
850 return __kmps_get_nested();
851#else
852 kmp_info_t *thread;
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;
856#endif
857}
858
860#ifdef KMP_STUB
862#else
863 kmp_info_t *thread;
864 /* For the thread-private implementation of the internal controls */
865 thread = __kmp_entry_thread();
866 // !!! What if foreign thread calls it?
868 set__dynamic(thread, KMP_DEREF flag ? true : false);
869#endif
870}
871
873#ifdef KMP_STUB
874 return __kmps_get_dynamic();
875#else
876 kmp_info_t *thread;
877 thread = __kmp_entry_thread();
878 return get__dynamic(thread);
879#endif
880}
881
883#ifdef KMP_STUB
884 return 0;
885#else
887 if (th->th.th_teams_microtask) {
888 // AC: r_in_parallel does not work inside teams construct where real
889 // parallel is inactive, but all threads have same root, so setting it in
890 // one team affects other teams.
891 // The solution is to use per-team nesting level
892 return (th->th.th_team->t.t_active_level ? 1 : 0);
893 } else
894 return (th->th.th_root->r.r_in_parallel ? FTN_TRUE : FTN_FALSE);
895#endif
896}
897
899 int KMP_DEREF modifier) {
900#ifdef KMP_STUB
902#else
903 /* TO DO: For the per-task implementation of the internal controls */
905#endif
906}
907
909 kmp_int64 KMP_DEREF modifier) {
910 int modifier32 = __kmp_ftn_int64_to_int(KMP_DEREF modifier);
912}
913
915 int *modifier) {
916#ifdef KMP_STUB
917 __kmps_get_schedule(kind, modifier);
918#else
919 /* TO DO: For the per-task implementation of the internal controls */
920 __kmp_get_schedule(__kmp_entry_gtid(), kind, modifier);
921#endif
922}
923
924void FTN_STDCALL FTN_GET_SCHEDULE_8(kmp_sched_t *kind, kmp_int64 *modifier) {
925 int modifier32;
926 KMP_EXPAND_NAME(FTN_GET_SCHEDULE)(kind, &modifier32);
927 *modifier = modifier32;
928}
929
931#ifdef KMP_STUB
932// Nothing.
933#else
934 /* TO DO: We want per-task implementation of this internal control */
936#endif
937}
938
943
945#ifdef KMP_STUB
946 return 0;
947#else
948 /* TO DO: We want per-task implementation of this internal control */
949 if (!TCR_4(__kmp_init_middle)) {
951 }
953#endif
954}
955
957#ifdef KMP_STUB
958 return 0; // returns 0 if it is called from the sequential part of the program
959#else
960 /* TO DO: For the per-task implementation of the internal controls */
961 return __kmp_entry_thread()->th.th_team->t.t_active_level;
962#endif
963}
964
966#ifdef KMP_STUB
967 return 0; // returns 0 if it is called from the sequential part of the program
968#else
969 /* TO DO: For the per-task implementation of the internal controls */
970 return __kmp_entry_thread()->th.th_team->t.t_level;
971#endif
972}
973
974int FTN_STDCALL
976#ifdef KMP_STUB
977 return (KMP_DEREF level) ? (-1) : (0);
978#else
980#endif
981}
982
987
989#ifdef KMP_STUB
990 return (KMP_DEREF level) ? (-1) : (1);
991#else
993#endif
994}
995
1000
1002#ifdef KMP_STUB
1003 return 1; // TO DO: clarify whether it returns 1 or 0?
1004#else
1005 int gtid;
1006 kmp_info_t *thread;
1007 if (!__kmp_init_serial) {
1009 }
1010
1011 gtid = __kmp_entry_gtid();
1012 thread = __kmp_threads[gtid];
1013 // If thread_limit for the target task is defined, return that instead of the
1014 // regular task thread_limit
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;
1018#endif
1019}
1020
1022#ifdef KMP_STUB
1023 return 0; // TO DO: clarify whether it returns 1 or 0?
1024#else
1025 if (!TCR_4(__kmp_init_parallel)) {
1026 return 0;
1027 }
1028 return __kmp_entry_thread()->th.th_current_task->td_flags.final;
1029#endif
1030}
1031
1033#ifdef KMP_STUB
1034 return __kmps_get_proc_bind();
1035#else
1037#endif
1038}
1039
1041#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
1042 return 0;
1043#else
1044 if (!TCR_4(__kmp_init_middle)) {
1046 }
1047 if (!KMP_AFFINITY_CAPABLE())
1048 return 0;
1049 if (!__kmp_affinity.flags.reset) {
1050 // only bind root here if its affinity reset is not requested
1051 int gtid = __kmp_entry_gtid();
1052 kmp_info_t *thread = __kmp_threads[gtid];
1053 if (thread->th.th_team->t.t_level == 0) {
1055 }
1056 }
1057 return __kmp_affinity.num_masks;
1058#endif
1059}
1060
1061int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_NUM_PROCS)(int place_num) {
1062#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
1063 return 0;
1064#else
1065 int i;
1066 int retval = 0;
1067 if (!TCR_4(__kmp_init_middle)) {
1069 }
1070 if (!KMP_AFFINITY_CAPABLE())
1071 return 0;
1072 if (!__kmp_affinity.flags.reset) {
1073 // only bind root here if its affinity reset is not requested
1074 int gtid = __kmp_entry_gtid();
1075 kmp_info_t *thread = __kmp_threads[gtid];
1076 if (thread->th.th_team->t.t_level == 0) {
1078 }
1079 }
1080 if (place_num < 0 || place_num >= (int)__kmp_affinity.num_masks)
1081 return 0;
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))) {
1086 continue;
1087 }
1088 ++retval;
1089 }
1090 return retval;
1091#endif
1092}
1093
1098
1099void FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_PLACE_PROC_IDS)(int place_num,
1100 int *ids) {
1101#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
1102// Nothing.
1103#else
1104 int i, j;
1105 if (!TCR_4(__kmp_init_middle)) {
1107 }
1108 if (!KMP_AFFINITY_CAPABLE())
1109 return;
1110 if (!__kmp_affinity.flags.reset) {
1111 // only bind root here if its affinity reset is not requested
1112 int gtid = __kmp_entry_gtid();
1113 kmp_info_t *thread = __kmp_threads[gtid];
1114 if (thread->th.th_team->t.t_level == 0) {
1116 }
1117 }
1118 if (place_num < 0 || place_num >= (int)__kmp_affinity.num_masks)
1119 return;
1120 kmp_affin_mask_t *mask = KMP_CPU_INDEX(__kmp_affinity.masks, place_num);
1121 j = 0;
1122 KMP_CPU_SET_ITERATE(i, mask) {
1123 if ((!KMP_CPU_ISSET(i, __kmp_affin_fullMask)) ||
1124 (!KMP_CPU_ISSET(i, mask))) {
1125 continue;
1126 }
1127 ids[j++] = i;
1128 }
1129#endif
1130}
1131
1133 kmp_int64 *ids) {
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);
1136 int *ids32;
1137 if (n <= 0)
1138 return;
1139 ids32 = (int *)KMP_INTERNAL_MALLOC(sizeof(int) * n);
1140 if (ids32 == NULL)
1141 return;
1142 KMP_EXPAND_NAME(FTN_GET_PLACE_PROC_IDS)(place_num32, ids32);
1143 for (int i = 0; i < n; ++i)
1144 ids[i] = ids32[i];
1145 KMP_INTERNAL_FREE(ids32);
1146}
1147
1149#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
1150 return -1;
1151#else
1152 int gtid;
1153 kmp_info_t *thread;
1154 if (!TCR_4(__kmp_init_middle)) {
1156 }
1157 if (!KMP_AFFINITY_CAPABLE())
1158 return -1;
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) {
1163 }
1164 if (thread->th.th_current_place < 0)
1165 return -1;
1166 return thread->th.th_current_place;
1167#endif
1168}
1169
1171#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
1172 return 0;
1173#else
1174 int gtid, num_places, first_place, last_place;
1175 kmp_info_t *thread;
1176 if (!TCR_4(__kmp_init_middle)) {
1178 }
1179 if (!KMP_AFFINITY_CAPABLE())
1180 return 0;
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) {
1185 }
1186 first_place = thread->th.th_first_place;
1187 last_place = thread->th.th_last_place;
1188 if (first_place < 0 || last_place < 0)
1189 return 0;
1190 if (first_place <= last_place)
1191 num_places = last_place - first_place + 1;
1192 else
1193 num_places = __kmp_affinity.num_masks - first_place + last_place + 1;
1194 return num_places;
1195#endif
1196}
1197
1198void FTN_STDCALL
1200#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
1201// Nothing.
1202#else
1203 int i, gtid, place_num, first_place, last_place, start, end;
1204 kmp_info_t *thread;
1205 if (!TCR_4(__kmp_init_middle)) {
1207 }
1208 if (!KMP_AFFINITY_CAPABLE())
1209 return;
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) {
1214 }
1215 first_place = thread->th.th_first_place;
1216 last_place = thread->th.th_last_place;
1217 if (first_place < 0 || last_place < 0)
1218 return;
1219 if (first_place <= last_place) {
1220 start = first_place;
1221 end = last_place;
1222 } else {
1223 start = last_place;
1224 end = first_place;
1225 }
1226 for (i = 0, place_num = start; place_num <= end; ++place_num, ++i) {
1227 place_nums[i] = place_num;
1228 }
1229#endif
1230}
1231
1232void FTN_STDCALL FTN_GET_PARTITION_PLACE_NUMS_8(kmp_int64 *place_nums) {
1233#if defined(KMP_STUB) || !KMP_AFFINITY_SUPPORTED
1234// Nothing.
1235#else
1236 int i, gtid, place_num, first_place, last_place, start, end;
1237 kmp_info_t *thread;
1238 if (!TCR_4(__kmp_init_middle)) {
1240 }
1241 if (!KMP_AFFINITY_CAPABLE())
1242 return;
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) {
1247 }
1248 first_place = thread->th.th_first_place;
1249 last_place = thread->th.th_last_place;
1250 if (first_place < 0 || last_place < 0)
1251 return;
1252 if (first_place <= last_place) {
1253 start = first_place;
1254 end = last_place;
1255 } else {
1256 start = last_place;
1257 end = first_place;
1258 }
1259 for (i = 0, place_num = start; place_num <= end; ++place_num, ++i) {
1260 place_nums[i] = place_num;
1261 }
1262#endif
1263}
1264
1266#ifdef KMP_STUB
1267 return 1;
1268#else
1269 return __kmp_aux_get_num_teams();
1270#endif
1271}
1272
1274#ifdef KMP_STUB
1275 return 0;
1276#else
1277 return __kmp_aux_get_team_num();
1278#endif
1279}
1280
1282#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
1283 return 0;
1284#else
1285 return __kmp_entry_thread()->th.th_current_task->td_icvs.default_device;
1286#endif
1287}
1288
1290#if KMP_MIC || KMP_OS_DARWIN || defined(KMP_STUB)
1291// Nothing.
1292#else
1293 __kmp_entry_thread()->th.th_current_task->td_icvs.default_device =
1294 KMP_DEREF arg;
1295#endif
1296}
1297
1302
1303// Get number of NON-HOST devices.
1304// libomptarget, if loaded, provides this function in api.cpp.
1308#if KMP_MIC || KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
1309 return 0;
1310#else
1311 int (*fptr)();
1312 if ((*(void **)(&fptr) = KMP_DLSYM("__tgt_get_num_devices"))) {
1313 return (*fptr)();
1314 } else if ((*(void **)(&fptr) = KMP_DLSYM_NEXT("omp_get_num_devices"))) {
1315 return (*fptr)();
1316 } else if ((*(void **)(&fptr) = KMP_DLSYM("_Offload_number_of_devices"))) {
1317 return (*fptr)();
1318 } else { // liboffload & libomptarget don't exist
1319 return 0;
1320 }
1321#endif // KMP_MIC || KMP_OS_DARWIN || KMP_OS_WINDOWS || defined(KMP_STUB)
1322}
1323
1324// This function always returns true when called on host device.
1325// Compiler/libomptarget should handle when it is called inside target region.
1329 return 1; // This is the host
1330}
1331
1332// libomptarget, if loaded, provides this function
1336 // same as omp_get_num_devices()
1338}
1339
1340#if defined(KMP_STUB)
1341// Entries for stubs library
1342// As all *target* functions are C-only parameters always passed by value
1343void *FTN_STDCALL FTN_TARGET_ALLOC(size_t size, int device_num) { return 0; }
1344
1345void FTN_STDCALL FTN_TARGET_FREE(void *device_ptr, int device_num) {}
1346
1347int FTN_STDCALL FTN_TARGET_IS_PRESENT(void *ptr, int device_num) { return 0; }
1348
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) {
1352 return -1;
1353}
1354
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,
1359 int src_device) {
1360 return -1;
1361}
1362
1363int FTN_STDCALL FTN_TARGET_ASSOCIATE_PTR(void *host_ptr, void *device_ptr,
1364 size_t size, size_t device_offset,
1365 int device_num) {
1366 return -1;
1367}
1368
1369int FTN_STDCALL FTN_TARGET_DISASSOCIATE_PTR(void *host_ptr, int device_num) {
1370 return -1;
1371}
1372#endif // defined(KMP_STUB)
1373
1374#ifdef KMP_STUB
1375typedef enum { UNINIT = -1, UNLOCKED, LOCKED } kmp_stub_lock_t;
1376#endif /* KMP_STUB */
1377
1378#if KMP_USE_DYNAMIC_LOCK
1379void FTN_STDCALL FTN_INIT_LOCK_WITH_HINT(void **user_lock,
1380 uintptr_t KMP_DEREF hint) {
1381#ifdef KMP_STUB
1382 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1383#else
1384 int gtid = __kmp_entry_gtid();
1385#if OMPT_SUPPORT && OMPT_OPTIONAL
1386 OMPT_STORE_RETURN_ADDRESS(gtid);
1387#endif
1388 __kmpc_init_lock_with_hint(NULL, gtid, user_lock, KMP_DEREF hint);
1389#endif
1390}
1391
1392void FTN_STDCALL FTN_INIT_NEST_LOCK_WITH_HINT(void **user_lock,
1393 uintptr_t KMP_DEREF hint) {
1394#ifdef KMP_STUB
1395 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1396#else
1397 int gtid = __kmp_entry_gtid();
1398#if OMPT_SUPPORT && OMPT_OPTIONAL
1399 OMPT_STORE_RETURN_ADDRESS(gtid);
1400#endif
1401 __kmpc_init_nest_lock_with_hint(NULL, gtid, user_lock, KMP_DEREF hint);
1402#endif
1403}
1404#endif
1405
1406/* initialize the lock */
1407void FTN_STDCALL KMP_EXPAND_NAME(FTN_INIT_LOCK)(void **user_lock) {
1408#ifdef KMP_STUB
1409 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1410#else
1411 int gtid = __kmp_entry_gtid();
1412#if OMPT_SUPPORT && OMPT_OPTIONAL
1413 OMPT_STORE_RETURN_ADDRESS(gtid);
1414#endif
1415 __kmpc_init_lock(NULL, gtid, user_lock);
1416#endif
1417}
1418
1419/* initialize the lock */
1420void FTN_STDCALL KMP_EXPAND_NAME(FTN_INIT_NEST_LOCK)(void **user_lock) {
1421#ifdef KMP_STUB
1422 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1423#else
1424 int gtid = __kmp_entry_gtid();
1425#if OMPT_SUPPORT && OMPT_OPTIONAL
1426 OMPT_STORE_RETURN_ADDRESS(gtid);
1427#endif
1428 __kmpc_init_nest_lock(NULL, gtid, user_lock);
1429#endif
1430}
1431
1432void FTN_STDCALL KMP_EXPAND_NAME(FTN_DESTROY_LOCK)(void **user_lock) {
1433#ifdef KMP_STUB
1434 *((kmp_stub_lock_t *)user_lock) = UNINIT;
1435#else
1436 int gtid = __kmp_entry_gtid();
1437#if OMPT_SUPPORT && OMPT_OPTIONAL
1438 OMPT_STORE_RETURN_ADDRESS(gtid);
1439#endif
1440 __kmpc_destroy_lock(NULL, gtid, user_lock);
1441#endif
1442}
1443
1444void FTN_STDCALL KMP_EXPAND_NAME(FTN_DESTROY_NEST_LOCK)(void **user_lock) {
1445#ifdef KMP_STUB
1446 *((kmp_stub_lock_t *)user_lock) = UNINIT;
1447#else
1448 int gtid = __kmp_entry_gtid();
1449#if OMPT_SUPPORT && OMPT_OPTIONAL
1450 OMPT_STORE_RETURN_ADDRESS(gtid);
1451#endif
1452 __kmpc_destroy_nest_lock(NULL, gtid, user_lock);
1453#endif
1454}
1455
1456void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_LOCK)(void **user_lock) {
1457#ifdef KMP_STUB
1458 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1459 // TODO: Issue an error.
1460 }
1461 if (*((kmp_stub_lock_t *)user_lock) != UNLOCKED) {
1462 // TODO: Issue an error.
1463 }
1464 *((kmp_stub_lock_t *)user_lock) = LOCKED;
1465#else
1466 int gtid = __kmp_entry_gtid();
1467#if OMPT_SUPPORT && OMPT_OPTIONAL
1468 OMPT_STORE_RETURN_ADDRESS(gtid);
1469#endif
1470 __kmpc_set_lock(NULL, gtid, user_lock);
1471#endif
1472}
1473
1474void FTN_STDCALL KMP_EXPAND_NAME(FTN_SET_NEST_LOCK)(void **user_lock) {
1475#ifdef KMP_STUB
1476 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1477 // TODO: Issue an error.
1478 }
1479 (*((int *)user_lock))++;
1480#else
1481 int gtid = __kmp_entry_gtid();
1482#if OMPT_SUPPORT && OMPT_OPTIONAL
1483 OMPT_STORE_RETURN_ADDRESS(gtid);
1484#endif
1485 __kmpc_set_nest_lock(NULL, gtid, user_lock);
1486#endif
1487}
1488
1489void FTN_STDCALL KMP_EXPAND_NAME(FTN_UNSET_LOCK)(void **user_lock) {
1490#ifdef KMP_STUB
1491 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1492 // TODO: Issue an error.
1493 }
1494 if (*((kmp_stub_lock_t *)user_lock) == UNLOCKED) {
1495 // TODO: Issue an error.
1496 }
1497 *((kmp_stub_lock_t *)user_lock) = UNLOCKED;
1498#else
1499 int gtid = __kmp_entry_gtid();
1500#if OMPT_SUPPORT && OMPT_OPTIONAL
1501 OMPT_STORE_RETURN_ADDRESS(gtid);
1502#endif
1503 __kmpc_unset_lock(NULL, gtid, user_lock);
1504#endif
1505}
1506
1507void FTN_STDCALL KMP_EXPAND_NAME(FTN_UNSET_NEST_LOCK)(void **user_lock) {
1508#ifdef KMP_STUB
1509 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1510 // TODO: Issue an error.
1511 }
1512 if (*((kmp_stub_lock_t *)user_lock) == UNLOCKED) {
1513 // TODO: Issue an error.
1514 }
1515 (*((int *)user_lock))--;
1516#else
1517 int gtid = __kmp_entry_gtid();
1518#if OMPT_SUPPORT && OMPT_OPTIONAL
1519 OMPT_STORE_RETURN_ADDRESS(gtid);
1520#endif
1521 __kmpc_unset_nest_lock(NULL, gtid, user_lock);
1522#endif
1523}
1524
1525int FTN_STDCALL KMP_EXPAND_NAME(FTN_TEST_LOCK)(void **user_lock) {
1526#ifdef KMP_STUB
1527 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1528 // TODO: Issue an error.
1529 }
1530 if (*((kmp_stub_lock_t *)user_lock) == LOCKED) {
1531 return 0;
1532 }
1533 *((kmp_stub_lock_t *)user_lock) = LOCKED;
1534 return 1;
1535#else
1536 int gtid = __kmp_entry_gtid();
1537#if OMPT_SUPPORT && OMPT_OPTIONAL
1538 OMPT_STORE_RETURN_ADDRESS(gtid);
1539#endif
1540 return __kmpc_test_lock(NULL, gtid, user_lock);
1541#endif
1542}
1543
1544int FTN_STDCALL KMP_EXPAND_NAME(FTN_TEST_NEST_LOCK)(void **user_lock) {
1545#ifdef KMP_STUB
1546 if (*((kmp_stub_lock_t *)user_lock) == UNINIT) {
1547 // TODO: Issue an error.
1548 }
1549 return ++(*((int *)user_lock));
1550#else
1551 int gtid = __kmp_entry_gtid();
1552#if OMPT_SUPPORT && OMPT_OPTIONAL
1553 OMPT_STORE_RETURN_ADDRESS(gtid);
1554#endif
1555 return __kmpc_test_nest_lock(NULL, gtid, user_lock);
1556#endif
1557}
1558
1559double FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_WTIME)(void) {
1560#ifdef KMP_STUB
1561 return __kmps_get_wtime();
1562#else
1563 double data;
1564#if !KMP_OS_LINUX
1565 // We don't need library initialization to get the time on Linux* OS. The
1566 // routine can be used to measure library initialization time on Linux* OS now
1567 if (!__kmp_init_serial) {
1569 }
1570#endif
1572 return data;
1573#endif
1574}
1575
1576double FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_WTICK)(void) {
1577#ifdef KMP_STUB
1578 return __kmps_get_wtick();
1579#else
1580 double data;
1581 if (!__kmp_init_serial) {
1583 }
1585 return data;
1586#endif
1587}
1588
1589/* ------------------------------------------------------------------------ */
1590
1591void *FTN_STDCALL FTN_MALLOC(size_t KMP_DEREF size) {
1592 // kmpc_malloc initializes the library if needed
1593 return kmpc_malloc(KMP_DEREF size);
1594}
1595
1596void *FTN_STDCALL FTN_ALIGNED_MALLOC(size_t KMP_DEREF size,
1597 size_t KMP_DEREF alignment) {
1598 // kmpc_aligned_malloc initializes the library if needed
1600}
1601
1602void *FTN_STDCALL FTN_CALLOC(size_t KMP_DEREF nelem, size_t KMP_DEREF elsize) {
1603 // kmpc_calloc initializes the library if needed
1604 return kmpc_calloc(KMP_DEREF nelem, KMP_DEREF elsize);
1605}
1606
1607void *FTN_STDCALL FTN_REALLOC(void *KMP_DEREF ptr, size_t KMP_DEREF size) {
1608 // kmpc_realloc initializes the library if needed
1609 return kmpc_realloc(KMP_DEREF ptr, KMP_DEREF size);
1610}
1611
1612void FTN_STDCALL FTN_KFREE(void *KMP_DEREF ptr) {
1613 // does nothing if the library is not initialized
1614 kmpc_free(KMP_DEREF ptr);
1615}
1616
1617void FTN_STDCALL FTN_SET_WARNINGS_ON(void) {
1618#ifndef KMP_STUB
1620#endif
1621}
1622
1623void FTN_STDCALL FTN_SET_WARNINGS_OFF(void) {
1624#ifndef KMP_STUB
1626#endif
1627}
1628
1629void FTN_STDCALL FTN_SET_DEFAULTS(char const *str
1630#ifndef PASS_ARGS_BY_VALUE
1631 ,
1632 int len
1633#endif
1634) {
1635#ifndef KMP_STUB
1636 size_t sz;
1637 char const *defaults = str;
1638
1639#ifdef PASS_ARGS_BY_VALUE
1640 sz = KMP_STRLEN(str);
1641#else
1642 sz = (size_t)len;
1643 ConvertedString cstr(str, sz);
1644 defaults = cstr.get();
1645#endif
1646
1647 __kmp_aux_set_defaults(defaults, sz);
1648#endif
1649}
1650
1651/* ------------------------------------------------------------------------ */
1652
1653/* returns the status of cancellation */
1655#ifdef KMP_STUB
1656 return 0 /* false */;
1657#else
1658 // initialize the library if needed
1659 if (!__kmp_init_serial) {
1661 }
1663#endif
1664}
1665
1666int FTN_STDCALL FTN_GET_CANCELLATION_STATUS(int cancel_kind) {
1667#ifdef KMP_STUB
1668 return 0 /* false */;
1669#else
1670 return __kmp_get_cancellation_status(cancel_kind);
1671#endif
1672}
1673
1674/* returns the maximum allowed task priority */
1676#ifdef KMP_STUB
1677 return 0;
1678#else
1679 if (!__kmp_init_serial) {
1681 }
1683#endif
1684}
1685
1686// These functions will be defined in libomptarget. When libomptarget is not
1687// loaded, we assume we are on the host.
1688// Compiler/libomptarget will handle this if called inside target.
1690int FTN_STDCALL FTN_GET_DEVICE_NUM(void) {
1692}
1693const char *FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_UID_FROM_DEVICE)(int device_num)
1695const char *FTN_STDCALL
1697#if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
1698 return nullptr;
1699#else
1700 const char *(*fptr)(int);
1701 if ((*(void **)(&fptr) = KMP_DLSYM_NEXT("omp_get_uid_from_device")))
1702 return (*fptr)(device_num);
1703 // Returns the same string as used by libomptarget
1704 return "HOST";
1705#endif
1706}
1707int FTN_STDCALL KMP_EXPAND_NAME(FTN_GET_DEVICE_FROM_UID)(const char *device_uid)
1709int FTN_STDCALL
1711#if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
1712 return -2; // omp_invalid_device, see definition in omp.h
1713#else
1714 int (*fptr)(const char *);
1715 if ((*(void **)(&fptr) = KMP_DLSYM_NEXT("omp_get_device_from_uid")))
1716 return (*fptr)(device_uid);
1718#endif
1719}
1720
1721// Compiler will ensure that this is only called from host in sequential region
1723 int device_num) {
1724#ifdef KMP_STUB
1725 return 1; // just fail
1726#else
1727 if (kind == kmp_stop_tool_paused)
1728 return 1; // stop_tool must not be specified
1729 if (device_num == KMP_EXPAND_NAME(FTN_GET_INITIAL_DEVICE)())
1730 return __kmpc_pause_resource(kind);
1731 else {
1732 int (*fptr)(kmp_pause_status_t, int);
1733 if ((*(void **)(&fptr) = KMP_DLSYM("tgt_pause_resource")))
1734 return (*fptr)(kind, device_num);
1735 else
1736 return 1; // just fail if there is no libomptarget
1737 }
1738#endif
1739}
1740
1742 kmp_int64 KMP_DEREF device_num) {
1744 kind, __kmp_ftn_int64_to_int(KMP_DEREF device_num));
1745}
1746
1747// Compiler will ensure that this is only called from host in sequential region
1748int FTN_STDCALL
1750#ifdef KMP_STUB
1751 return 1; // just fail
1752#else
1753 int fails = 0;
1754 int (*fptr)(kmp_pause_status_t, int);
1755 if ((*(void **)(&fptr) = KMP_DLSYM("tgt_pause_resource")))
1756 fails = (*fptr)(kind, KMP_DEVICE_ALL); // pause devices
1757 fails += __kmpc_pause_resource(kind); // pause host
1758 return fails;
1759#endif
1760}
1761
1762// Returns the maximum number of nesting levels supported by implementation
1763int FTN_STDCALL FTN_GET_SUPPORTED_ACTIVE_LEVELS(void) {
1764#ifdef KMP_STUB
1765 return 1;
1766#else
1768#endif
1769}
1770
1772#ifndef KMP_STUB
1774#endif
1775}
1776
1777// nteams-var per-device ICV
1778void FTN_STDCALL FTN_SET_NUM_TEAMS(int KMP_DEREF num_teams) {
1779#ifdef KMP_STUB
1780// Nothing.
1781#else
1782 if (!__kmp_init_serial) {
1784 }
1786 // OpenMP 5.1, Section 3.4.3: omp_set_num_teams may not be called from
1787 // within a parallel region other than the implicit parallel region.
1788 // Also guard against calls from within a teams region: nteams-var is a
1789 // device-scoped ICV and concurrent modification from multiple team initial
1790 // threads may race.
1791 // t_level counts both active and serialized parallel levels (0 at the
1792 // implicit top-level parallel region), so this catches all non-implicit
1793 // parallel regions.
1794 if (th->th.th_teams_microtask || th->th.th_team->t.t_level > 0) {
1795 KMP_WARNING(SetNumTeamsInParOrTeamsRegion, "omp_set_num_teams");
1796 return;
1797 }
1798 __kmp_set_num_teams(KMP_DEREF num_teams);
1799#endif
1800}
1801
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));
1805}
1806
1807int FTN_STDCALL FTN_GET_MAX_TEAMS(void) {
1808#ifdef KMP_STUB
1809 return 1;
1810#else
1811 if (!__kmp_init_serial) {
1813 }
1814 return __kmp_get_max_teams();
1815#endif
1816}
1817// teams-thread-limit-var per-device ICV
1818void FTN_STDCALL FTN_SET_TEAMS_THREAD_LIMIT(int KMP_DEREF limit) {
1819#ifdef KMP_STUB
1820// Nothing.
1821#else
1822 if (!__kmp_init_serial) {
1824 }
1826 // OpenMP 5.1, Section 3.4.5: omp_set_teams_thread_limit may not be called
1827 // from within a parallel region other than the implicit parallel region.
1828 // Also guard against calls from within a teams region:
1829 // teams-thread-limit-var is a device-scoped ICV and concurrent modification
1830 // from multiple team initial threads may race.
1831 // t_level counts both active and serialized parallel levels (0 at the
1832 // implicit top-level parallel region), so this catches all non-implicit
1833 // parallel regions.
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");
1837 return;
1838 }
1840#endif
1841}
1842
1844 int limit32 = __kmp_ftn_int64_to_int(KMP_DEREF limit);
1846}
1847
1848int FTN_STDCALL FTN_GET_TEAMS_THREAD_LIMIT(void) {
1849#ifdef KMP_STUB
1850 return 1;
1851#else
1852 if (!__kmp_init_serial) {
1854 }
1856#endif
1857}
1858
1859/// TODO: Include the `omp.h` of the current build
1860/* OpenMP 5.1 interop */
1861typedef intptr_t omp_intptr_t;
1862
1863/* 0..omp_get_num_interop_properties()-1 are reserved for implementation-defined
1864 * properties */
1877
1878#define omp_interop_none 0
1879
1890
1900
1901typedef void *omp_interop_t;
1902
1903// libomptarget, if loaded, provides this function
1904int FTN_STDCALL FTN_GET_NUM_INTEROP_PROPERTIES(const omp_interop_t interop) {
1905#if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
1906 return 0;
1907#else
1908 int (*fptr)(const omp_interop_t);
1909 if ((*(void **)(&fptr) = KMP_DLSYM_NEXT("omp_get_num_interop_properties")))
1910 return (*fptr)(interop);
1911 return 0;
1912#endif
1913}
1914
1915/// TODO Convert FTN_GET_INTEROP_XXX functions into a macro like interop.cpp
1916// libomptarget, if loaded, provides this function
1917intptr_t FTN_STDCALL FTN_GET_INTEROP_INT(const omp_interop_t interop,
1918 omp_interop_property_t property_id,
1919 int *err) {
1920#if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
1921 return 0;
1922#else
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);
1926 return 0;
1927#endif
1928}
1929
1930// libomptarget, if loaded, provides this function
1931void *FTN_STDCALL FTN_GET_INTEROP_PTR(const omp_interop_t interop,
1932 omp_interop_property_t property_id,
1933 int *err) {
1934#if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
1935 return nullptr;
1936#else
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);
1940 return nullptr;
1941#endif
1942}
1943
1944// libomptarget, if loaded, provides this function
1945const char *FTN_STDCALL FTN_GET_INTEROP_STR(const omp_interop_t interop,
1946 omp_interop_property_t property_id,
1947 int *err) {
1948#if KMP_OS_DARWIN || KMP_OS_WASI || defined(KMP_STUB)
1949 return nullptr;
1950#else
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);
1954 return nullptr;
1955#endif
1956}
1957
1958// libomptarget, if loaded, provides this function
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)
1962 return nullptr;
1963#else
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);
1967 return nullptr;
1968#endif
1969}
1970
1971// libomptarget, if loaded, provides this function
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)
1975 return nullptr;
1976#else
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);
1980 return nullptr;
1981#endif
1982}
1983
1984// libomptarget, if loaded, provides this function
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)
1988 return nullptr;
1989#else
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);
1993 return nullptr;
1994#endif
1995}
1996
1997// display environment variables when requested
1998void FTN_STDCALL FTN_DISPLAY_ENV(int verbose) {
1999#ifndef KMP_STUB
2000 __kmp_omp_display_env(verbose);
2001#endif
2002}
2003
2004int FTN_STDCALL FTN_IN_EXPLICIT_TASK(void) {
2005#ifdef KMP_STUB
2006 return 0;
2007#else
2008 int gtid = __kmp_entry_gtid();
2009 return __kmp_thread_from_gtid(gtid)->th.th_current_task->td_flags.tasktype;
2010#endif
2011}
2012
2013// GCC compatibility (versioned symbols)
2014#ifdef KMP_USE_VERSION_SYMBOLS
2015
2016/* These following sections create versioned symbols for the
2017 omp_* routines. The KMP_VERSION_SYMBOL macro expands the API name and
2018 then maps it to a versioned symbol.
2019 libgomp ``versions'' its symbols (OMP_1.0, OMP_2.0, OMP_3.0, ...) while also
2020 retaining the default version which libomp uses: VERSION (defined in
2021 exports_so.txt). If you want to see the versioned symbols for libgomp.so.1
2022 then just type:
2023
2024 objdump -T /path/to/libgomp.so.1 | grep omp_
2025
2026 Example:
2027 Step 1) Create __kmp_api_omp_set_num_threads_10_alias which is alias of
2028 __kmp_api_omp_set_num_threads
2029 Step 2) Set __kmp_api_omp_set_num_threads_10_alias to version:
2030 omp_set_num_threads@OMP_1.0
2031 Step 2B) Set __kmp_api_omp_set_num_threads to default version:
2032 omp_set_num_threads@@VERSION
2033*/
2034
2035// OMP_1.0 versioned symbols
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");
2048KMP_VERSION_SYMBOL(FTN_DESTROY_LOCK, 10, "OMP_1.0");
2050KMP_VERSION_SYMBOL(FTN_SET_LOCK, 10, "OMP_1.0");
2052KMP_VERSION_SYMBOL(FTN_UNSET_LOCK, 10, "OMP_1.0");
2054KMP_VERSION_SYMBOL(FTN_TEST_LOCK, 10, "OMP_1.0");
2056
2057// OMP_2.0 versioned symbols
2058KMP_VERSION_SYMBOL(FTN_GET_WTICK, 20, "OMP_2.0");
2059KMP_VERSION_SYMBOL(FTN_GET_WTIME, 20, "OMP_2.0");
2060
2061// OMP_3.0 versioned symbols
2062KMP_VERSION_SYMBOL(FTN_SET_SCHEDULE, 30, "OMP_3.0");
2063KMP_VERSION_SYMBOL(FTN_GET_SCHEDULE, 30, "OMP_3.0");
2068KMP_VERSION_SYMBOL(FTN_GET_LEVEL, 30, "OMP_3.0");
2071
2072// the lock routines have a 1.0 and 3.0 version
2073KMP_VERSION_SYMBOL(FTN_INIT_LOCK, 30, "OMP_3.0");
2075KMP_VERSION_SYMBOL(FTN_DESTROY_LOCK, 30, "OMP_3.0");
2077KMP_VERSION_SYMBOL(FTN_SET_LOCK, 30, "OMP_3.0");
2079KMP_VERSION_SYMBOL(FTN_UNSET_LOCK, 30, "OMP_3.0");
2081KMP_VERSION_SYMBOL(FTN_TEST_LOCK, 30, "OMP_3.0");
2083
2084// OMP_3.1 versioned symbol
2085KMP_VERSION_SYMBOL(FTN_IN_FINAL, 31, "OMP_3.1");
2086
2087// OMP_4.0 versioned symbols
2090KMP_VERSION_SYMBOL(FTN_GET_TEAM_NUM, 40, "OMP_4.0");
2096
2097// OMP_4.5 versioned symbols
2106
2107// OMP_5.0 versioned symbols
2108// KMP_VERSION_SYMBOL(FTN_GET_DEVICE_NUM, 50, "OMP_5.0");
2111// The C versions (KMP_FTN_PLAIN) of these symbols are in kmp_csupport.c
2112#if KMP_FTN_ENTRIES == KMP_FTN_APPEND
2117#endif
2118// KMP_VERSION_SYMBOL(FTN_GET_SUPPORTED_ACTIVE_LEVELS, 50, "OMP_5.0");
2119// KMP_VERSION_SYMBOL(FTN_FULFILL_EVENT, 50, "OMP_5.0");
2120
2121// OMP_6.0 versioned symbols
2124
2125#endif // KMP_USE_VERSION_SYMBOLS
2126
2127#ifdef __cplusplus
2128} // extern "C"
2129#endif // __cplusplus
2130
2131// end of file //
const char * get() const
ConvertedString(char const *fortran_str, size_t size)
int64_t kmp_int64
Definition common.h:10
KMP_EXPORT kmp_int32 __kmpc_bound_num_threads(ident_t *)
void
Definition ittnotify.h:3324
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle __itt_metadata_type size_t void * data
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int mask
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp end
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle __itt_metadata_type size_t void ITT_FORMAT p const __itt_domain __itt_id __itt_string_handle const wchar_t size_t length
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle __itt_metadata_type size_t void ITT_FORMAT p const __itt_domain __itt_id __itt_string_handle const wchar_t size_t ITT_FORMAT lu const __itt_domain __itt_id __itt_relation __itt_id ITT_FORMAT p const wchar_t int ITT_FORMAT __itt_group_mark d __itt_event event
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long value
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t size
void const char const char int ITT_FORMAT __itt_group_sync x void const char ITT_FORMAT __itt_group_sync s void ITT_FORMAT __itt_group_sync p void ITT_FORMAT p void ITT_FORMAT p no args __itt_suppress_mode_t unsigned int void size_t ITT_FORMAT d void ITT_FORMAT p void ITT_FORMAT p __itt_model_site __itt_model_site_instance ITT_FORMAT p __itt_model_task __itt_model_task_instance ITT_FORMAT p void ITT_FORMAT p void ITT_FORMAT p void size_t ITT_FORMAT d void ITT_FORMAT p const wchar_t ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s const char ITT_FORMAT s no args void ITT_FORMAT p size_t ITT_FORMAT d no args const wchar_t const wchar_t ITT_FORMAT s __itt_heap_function void size_t int ITT_FORMAT d __itt_heap_function void ITT_FORMAT p __itt_heap_function void void size_t int ITT_FORMAT d no args no args unsigned int ITT_FORMAT u const __itt_domain __itt_id ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain __itt_id ITT_FORMAT p const __itt_domain __itt_id __itt_timestamp __itt_timestamp ITT_FORMAT lu const __itt_domain __itt_id __itt_id __itt_string_handle ITT_FORMAT p const __itt_domain ITT_FORMAT p const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_string_handle unsigned long long ITT_FORMAT lu const __itt_domain __itt_id __itt_string_handle __itt_metadata_type size_t void ITT_FORMAT p const __itt_domain __itt_id __itt_string_handle const wchar_t size_t ITT_FORMAT lu const __itt_domain __itt_id __itt_relation __itt_id ITT_FORMAT p const wchar_t int ITT_FORMAT __itt_group_mark d int
KMP_EXPORT void __kmpc_destroy_nest_lock(ident_t *loc, kmp_int32 gtid, void **user_lock)
void * omp_memspace_handle_t
Definition kmp.h:1055
void * omp_allocator_handle_t
Definition kmp.h:1073
int __kmp_generate_warnings
omp_allocator_handle_t __kmpc_init_allocator(int gtid, omp_memspace_handle_t, int ntraits, omp_alloctrait_t traits[])
#define KMP_INTERNAL_MALLOC(sz)
Definition kmp.h:103
#define get__blocktime(xteam, xtid)
Definition kmp.h:2381
void __kmp_aux_set_defaults(char const *str, size_t len)
void __kmp_set_schedule(int gtid, kmp_sched_t new_sched, int chunk)
KMP_EXPORT void * kmpc_malloc(size_t size)
void __kmp_elapsed_tick(double *)
#define KMP_MAX_BLOCKTIME
Definition kmp.h:1245
KMP_EXPORT void __kmpc_init_nest_lock(ident_t *loc, kmp_int32 gtid, void **user_lock)
kmp_pause_status_t
Definition kmp.h:4538
@ kmp_stop_tool_paused
Definition kmp.h:4542
int __kmp_aux_get_num_teams()
KMP_EXPORT int __kmpc_test_nest_lock(ident_t *loc, kmp_int32 gtid, void **user_lock)
union kmp_team kmp_team_p
Definition kmp.h:244
int __kmp_get_max_active_levels(int gtid)
KMP_EXPORT void * kmpc_aligned_malloc(size_t size, size_t alignment)
#define __kmp_assign_root_init_mask()
Definition kmp.h:3949
#define get__dynamic(xthread)
Definition kmp.h:2412
omp_allocator_handle_t __kmpc_get_default_allocator(int gtid)
char * __kmp_affinity_format
int __kmp_dflt_blocktime
KMP_EXPORT void __kmpc_set_lock(ident_t *loc, kmp_int32 gtid, void **user_lock)
int __kmp_omp_cancellation
size_t __kmp_stksize
#define get__max_active_levels(xthread)
Definition kmp.h:2424
KMP_EXPORT void __kmpc_destroy_lock(ident_t *loc, kmp_int32 gtid, void **user_lock)
int __kmp_get_team_size(int gtid, int level)
KMP_EXPORT int __kmp_get_cancellation_status(int cancel_kind)
omp_memspace_handle_t __kmp_get_submemspace(omp_memspace_handle_t memspace, int num_resources, int *resources)
void __kmpc_destroy_allocator(int gtid, omp_allocator_handle_t al)
#define set__dynamic(xthread, xval)
Definition kmp.h:2410
#define __kmp_entry_gtid()
Definition kmp.h:3594
omp_allocator_handle_t __kmp_get_devices_allocator(int ndevs, const int *devs, omp_memspace_handle_t, int host)
void __kmp_set_max_active_levels(int gtid, int new_max_active_levels)
static int __kmp_tid_from_gtid(int gtid)
Definition kmp.h:3612
#define get__proc_bind(xthread)
Definition kmp.h:2432
KMP_EXPORT void __kmp_set_num_teams(int num_teams)
void __kmp_user_set_library(enum library_type arg)
KMP_EXPORT void __kmpc_init_nest_lock_with_hint(ident_t *loc, kmp_int32 gtid, void **user_lock, uintptr_t hint)
void __kmpc_set_default_allocator(int gtid, omp_allocator_handle_t al)
void __kmp_elapsed(double *)
int __kmp_aux_get_team_num()
volatile int __kmp_init_middle
void __kmp_set_num_threads(int new_nth, int gtid)
volatile int __kmp_nth
static kmp_info_t * __kmp_entry_thread()
Definition kmp.h:3724
int __kmp_get_ancestor_thread_num(int gtid, int level)
void __kmp_omp_display_env(int verbose)
void __kmp_middle_initialize(void)
kmp_info_t ** __kmp_threads
static void __kmp_reset_root_init_mask(int gtid)
Definition kmp.h:3950
int __kmp_dispatch_num_buffers
KMP_EXPORT void __kmpc_unset_nest_lock(ident_t *loc, kmp_int32 gtid, void **user_lock)
KMP_EXPORT void __kmp_set_teams_thread_limit(int limit)
#define set__max_active_levels(xthread, xval)
Definition kmp.h:2421
int __kmp_get_memspace_num_resources(omp_memspace_handle_t memspace)
#define get__bt_set(xteam, xtid)
Definition kmp.h:2383
omp_memspace_handle_t __kmp_get_devices_memspace(int ndevs, const int *devs, omp_memspace_handle_t, int host)
KMP_EXPORT void __kmpc_set_nest_lock(ident_t *loc, kmp_int32 gtid, void **user_lock)
volatile int __kmp_init_parallel
enum kmp_sched kmp_sched_t
void __kmp_aux_set_stacksize(size_t arg)
static const size_t KMP_AFFINITY_FORMAT_SIZE
Definition kmp.h:951
#define TRUE
Definition kmp.h:1341
enum library_type __kmp_library
#define FALSE
Definition kmp.h:1340
size_t __kmp_aux_capture_affinity(int gtid, const char *format, kmp_str_buf_t *buffer)
KMP_EXPORT int __kmp_get_max_teams(void)
void __kmp_get_schedule(int gtid, kmp_sched_t *sched, int *chunk)
kmp_key_t __kmp_gtid_threadprivate_key
KMP_EXPORT void * kmpc_calloc(size_t nelem, size_t elsize)
int __kmp_env_consistency_check
void __kmp_aux_display_affinity(int gtid, const char *format)
void __kmp_fulfill_event(kmp_event_t *event)
char __kmp_blocktime_units
#define KMP_DEVICE_ALL
Definition kmp.h:4532
#define KMP_INTERNAL_FREE(p)
Definition kmp.h:104
KMP_EXPORT void kmpc_free(void *ptr)
KMP_EXPORT int __kmpc_test_lock(ident_t *loc, kmp_int32 gtid, void **user_lock)
void __kmp_save_internal_controls(kmp_info_t *thread)
static void __kmp_aux_convert_blocktime(int *bt)
Definition kmp.h:3478
KMP_EXPORT int __kmp_get_teams_thread_limit(void)
#define __kmp_get_gtid()
Definition kmp.h:3593
void __kmp_serial_initialize(void)
int __kmp_avail_proc
KMP_EXPORT void __kmpc_init_lock_with_hint(ident_t *loc, kmp_int32 gtid, void **user_lock, uintptr_t hint)
kmp_int32 __kmp_max_task_priority
KMP_EXPORT void * kmpc_realloc(void *ptr, size_t size)
KMP_EXPORT void __kmpc_init_lock(ident_t *loc, kmp_int32 gtid, void **user_lock)
kmp_proc_bind_t
Definition kmp.h:930
static kmp_info_t * __kmp_thread_from_gtid(int gtid)
Definition kmp.h:3627
#define KMP_MIN_DISP_NUM_BUFF
Definition kmp.h:1307
int __kmp_gtid_mode
library_type
Definition kmp.h:487
@ library_turnaround
Definition kmp.h:490
@ library_throughput
Definition kmp.h:491
@ library_serial
Definition kmp.h:489
volatile int __kmp_init_serial
#define KMP_MAX_DISP_NUM_BUFF
Definition kmp.h:1309
#define KMP_MAX_ACTIVE_LEVELS_LIMIT
Definition kmp.h:1317
KMP_EXPORT void __kmpc_unset_lock(ident_t *loc, kmp_int32 gtid, void **user_lock)
#define KMP_GTID_DNE
Definition kmp.h:999
int __kmpc_pause_resource(kmp_pause_status_t level)
union KMP_ALIGN_CACHE kmp_info kmp_info_t
void __kmp_aux_set_blocktime(int arg, kmp_info_t *thread, int tid)
constexpr size_t alignment
#define KF_TRACE(d, x)
Definition kmp_debug.h:162
#define KMP_DEBUG_ASSERT(cond)
Definition kmp_debug.h:61
int FTN_STDCALL FTN_GET_TEAMS_THREAD_LIMIT(void)
int FTN_STDCALL FTN_GET_LIBRARY(void)
intptr_t omp_intptr_t
TODO: Include the omp.h of the current build.
int FTN_STDCALL FTN_GET_SUPPORTED_ACTIVE_LEVELS(void)
void FTN_STDCALL FTN_SET_LIBRARY_SERIAL(void)
enum omp_interop_property omp_interop_property_t
int FTN_STDCALL FTN_GET_NUM_KNOWN_THREADS(void)
size_t FTN_STDCALL FTN_GET_STACKSIZE_S(void)
#define KMP_DEREF
enum omp_interop_fr omp_interop_fr_t
#define KMP_FTN_PASS(x)
static void __kmp_fortran_strncpy_truncate(char *buffer, size_t buf_size, char const *csrc, size_t csrc_size)
omp_allocator_handle_t FTN_STDCALL FTN_GET_DEFAULT_ALLOCATOR(void)
void * omp_interop_t
int FTN_STDCALL FTN_GET_DEVICE_NUM(void) KMP_WEAK_ATTRIBUTE_EXTERNAL
int FTN_STDCALL FTN_GET_AFFINITY_MAX_PROC(void)
omp_interop_property
@ omp_ipr_device_num
@ omp_ipr_vendor
@ omp_ipr_fr_name
@ omp_ipr_platform
@ omp_ipr_vendor_name
@ omp_ipr_first
@ omp_ipr_fr_id
@ omp_ipr_device_context
@ omp_ipr_targetsync
@ omp_ipr_device
int FTN_STDCALL FTN_IN_EXPLICIT_TASK(void)
omp_interop_fr
@ omp_ifr_hip
@ omp_ifr_level_zero
@ omp_ifr_cuda
@ omp_ifr_opencl
@ omp_ifr_sycl
@ omp_ifr_last
@ omp_ifr_cuda_driver
static int __kmp_ftn_int64_to_int(kmp_int64 value)
int FTN_STDCALL FTN_GET_BLOCKTIME(void)
int FTN_STDCALL FTN_GET_MAX_TEAMS(void)
void FTN_STDCALL FTN_SET_LIBRARY_TURNAROUND(void)
#define KMP_EXPAND_NAME_IF_APPEND(name)
void FTN_STDCALL FTN_SET_WARNINGS_OFF(void)
int FTN_STDCALL FTN_GET_STACKSIZE(void)
enum omp_interop_rc omp_interop_rc_t
void FTN_STDCALL FTN_SET_WARNINGS_ON(void)
void FTN_STDCALL FTN_SET_LIBRARY_THROUGHPUT(void)
omp_interop_rc
@ omp_irc_type_str
@ omp_irc_empty
@ omp_irc_no_value
@ omp_irc_out_of_range
@ omp_irc_other
@ omp_irc_success
@ omp_irc_type_int
@ omp_irc_type_ptr
#define FTN_SET_NUM_THREADS_8
Definition kmp_ftn_os.h:61
#define FTN_SET_TEAMS_THREAD_LIMIT
Definition kmp_ftn_os.h:176
#define FTN_GET_PLACE_NUM_PROCS
Definition kmp_ftn_os.h:121
#define FTN_GET_DEFAULT_DEVICE
Definition kmp_ftn_os.h:111
#define FTN_GET_LEVEL
Definition kmp_ftn_os.h:80
#define FTN_GET_THREAD_NUM
Definition kmp_ftn_os.h:64
#define FTN_SET_MAX_ACTIVE_LEVELS_8
Definition kmp_ftn_os.h:77
#define FTN_GET_DEVICE_FROM_UID
Definition kmp_ftn_os.h:161
#define FTN_SET_AFFINITY_MASK_PROC
Definition kmp_ftn_os.h:45
#define FTN_GET_NUM_PLACES
Definition kmp_ftn_os.h:120
#define FTN_GET_PLACE_NUM_PROCS_8
Definition kmp_ftn_os.h:122
#define FTN_GET_CANCELLATION
Definition kmp_ftn_os.h:116
#define FTN_GET_ANCESTOR_THREAD_NUM
Definition kmp_ftn_os.h:81
#define FTN_CONTROL_TOOL
Definition kmp_ftn_os.h:142
#define FTN_SET_BLOCKTIME_8
Definition kmp_ftn_os.h:29
#define FTN_GET_CANCELLATION_STATUS
Definition kmp_ftn_os.h:117
#define FTN_UNSET_AFFINITY_MASK_PROC_8
Definition kmp_ftn_os.h:48
#define FTN_INIT_LOCK
Definition kmp_ftn_os.h:89
#define FTN_GET_THREAD_LIMIT
Definition kmp_ftn_os.h:71
#define FTN_DESTROY_ALLOCATOR
Definition kmp_ftn_os.h:144
#define FTN_CALLOC
Definition kmp_ftn_os.h:54
#define FTN_IN_FINAL
Definition kmp_ftn_os.h:85
#define FTN_SET_STACKSIZE_S
Definition kmp_ftn_os.h:25
#define FTN_IN_PARALLEL
Definition kmp_ftn_os.h:70
#define FTN_SET_AFFINITY_MASK_PROC_8
Definition kmp_ftn_os.h:46
#define FTN_GET_UID_FROM_DEVICE
Definition kmp_ftn_os.h:160
#define FTN_SET_MAX_ACTIVE_LEVELS
Definition kmp_ftn_os.h:76
#define FTN_GET_DEVICES_ALLOCATOR
Definition kmp_ftn_os.h:152
#define FTN_FULFILL_EVENT
Definition kmp_ftn_os.h:172
#define FTN_SET_NUM_THREADS
Definition kmp_ftn_os.h:60
#define FTN_PAUSE_RESOURCE_ALL
Definition kmp_ftn_os.h:168
#define FTN_SET_LIBRARY_8
Definition kmp_ftn_os.h:35
#define FTN_DESTROY_LOCK
Definition kmp_ftn_os.h:94
#define FTN_GET_INTEROP_TYPE_DESC
Definition kmp_ftn_os.h:185
#define FTN_GET_DEVICES_MEMSPACE
Definition kmp_ftn_os.h:147
#define FTN_GET_AFFINITY
Definition kmp_ftn_os.h:41
#define FTN_SET_DEFAULT_DEVICE
Definition kmp_ftn_os.h:112
#define FTN_GET_DEVICES_ALL_ALLOCATOR
Definition kmp_ftn_os.h:156
#define FTN_GET_AFFINITY_MASK_PROC_8
Definition kmp_ftn_os.h:50
#define FTN_GET_MAX_ACTIVE_LEVELS
Definition kmp_ftn_os.h:78
#define FTN_GET_INTEROP_NAME
Definition kmp_ftn_os.h:184
#define FTN_GET_PLACE_NUM
Definition kmp_ftn_os.h:125
#define FTN_INIT_NEST_LOCK
Definition kmp_ftn_os.h:98
#define FTN_SET_LIBRARY
Definition kmp_ftn_os.h:34
#define FTN_SET_STACKSIZE_8
Definition kmp_ftn_os.h:24
#define FTN_GET_DEVICES_ALL_MEMSPACE
Definition kmp_ftn_os.h:151
#define FTN_GET_TEAM_SIZE_8
Definition kmp_ftn_os.h:84
#define FTN_REALLOC
Definition kmp_ftn_os.h:55
#define FTN_GET_INTEROP_INT
Definition kmp_ftn_os.h:181
#define FTN_GET_SCHEDULE_8
Definition kmp_ftn_os.h:75
#define FTN_SET_AFFINITY
Definition kmp_ftn_os.h:40
#define FTN_SET_LOCK
Definition kmp_ftn_os.h:95
#define FTN_GET_WTIME
Definition kmp_ftn_os.h:107
#define FTN_GET_DYNAMIC
Definition kmp_ftn_os.h:67
#define FTN_GET_TEAM_SIZE
Definition kmp_ftn_os.h:83
#define FTN_GET_INTEROP_RC_DESC
Definition kmp_ftn_os.h:186
#define FTN_GET_PLACE_PROC_IDS_8
Definition kmp_ftn_os.h:124
#define FTN_GET_NUM_THREADS
Definition kmp_ftn_os.h:62
#define FTN_GET_PLACE_PROC_IDS
Definition kmp_ftn_os.h:123
#define FTN_UNSET_LOCK
Definition kmp_ftn_os.h:96
#define FTN_GET_NUM_DEVICES
Definition kmp_ftn_os.h:110
#define FTN_SET_NUM_TEAMS
Definition kmp_ftn_os.h:173
#define FTN_DISPLAY_ENV
Definition kmp_ftn_os.h:170
#define FTN_GET_DEVICE_MEMSPACE
Definition kmp_ftn_os.h:148
#define FTN_GET_PROC_BIND
Definition kmp_ftn_os.h:86
#define FTN_GET_DEVICES_AND_HOST_ALLOCATOR
Definition kmp_ftn_os.h:154
#define FTN_PAUSE_RESOURCE
Definition kmp_ftn_os.h:166
#define FTN_SET_TEAMS_THREAD_LIMIT_8
Definition kmp_ftn_os.h:177
#define FTN_GET_ANCESTOR_THREAD_NUM_8
Definition kmp_ftn_os.h:82
#define FTN_PAUSE_RESOURCE_8
Definition kmp_ftn_os.h:167
#define FTN_GET_MEMSPACE_NUM_RESOURCES
Definition kmp_ftn_os.h:157
#define FTN_IS_INITIAL_DEVICE
Definition kmp_ftn_os.h:114
#define FTN_GET_ACTIVE_LEVEL
Definition kmp_ftn_os.h:79
#define FTN_UNSET_AFFINITY_MASK_PROC
Definition kmp_ftn_os.h:47
#define FTN_GET_NUM_TEAMS
Definition kmp_ftn_os.h:87
#define FTN_GET_DEVICE_AND_HOST_MEMSPACE
Definition kmp_ftn_os.h:150
#define FTN_SET_DISP_NUM_BUFFERS_8
Definition kmp_ftn_os.h:39
#define FTN_GET_MAX_TASK_PRIORITY
Definition kmp_ftn_os.h:119
#define FTN_TEST_NEST_LOCK
Definition kmp_ftn_os.h:102
#define FTN_GET_INITIAL_DEVICE
Definition kmp_ftn_os.h:129
#define FTN_ALIGNED_MALLOC
Definition kmp_ftn_os.h:53
#define FTN_SET_SCHEDULE
Definition kmp_ftn_os.h:72
#define FTN_GET_NUM_INTEROP_PROPERTIES
Definition kmp_ftn_os.h:180
#define FTN_SET_NUM_TEAMS_8
Definition kmp_ftn_os.h:174
#define FTN_GET_PARTITION_PLACE_NUMS
Definition kmp_ftn_os.h:127
#define FTN_GET_INTEROP_STR
Definition kmp_ftn_os.h:183
#define FTN_INIT_ALLOCATOR
Definition kmp_ftn_os.h:143
#define FTN_GET_TEAM_NUM
Definition kmp_ftn_os.h:88
#define FTN_TEST_LOCK
Definition kmp_ftn_os.h:97
#define FTN_GET_DEVICES_AND_HOST_MEMSPACE
Definition kmp_ftn_os.h:149
#define FTN_CREATE_AFFINITY_MASK
Definition kmp_ftn_os.h:43
#define FTN_DISPLAY_AFFINITY
Definition kmp_ftn_os.h:164
#define FTN_GET_DEVICE_ALLOCATOR
Definition kmp_ftn_os.h:153
#define FTN_SET_DISP_NUM_BUFFERS
Definition kmp_ftn_os.h:38
#define FTN_GET_AFFINITY_FORMAT
Definition kmp_ftn_os.h:163
#define FTN_SET_BLOCKTIME
Definition kmp_ftn_os.h:28
#define FTN_SET_DEFAULT_DEVICE_8
Definition kmp_ftn_os.h:113
#define FTN_GET_NUM_PROCS
Definition kmp_ftn_os.h:65
#define FTN_CAPTURE_AFFINITY
Definition kmp_ftn_os.h:165
#define FTN_KFREE
Definition kmp_ftn_os.h:56
#define FTN_SET_NEST_LOCK
Definition kmp_ftn_os.h:100
#define FTN_SET_DEFAULTS
Definition kmp_ftn_os.h:37
#define FTN_GET_NESTED
Definition kmp_ftn_os.h:69
#define FTN_SET_DEFAULT_ALLOCATOR
Definition kmp_ftn_os.h:145
#define FTN_SET_NESTED
Definition kmp_ftn_os.h:68
#define FTN_GET_AFFINITY_MASK_PROC
Definition kmp_ftn_os.h:49
#define FTN_SET_SCHEDULE_8
Definition kmp_ftn_os.h:73
#define FTN_GET_SUBMEMSPACE
Definition kmp_ftn_os.h:158
#define FTN_SET_DYNAMIC
Definition kmp_ftn_os.h:66
#define FTN_SET_AFFINITY_FORMAT
Definition kmp_ftn_os.h:162
#define FTN_MALLOC
Definition kmp_ftn_os.h:52
#define FTN_GET_PARTITION_NUM_PLACES
Definition kmp_ftn_os.h:126
#define FTN_GET_PARTITION_PLACE_NUMS_8
Definition kmp_ftn_os.h:128
#define FTN_DESTROY_NEST_LOCK
Definition kmp_ftn_os.h:99
#define FTN_GET_DEVICE_AND_HOST_ALLOCATOR
Definition kmp_ftn_os.h:155
#define FTN_DESTROY_AFFINITY_MASK
Definition kmp_ftn_os.h:44
#define FTN_SET_STACKSIZE
Definition kmp_ftn_os.h:23
#define FTN_UNSET_NEST_LOCK
Definition kmp_ftn_os.h:101
#define FTN_GET_MAX_THREADS
Definition kmp_ftn_os.h:63
#define FTN_GET_INTEROP_PTR
Definition kmp_ftn_os.h:182
#define FTN_GET_SCHEDULE
Definition kmp_ftn_os.h:74
#define FTN_GET_WTICK
Definition kmp_ftn_os.h:108
#define KMP_INFORM(...)
Definition kmp_i18n.h:142
#define KMP_WARNING(...)
Definition kmp_i18n.h:144
#define KMP_FATAL(...)
Definition kmp_i18n.h:146
#define KMP_VERSION_SYMBOL(api_name, ver_num, ver_str)
Definition kmp_os.h:448
#define FTN_TRUE
Definition kmp_os.h:1182
long kmp_intptr_t
Definition kmp_os.h:205
@ kmp_warnings_explicit
Definition kmp_os.h:1247
#define KMP_DLSYM_NEXT(name)
Definition kmp_os.h:1307
#define FTN_FALSE
Definition kmp_os.h:1186
#define TCR_4(a)
Definition kmp_os.h:1141
#define KMP_WEAK_ATTRIBUTE_EXTERNAL
Definition kmp_os.h:403
#define KMP_DLSYM(name)
Definition kmp_os.h:1306
#define KMP_EXPAND_NAME(api_name)
Definition kmp_os.h:447
#define KMP_STRNCPY_S(dst, bsz, src, cnt)
static void __kmp_strncpy_truncate(char *buffer, size_t buf_size, char const *src, size_t src_size)
#define KMP_STRLEN
void __kmp_str_buf_free(kmp_str_buf_t *buffer)
Definition kmp_str.cpp:123
struct kmp_str_buf kmp_str_buf_t
Definition kmp_str.h:39
#define __kmp_str_buf_init(b)
Definition kmp_str.h:41
void __kmps_set_library(int arg)
Definition kmp_stub.cpp:231
#define i
Definition kmp_stub.cpp:88
double __kmps_get_wtime(void)
Definition kmp_stub.cpp:285
void __kmps_set_nested(int arg)
Definition kmp_stub.cpp:243
int __kmps_get_blocktime(void)
Definition kmp_stub.cpp:212
void __kmps_set_schedule(kmp_sched_t kind, int modifier)
Definition kmp_stub.cpp:268
int __kmps_get_dynamic(void)
Definition kmp_stub.cpp:224
int __kmps_get_nested(void)
Definition kmp_stub.cpp:248
void __kmps_set_blocktime(int arg)
Definition kmp_stub.cpp:207
void __kmps_set_dynamic(int arg)
Definition kmp_stub.cpp:219
int __kmps_get_library(void)
Definition kmp_stub.cpp:236
double __kmps_get_wtick(void)
Definition kmp_stub.cpp:311
void __kmps_set_stacksize(size_t arg)
Definition kmp_stub.cpp:255
void __kmps_get_schedule(kmp_sched_t *kind, int *modifier)
Definition kmp_stub.cpp:274
kmp_proc_bind_t __kmps_get_proc_bind(void)
Definition kmp_stub.cpp:280
size_t __kmps_get_stacksize(void)
Definition kmp_stub.cpp:260
return ret
int __kmp_control_tool(uint64_t command, uint64_t modifier, void *arg)
#define OMPT_GET_FRAME_ADDRESS(level)
volatile int flag
char * str
Definition kmp_str.h:34
ompt_frame_t frame
static int err
kmp_base_team_t t
Definition kmp.h:3227