39 size_t num_out, num_mutexinout, num_in, num_depobj;
54 num_in = ndeps - num_out;
55 num_mutexinout = num_depobj = 0;
62 num_depobj = ndeps - num_out - num_mutexinout - num_in;
71 memset(&retval,
'\0',
sizeof(retval));
77 if (index < num_out) {
81 }
else if (index >= num_out && index < (num_out + num_mutexinout)) {
84 }
else if (index >= (num_out + num_mutexinout) &&
85 index < (num_out + num_mutexinout + num_in)) {
109 KMP_FATAL(GompFeatureNotSupported,
"Unknown depobj type");
120#define MKLOC(loc, routine) \
121 static ident_t loc = {0, KMP_IDENT_KMPC, 0, 0, ";unknown;unknown;0;0;;"};
128 KA_TRACE(20, (
"GOMP_barrier: T#%d\n", gtid));
129#if OMPT_SUPPORT && OMPT_OPTIONAL
130 ompt_frame_t *ompt_frame;
135 OMPT_STORE_RETURN_ADDRESS(gtid);
138#if OMPT_SUPPORT && OMPT_OPTIONAL
140 ompt_frame->enter_frame = ompt_data_none;
159 KA_TRACE(20, (
"GOMP_critical_start: T#%d\n", gtid));
160#if OMPT_SUPPORT && OMPT_OPTIONAL
161 OMPT_STORE_RETURN_ADDRESS(gtid);
169 KA_TRACE(20, (
"GOMP_critical_end: T#%d\n", gtid));
170#if OMPT_SUPPORT && OMPT_OPTIONAL
171 OMPT_STORE_RETURN_ADDRESS(gtid);
178 MKLOC(
loc,
"GOMP_critical_name_start");
179 KA_TRACE(20, (
"GOMP_critical_name_start: T#%d\n", gtid));
185 MKLOC(
loc,
"GOMP_critical_name_end");
186 KA_TRACE(20, (
"GOMP_critical_name_end: T#%d\n", gtid));
195 KA_TRACE(20, (
"GOMP_atomic_start: T#%d\n", gtid));
206 KA_TRACE(20, (
"GOMP_atomic_end: T#%d\n", gtid));
213 KA_TRACE(20, (
"GOMP_single_start: T#%d\n", gtid));
224#if OMPT_SUPPORT && OMPT_OPTIONAL
233 ompt_work_single_executor, ompt_scope_begin,
234 &(team->
t.ompt_team_info.parallel_data),
235 &(team->
t.t_implicit_task_taskdata[tid].ompt_task_info.task_data),
241 ompt_work_single_other, ompt_scope_begin,
242 &(team->
t.ompt_team_info.parallel_data),
243 &(team->
t.t_implicit_task_taskdata[tid].ompt_task_info.task_data),
246 ompt_work_single_other, ompt_scope_end,
247 &(team->
t.ompt_team_info.parallel_data),
248 &(team->
t.t_implicit_task_taskdata[tid].ompt_task_info.task_data),
261 MKLOC(
loc,
"GOMP_single_copy_start");
262 KA_TRACE(20, (
"GOMP_single_copy_start: T#%d\n", gtid));
277#if OMPT_SUPPORT && OMPT_OPTIONAL
278 ompt_frame_t *ompt_frame;
283 OMPT_STORE_RETURN_ADDRESS(gtid);
291#if OMPT_SUPPORT && OMPT_OPTIONAL
292 OMPT_STORE_RETURN_ADDRESS(gtid);
296#if OMPT_SUPPORT && OMPT_OPTIONAL
298 ompt_frame->enter_frame = ompt_data_none;
306 KA_TRACE(20, (
"GOMP_single_copy_end: T#%d\n", gtid));
313#if OMPT_SUPPORT && OMPT_OPTIONAL
314 ompt_frame_t *ompt_frame;
319 OMPT_STORE_RETURN_ADDRESS(gtid);
323#if OMPT_SUPPORT && OMPT_OPTIONAL
324 OMPT_STORE_RETURN_ADDRESS(gtid);
328#if OMPT_SUPPORT && OMPT_OPTIONAL
330 ompt_frame->enter_frame = ompt_data_none;
338 KA_TRACE(20, (
"GOMP_ordered_start: T#%d\n", gtid));
339#if OMPT_SUPPORT && OMPT_OPTIONAL
340 OMPT_STORE_RETURN_ADDRESS(gtid);
348 KA_TRACE(20, (
"GOMP_ordered_start: T#%d\n", gtid));
349#if OMPT_SUPPORT && OMPT_OPTIONAL
350 OMPT_STORE_RETURN_ADDRESS(gtid);
360#if KMP_ARCH_X86 || KMP_ARCH_ARM || KMP_ARCH_MIPS || KMP_ARCH_WASM || \
361 KMP_ARCH_PPC || KMP_ARCH_AARCH64_32
362#define KMP_DISPATCH_INIT __kmp_aux_dispatch_init_4
363#define KMP_DISPATCH_FINI_CHUNK __kmp_aux_dispatch_fini_chunk_4
364#define KMP_DISPATCH_NEXT __kmpc_dispatch_next_4
366#define KMP_DISPATCH_INIT __kmp_aux_dispatch_init_8
367#define KMP_DISPATCH_FINI_CHUNK __kmp_aux_dispatch_fini_chunk_8
368#define KMP_DISPATCH_NEXT __kmpc_dispatch_next_8
371#define KMP_DISPATCH_INIT_ULL __kmp_aux_dispatch_init_8u
372#define KMP_DISPATCH_FINI_CHUNK_ULL __kmp_aux_dispatch_fini_chunk_8u
373#define KMP_DISPATCH_NEXT_ULL __kmpc_dispatch_next_8u
385 ompt_frame_t *ompt_frame;
386 ompt_state_t enclosing_state;
393 enclosing_state = thr->th.ompt_thread_info.state;
394 thr->th.ompt_thread_info.state = ompt_state_work_parallel;
407 ompt_frame->exit_frame = ompt_data_none;
410 thr->th.ompt_thread_info.state = enclosing_state;
432 ompt_frame_t *ompt_frame;
433 ompt_state_t enclosing_state;
438 enclosing_state = thr->th.ompt_thread_info.state;
439 thr->th.ompt_thread_info.state = ompt_state_work_parallel;
453 ompt_frame->exit_frame = ompt_data_none;
456 thr->th.ompt_thread_info.state = enclosing_state;
462 unsigned flags,
void (*unwrapped_task)(
void *),
472 if (num_threads != 0)
500 thr->th.ompt_thread_info.state = ompt_state_work_parallel;
507 unsigned num_threads) {
511 ompt_frame_t *parent_frame, *
frame;
517 OMPT_STORE_RETURN_ADDRESS(gtid);
521 KA_TRACE(20, (
"GOMP_parallel_start: T#%d\n", gtid));
532 if (ompd_state & OMPD_ENABLE_BP)
533 ompd_bp_parallel_begin();
544 KA_TRACE(20, (
"GOMP_parallel_end: T#%d\n", gtid));
546 if (!thr->th.th_team->t.t_serialized) {
555 OMPT_CUR_TASK_INFO(thr)->frame.exit_frame = ompt_data_none;
566 if (ompd_state & OMPD_ENABLE_BP)
567 ompd_bp_parallel_end();
596#define IF_OMPT_SUPPORT(code) code
598#define IF_OMPT_SUPPORT(code)
601#define LOOP_START(func, schedule) \
602 int func(long lb, long ub, long str, long chunk_sz, long *p_lb, \
606 int gtid = __kmp_entry_gtid(); \
607 MKLOC(loc, KMP_STR(func)); \
611 func) ": T#%d, lb 0x%lx, ub 0x%lx, str 0x%lx, chunk_sz 0x%lx\n", \
612 gtid, lb, ub, str, chunk_sz)); \
614 if ((str > 0) ? (lb < ub) : (lb > ub)) { \
616 IF_OMPT_SUPPORT(OMPT_STORE_RETURN_ADDRESS(gtid);) \
617 KMP_DISPATCH_INIT(&loc, gtid, (schedule), lb, \
618 (str > 0) ? (ub - 1) : (ub + 1), str, chunk_sz, \
619 (schedule) != kmp_sch_static); \
622 IF_OMPT_SUPPORT(OMPT_STORE_RETURN_ADDRESS(gtid);) \
623 status = KMP_DISPATCH_NEXT(&loc, gtid, NULL, (kmp_int *)p_lb, \
624 (kmp_int *)p_ub, (kmp_int *)&stride); \
627 KMP_DEBUG_ASSERT(stride == str); \
628 *p_ub += (str > 0) ? 1 : -1; \
637 func) " exit: T#%d, *p_lb 0x%lx, *p_ub 0x%lx, returning %d\n", \
638 gtid, *p_lb, *p_ub, status)); \
642#define LOOP_RUNTIME_START(func, schedule) \
643 int func(long lb, long ub, long str, long *p_lb, long *p_ub) { \
647 int gtid = __kmp_entry_gtid(); \
648 MKLOC(loc, KMP_STR(func)); \
651 (KMP_STR(func) ": T#%d, lb 0x%lx, ub 0x%lx, str 0x%lx, chunk_sz %d\n", \
652 gtid, lb, ub, str, chunk_sz)); \
654 if ((str > 0) ? (lb < ub) : (lb > ub)) { \
656 IF_OMPT_SUPPORT(OMPT_STORE_RETURN_ADDRESS(gtid);) \
657 KMP_DISPATCH_INIT(&loc, gtid, (schedule), lb, \
658 (str > 0) ? (ub - 1) : (ub + 1), str, chunk_sz, \
662 IF_OMPT_SUPPORT(OMPT_STORE_RETURN_ADDRESS(gtid);) \
663 status = KMP_DISPATCH_NEXT(&loc, gtid, NULL, (kmp_int *)p_lb, \
664 (kmp_int *)p_ub, (kmp_int *)&stride); \
667 KMP_DEBUG_ASSERT(stride == str); \
668 *p_ub += (str > 0) ? 1 : -1; \
677 func) " exit: T#%d, *p_lb 0x%lx, *p_ub 0x%lx, returning %d\n", \
678 gtid, *p_lb, *p_ub, status)); \
682#define KMP_DOACROSS_FINI(status, gtid) \
683 if (!status && __kmp_threads[gtid]->th.th_dispatch->th_doacross_flags) { \
684 __kmpc_doacross_fini(NULL, gtid); \
687#define LOOP_NEXT(func, fini_code) \
688 int func(long *p_lb, long *p_ub) { \
691 int gtid = __kmp_get_gtid(); \
692 MKLOC(loc, KMP_STR(func)); \
693 KA_TRACE(20, (KMP_STR(func) ": T#%d\n", gtid)); \
695 IF_OMPT_SUPPORT(OMPT_STORE_RETURN_ADDRESS(gtid);) \
696 fini_code status = KMP_DISPATCH_NEXT(&loc, gtid, NULL, (kmp_int *)p_lb, \
697 (kmp_int *)p_ub, (kmp_int *)&stride); \
699 *p_ub += (stride > 0) ? 1 : -1; \
701 KMP_DOACROSS_FINI(status, gtid) \
705 (KMP_STR(func) " exit: T#%d, *p_lb 0x%lx, *p_ub 0x%lx, stride 0x%lx, " \
707 gtid, *p_lb, *p_ub, stride, status)); \
757 bool func(
unsigned ncounts,
long *counts,
long chunk_sz,
long *p_lb, \
760 long stride, lb, ub, str; \
765 for (
unsigned i = 0;
i < ncounts; ++
i) { \
767 dims[
i].
up = counts[
i] - 1; \
770 __kmpc_doacross_init(&
loc, gtid, (
int)ncounts, dims); \
774 KA_TRACE(20, (
KMP_STR(
func)
": T#%d, ncounts %u, lb 0x%lx, ub 0x%lx, str " \
777 gtid, ncounts, lb, ub, str, chunk_sz)); \
779 if ((str > 0) ? (lb < ub) : (lb > ub)) { \
780 KMP_DISPATCH_INIT(&
loc, gtid, (schedule), lb, \
781 (str > 0) ? (ub - 1) : (ub + 1), str, chunk_sz, \
786 KMP_DEBUG_ASSERT(stride == str); \
787 *p_ub += (str > 0) ? 1 : -1; \
792 KMP_DOACROSS_FINI(
status, gtid); \
797 func)
" exit: T#%d, *p_lb 0x%lx, *p_ub 0x%lx, returning %d\n", \
798 gtid, *p_lb, *p_ub,
status)); \
803#define LOOP_DOACROSS_RUNTIME_START(func, schedule) \
804 int func(unsigned ncounts, long *counts, long *p_lb, long *p_ub) { \
806 long stride, lb, ub, str; \
808 int gtid = __kmp_entry_gtid(); \
809 struct kmp_dim *dims = \
810 (struct kmp_dim *)__kmp_allocate(sizeof(struct kmp_dim) * ncounts); \
811 MKLOC(loc, KMP_STR(func)); \
812 for (unsigned i = 0; i < ncounts; ++i) { \
814 dims[i].up = counts[i] - 1; \
817 __kmpc_doacross_init(&loc, gtid, (int)ncounts, dims); \
823 (KMP_STR(func) ": T#%d, lb 0x%lx, ub 0x%lx, str 0x%lx, chunk_sz %d\n", \
824 gtid, lb, ub, str, chunk_sz)); \
826 if ((str > 0) ? (lb < ub) : (lb > ub)) { \
827 KMP_DISPATCH_INIT(&loc, gtid, (schedule), lb, \
828 (str > 0) ? (ub - 1) : (ub + 1), str, chunk_sz, TRUE); \
829 status = KMP_DISPATCH_NEXT(&loc, gtid, NULL, (kmp_int *)p_lb, \
830 (kmp_int *)p_ub, (kmp_int *)&stride); \
832 KMP_DEBUG_ASSERT(stride == str); \
833 *p_ub += (str > 0) ? 1 : -1; \
838 KMP_DOACROSS_FINI(status, gtid); \
843 func) " exit: T#%d, *p_lb 0x%lx, *p_ub 0x%lx, returning %d\n", \
844 gtid, *p_lb, *p_ub, status)); \
864 KA_TRACE(20, (
"GOMP_loop_end: T#%d\n", gtid))
866#if OMPT_SUPPORT && OMPT_OPTIONAL
867 ompt_frame_t *ompt_frame;
871 OMPT_STORE_RETURN_ADDRESS(gtid);
875#if OMPT_SUPPORT && OMPT_OPTIONAL
877 ompt_frame->enter_frame = ompt_data_none;
881 KA_TRACE(20, (
"GOMP_loop_end exit: T#%d\n", gtid))
892#define LOOP_START_ULL(func, schedule) \
893 int func(int up, unsigned long long lb, unsigned long long ub, \
894 unsigned long long str, unsigned long long chunk_sz, \
895 unsigned long long *p_lb, unsigned long long *p_ub) { \
897 long long str2 = up ? ((long long)str) : -((long long)str); \
899 int gtid = __kmp_entry_gtid(); \
900 MKLOC(loc, KMP_STR(func)); \
902 KA_TRACE(20, (KMP_STR(func) ": T#%d, up %d, lb 0x%llx, ub 0x%llx, str " \
903 "0x%llx, chunk_sz 0x%llx\n", \
904 gtid, up, lb, ub, str, chunk_sz)); \
906 if ((str > 0) ? (lb < ub) : (lb > ub)) { \
907 KMP_DISPATCH_INIT_ULL(&loc, gtid, (schedule), lb, \
908 (str2 > 0) ? (ub - 1) : (ub + 1), str2, chunk_sz, \
909 (schedule) != kmp_sch_static); \
911 KMP_DISPATCH_NEXT_ULL(&loc, gtid, NULL, (kmp_uint64 *)p_lb, \
912 (kmp_uint64 *)p_ub, (kmp_int64 *)&stride); \
914 KMP_DEBUG_ASSERT(stride == str2); \
915 *p_ub += (str > 0) ? 1 : -1; \
924 func) " exit: T#%d, *p_lb 0x%llx, *p_ub 0x%llx, returning %d\n", \
925 gtid, *p_lb, *p_ub, status)); \
929#define LOOP_RUNTIME_START_ULL(func, schedule) \
930 int func(int up, unsigned long long lb, unsigned long long ub, \
931 unsigned long long str, unsigned long long *p_lb, \
932 unsigned long long *p_ub) { \
934 long long str2 = up ? ((long long)str) : -((long long)str); \
935 unsigned long long stride; \
936 unsigned long long chunk_sz = 0; \
937 int gtid = __kmp_entry_gtid(); \
938 MKLOC(loc, KMP_STR(func)); \
940 KA_TRACE(20, (KMP_STR(func) ": T#%d, up %d, lb 0x%llx, ub 0x%llx, str " \
941 "0x%llx, chunk_sz 0x%llx\n", \
942 gtid, up, lb, ub, str, chunk_sz)); \
944 if ((str > 0) ? (lb < ub) : (lb > ub)) { \
945 KMP_DISPATCH_INIT_ULL(&loc, gtid, (schedule), lb, \
946 (str2 > 0) ? (ub - 1) : (ub + 1), str2, chunk_sz, \
949 KMP_DISPATCH_NEXT_ULL(&loc, gtid, NULL, (kmp_uint64 *)p_lb, \
950 (kmp_uint64 *)p_ub, (kmp_int64 *)&stride); \
952 KMP_DEBUG_ASSERT((long long)stride == str2); \
953 *p_ub += (str > 0) ? 1 : -1; \
962 func) " exit: T#%d, *p_lb 0x%llx, *p_ub 0x%llx, returning %d\n", \
963 gtid, *p_lb, *p_ub, status)); \
967#define LOOP_NEXT_ULL(func, fini_code) \
968 int func(unsigned long long *p_lb, unsigned long long *p_ub) { \
971 int gtid = __kmp_get_gtid(); \
972 MKLOC(loc, KMP_STR(func)); \
973 KA_TRACE(20, (KMP_STR(func) ": T#%d\n", gtid)); \
976 KMP_DISPATCH_NEXT_ULL(&loc, gtid, NULL, (kmp_uint64 *)p_lb, \
977 (kmp_uint64 *)p_ub, (kmp_int64 *)&stride); \
979 *p_ub += (stride > 0) ? 1 : -1; \
985 func) " exit: T#%d, *p_lb 0x%llx, *p_ub 0x%llx, stride 0x%llx, " \
987 gtid, *p_lb, *p_ub, stride, status)); \
1046 int func(
unsigned ncounts,
unsigned long long *counts, \
1047 unsigned long long chunk_sz,
unsigned long long *p_lb, \
1048 unsigned long long *p_ub) { \
1050 long long stride, str, lb, ub; \
1055 for (
unsigned i = 0;
i < ncounts; ++
i) { \
1057 dims[
i].
up = counts[
i] - 1; \
1060 __kmpc_doacross_init(&
loc, gtid, (
int)ncounts, dims); \
1065 KA_TRACE(20, (
KMP_STR(
func)
": T#%d, lb 0x%llx, ub 0x%llx, str " \
1066 "0x%llx, chunk_sz 0x%llx\n", \
1067 gtid, lb, ub, str, chunk_sz)); \
1069 if ((str > 0) ? (lb < ub) : (lb > ub)) { \
1070 KMP_DISPATCH_INIT_ULL(&
loc, gtid, (schedule), lb, \
1071 (str > 0) ? (ub - 1) : (ub + 1), str, chunk_sz, \
1074 KMP_DISPATCH_NEXT_ULL(&
loc, gtid, NULL, (
kmp_uint64 *)p_lb, \
1077 KMP_DEBUG_ASSERT(stride == str); \
1078 *p_ub += (str > 0) ? 1 : -1; \
1083 KMP_DOACROSS_FINI(
status, gtid); \
1088 func)
" exit: T#%d, *p_lb 0x%llx, *p_ub 0x%llx, returning %d\n", \
1089 gtid, *p_lb, *p_ub,
status)); \
1094#define LOOP_DOACROSS_RUNTIME_START_ULL(func, schedule) \
1095 int func(unsigned ncounts, unsigned long long *counts, \
1096 unsigned long long *p_lb, unsigned long long *p_ub) { \
1098 unsigned long long stride, str, lb, ub; \
1099 unsigned long long chunk_sz = 0; \
1100 int gtid = __kmp_entry_gtid(); \
1101 struct kmp_dim *dims = \
1102 (struct kmp_dim *)__kmp_allocate(sizeof(struct kmp_dim) * ncounts); \
1103 MKLOC(loc, KMP_STR(func)); \
1104 for (unsigned i = 0; i < ncounts; ++i) { \
1106 dims[i].up = counts[i] - 1; \
1109 __kmpc_doacross_init(&loc, gtid, (int)ncounts, dims); \
1113 KA_TRACE(20, (KMP_STR(func) ": T#%d, lb 0x%llx, ub 0x%llx, str " \
1114 "0x%llx, chunk_sz 0x%llx\n", \
1115 gtid, lb, ub, str, chunk_sz)); \
1117 if ((str > 0) ? (lb < ub) : (lb > ub)) { \
1118 KMP_DISPATCH_INIT_ULL(&loc, gtid, (schedule), lb, \
1119 (str > 0) ? (ub - 1) : (ub + 1), str, chunk_sz, \
1122 KMP_DISPATCH_NEXT_ULL(&loc, gtid, NULL, (kmp_uint64 *)p_lb, \
1123 (kmp_uint64 *)p_ub, (kmp_int64 *)&stride); \
1125 KMP_DEBUG_ASSERT(stride == str); \
1126 *p_ub += (str > 0) ? 1 : -1; \
1131 KMP_DOACROSS_FINI(status, gtid); \
1136 func) " exit: T#%d, *p_lb 0x%llx, *p_ub 0x%llx, returning %d\n", \
1137 gtid, *p_lb, *p_ub, status)); \
1159#define PARALLEL_LOOP_START(func, schedule, ompt_pre, ompt_post) \
1160 void func(void (*task)(void *), void *data, unsigned num_threads, long lb, \
1161 long ub, long str, long chunk_sz) { \
1162 int gtid = __kmp_entry_gtid(); \
1163 MKLOC(loc, KMP_STR(func)); \
1167 func) ": T#%d, lb 0x%lx, ub 0x%lx, str 0x%lx, chunk_sz 0x%lx\n", \
1168 gtid, lb, ub, str, chunk_sz)); \
1172 __kmp_GOMP_fork_call(&loc, gtid, num_threads, 0u, task, \
1173 (microtask_t)__kmp_GOMP_parallel_microtask_wrapper, \
1174 9, task, data, num_threads, &loc, (schedule), lb, \
1175 (str > 0) ? (ub - 1) : (ub + 1), str, chunk_sz); \
1176 IF_OMPT_SUPPORT(OMPT_STORE_RETURN_ADDRESS(gtid)); \
1178 KMP_DISPATCH_INIT(&loc, gtid, (schedule), lb, \
1179 (str > 0) ? (ub - 1) : (ub + 1), str, chunk_sz, \
1180 (schedule) != kmp_sch_static); \
1184 KA_TRACE(20, (KMP_STR(func) " exit: T#%d\n", gtid)); \
1187#if OMPT_SUPPORT && OMPT_OPTIONAL
1189#define OMPT_LOOP_PRE() \
1190 ompt_frame_t *parent_frame; \
1191 if (ompt_enabled.enabled) { \
1192 __ompt_get_task_info_internal(0, NULL, NULL, &parent_frame, NULL, NULL); \
1193 parent_frame->enter_frame.ptr = OMPT_GET_FRAME_ADDRESS(0); \
1194 OMPT_STORE_RETURN_ADDRESS(gtid); \
1197#define OMPT_LOOP_POST() \
1198 if (ompt_enabled.enabled) { \
1199 parent_frame->enter_frame = ompt_data_none; \
1204#define OMPT_LOOP_PRE()
1206#define OMPT_LOOP_POST()
1226 void (*copy_func)(
void *,
void *),
1227 long arg_size,
long arg_align,
1228 bool if_cond,
unsigned gomp_flags,
1235 KA_TRACE(20, (
"GOMP_task: T#%d\n", gtid));
1243 input_flags->
final = 1;
1257 if (arg_align > 0) {
1259 arg_align * arg_align);
1274 current_task->ompt_task_info.frame.enter_frame.ptr =
1277 OMPT_STORE_RETURN_ADDRESS(gtid);
1284 kmp_int32 ndeps = gomp_depends.get_num_deps();
1287 dep_list[
i] = gomp_depends.get_kmp_depend(
i);
1303 oldInfo = thread->th.ompt_thread_info;
1304 thread->th.ompt_thread_info.
wait_id = 0;
1305 thread->th.ompt_thread_info.state = ompt_state_work_parallel;
1308 OMPT_STORE_RETURN_ADDRESS(gtid);
1313 kmp_int32 ndeps = gomp_depends.get_num_deps();
1316 dep_list[
i] = gomp_depends.get_kmp_depend(
i);
1326 thread->th.ompt_thread_info = oldInfo;
1327 taskdata->ompt_task_info.frame.exit_frame = ompt_data_none;
1333 current_task->ompt_task_info.frame.enter_frame = ompt_data_none;
1337 KA_TRACE(20, (
"GOMP_task exit: T#%d\n", gtid));
1345 OMPT_STORE_RETURN_ADDRESS(gtid);
1348 KA_TRACE(20, (
"GOMP_taskwait: T#%d\n", gtid));
1352 KA_TRACE(20, (
"GOMP_taskwait exit: T#%d\n", gtid));
1369 KA_TRACE(20, (
"GOMP_sections_start: T#%d\n", gtid));
1382 KA_TRACE(20, (
"GOMP_sections_start exit: T#%d returning %u\n", gtid,
1384 return (
unsigned)lb;
1392 KA_TRACE(20, (
"GOMP_sections_next: T#%d\n", gtid));
1395 OMPT_STORE_RETURN_ADDRESS(gtid);
1408 20, (
"GOMP_sections_next exit: T#%d returning %u\n", gtid, (
unsigned)lb));
1409 return (
unsigned)lb;
1417 ompt_frame_t *parent_frame;
1423 OMPT_STORE_RETURN_ADDRESS(gtid);
1426 MKLOC(
loc,
"GOMP_parallel_sections_start");
1427 KA_TRACE(20, (
"GOMP_parallel_sections_start: T#%d\n", gtid));
1436 parent_frame->enter_frame = ompt_data_none;
1442 KA_TRACE(20, (
"GOMP_parallel_sections_start exit: T#%d\n", gtid));
1447 KA_TRACE(20, (
"GOMP_sections_end: T#%d\n", gtid))
1450 ompt_frame_t *ompt_frame;
1455 OMPT_STORE_RETURN_ADDRESS(gtid);
1460 ompt_frame->enter_frame = ompt_data_none;
1464 KA_TRACE(20, (
"GOMP_sections_end exit: T#%d\n", gtid))
1479 unsigned num_threads,
1480 unsigned int flags) {
1483 KA_TRACE(20, (
"GOMP_parallel: T#%d\n", gtid));
1491 OMPT_STORE_RETURN_ADDRESS(gtid);
1505 OMPT_STORE_RETURN_ADDRESS(gtid);
1511 task_info->
frame.exit_frame = ompt_data_none;
1512 parent_task_info->
frame.enter_frame = ompt_data_none;
1519 unsigned num_threads,
1523 MKLOC(
loc,
"GOMP_parallel_sections");
1524 KA_TRACE(20, (
"GOMP_parallel_sections: T#%d\n", gtid));
1527 ompt_frame_t *task_frame;
1531 task_frame = &(thr->th.th_current_task->ompt_task_info.frame);
1534 OMPT_STORE_RETURN_ADDRESS(gtid);
1544 OMPT_STORE_RETURN_ADDRESS(gtid);
1551 ompt_frame_t *child_frame;
1553 child_frame = &(thr->th.th_current_task->ompt_task_info.frame);
1562 child_frame->exit_frame = ompt_data_none;
1567 KA_TRACE(20, (
"GOMP_parallel_sections exit: T#%d\n", gtid));
1571 task_frame->enter_frame = ompt_data_none;
1576#define PARALLEL_LOOP(func, schedule, ompt_pre, ompt_post) \
1577 void func(void (*task)(void *), void *data, unsigned num_threads, long lb, \
1578 long ub, long str, long chunk_sz, unsigned flags) { \
1579 int gtid = __kmp_entry_gtid(); \
1580 MKLOC(loc, KMP_STR(func)); \
1584 func) ": T#%d, lb 0x%lx, ub 0x%lx, str 0x%lx, chunk_sz 0x%lx\n", \
1585 gtid, lb, ub, str, chunk_sz)); \
1588 IF_OMPT_SUPPORT(OMPT_STORE_RETURN_ADDRESS(gtid);) \
1589 __kmp_GOMP_fork_call(&loc, gtid, num_threads, flags, task, \
1590 (microtask_t)__kmp_GOMP_parallel_microtask_wrapper, \
1591 9, task, data, num_threads, &loc, (schedule), lb, \
1592 (str > 0) ? (ub - 1) : (ub + 1), str, chunk_sz); \
1595 IF_OMPT_SUPPORT(OMPT_STORE_RETURN_ADDRESS(gtid);) \
1596 KMP_DISPATCH_INIT(&loc, gtid, (schedule), lb, \
1597 (str > 0) ? (ub - 1) : (ub + 1), str, chunk_sz, \
1598 (schedule) != kmp_sch_static); \
1601 KMP_EXPAND_NAME(KMP_API_NAME_GOMP_PARALLEL_END)(); \
1604 KA_TRACE(20, (KMP_STR(func) " exit: T#%d\n", gtid)); \
1630 MKLOC(
loc,
"GOMP_taskgroup_start");
1631 KA_TRACE(20, (
"GOMP_taskgroup_start: T#%d\n", gtid));
1634 OMPT_STORE_RETURN_ADDRESS(gtid);
1645 KA_TRACE(20, (
"GOMP_taskgroup_end: T#%d\n", gtid));
1648 OMPT_STORE_RETURN_ADDRESS(gtid);
1656static kmp_int32 __kmp_gomp_to_omp_cancellation_kind(
int gomp_kind) {
1658 switch (gomp_kind) {
1678 MKLOC(
loc,
"GOMP_cancellation_point");
1679 KA_TRACE(20, (
"GOMP_cancellation_point: T#%d which:%d\n", gtid, which));
1680 kmp_int32 cncl_kind = __kmp_gomp_to_omp_cancellation_kind(which);
1688 KA_TRACE(20, (
"GOMP_cancel: T#%d which:%d do_cancel:%d\n", gtid, which,
1690 kmp_int32 cncl_kind = __kmp_gomp_to_omp_cancellation_kind(which);
1692 if (do_cancel ==
FALSE) {
1702 KA_TRACE(20, (
"GOMP_barrier_cancel: T#%d\n", gtid));
1709 KA_TRACE(20, (
"GOMP_sections_end_cancel: T#%d\n", gtid));
1716 KA_TRACE(20, (
"GOMP_loop_end_cancel: T#%d\n", gtid));
1722 const void *openmp_target,
1723 size_t mapnum,
void **hostaddrs,
1725 unsigned char *kinds) {
1730 int device,
const void *openmp_target,
size_t mapnum,
void **hostaddrs,
1731 size_t *
sizes,
unsigned char *kinds) {
1738 int device,
const void *openmp_target,
size_t mapnum,
void **hostaddrs,
1739 size_t *
sizes,
unsigned char *kinds) {
1744 unsigned int thread_limit) {
1753 if (taskdata->td_copy_func) {
1754 (taskdata->td_copy_func)(
dest->shareds, src->
shareds);
1765template <
typename T>
1767 void (*copy_func)(
void *,
void *),
long arg_size,
1768 long arg_align,
unsigned gomp_flags,
1769 unsigned long num_tasks,
int priority, T start, T
end,
1777 int if_val = gomp_flags & (1u << 10);
1778 int nogroup = gomp_flags & (1u << 11);
1779 int up = gomp_flags & (1u << 8);
1780 int reductions = gomp_flags & (1u << 12);
1787 "GOMP_taskloop: T#%%d: func:%%p data:%%p copy_func:%%p "
1788 "arg_size:%%ld arg_align:%%ld gomp_flags:0x%%x num_tasks:%%lu "
1789 "priority:%%d start:%%%s end:%%%s step:%%%s\n",
1790 traits_t<T>::spec, traits_t<T>::spec, traits_t<T>::spec);
1792 gomp_flags, num_tasks, priority, start,
end, step));
1796 KMP_ASSERT((
size_t)arg_size >= 2 *
sizeof(T));
1799 if (!(gomp_flags & 1)) {
1803 if (gomp_flags & 2) {
1804 input_flags->
final = 1;
1812 for (
int i =
sizeof(T) * CHAR_BIT - 1;
i >= 0L; --
i) {
1814 if (step & ((T)1 <<
i))
1816 step |= ((T)1 <<
i);
1822 if (num_tasks > 0) {
1823 if (gomp_flags & (1u << 9))
1837 taskdata->td_copy_func = copy_func;
1838 taskdata->td_size_loop_bounds =
sizeof(T);
1843 arg_align * arg_align);
1845 task_dup = __kmp_gomp_task_dup;
1850 loop_bounds[0] = start;
1851 loop_bounds[1] =
end + (
up ? -1 : 1);
1854#if OMPT_SUPPORT && OMPT_OPTIONAL
1855 OMPT_STORE_RETURN_ADDRESS(gtid);
1864 uintptr_t *
d = ((data_t *)
data)->d;
1872#if OMPT_SUPPORT && OMPT_OPTIONAL
1873 OMPT_STORE_RETURN_ADDRESS(gtid);
1882template <
typename T,
bool need_conversion = (sizeof(
long) == 4)>
1889 kmp_int64 num_dims = th->th.th_dispatch->th_doacross_info[0];
1891 th, (
size_t)(
sizeof(
kmp_int64) * num_dims));
1912 kmp_int64 num_dims = th->th.th_dispatch->th_doacross_info[0];
1914 th, (
size_t)(
sizeof(
kmp_int64) * num_dims));
1917 T item = va_arg(
args, T);
1930 void (*
func)(
void *),
void *
data,
void (*copy_func)(
void *,
void *),
1931 long arg_size,
long arg_align,
unsigned gomp_flags,
unsigned long num_tasks,
1932 int priority,
long start,
long end,
long step) {
1933 __GOMP_taskloop<long>(
func,
data, copy_func, arg_size, arg_align, gomp_flags,
1934 num_tasks, priority, start,
end, step);
1938 void (*
func)(
void *),
void *
data,
void (*copy_func)(
void *,
void *),
1939 long arg_size,
long arg_align,
unsigned gomp_flags,
unsigned long num_tasks,
1940 int priority,
unsigned long long start,
unsigned long long end,
1941 unsigned long long step) {
1942 __GOMP_taskloop<unsigned long long>(
func,
data, copy_func, arg_size,
1943 arg_align, gomp_flags, num_tasks,
1944 priority, start,
end, step);
1953 va_start(
args, first);
1954 __kmp_GOMP_doacross_wait<long>(first,
args);
1959 unsigned long long *
count) {
1961 MKLOC(
loc,
"GOMP_doacross_ull_post");
1966 unsigned long long first, ...) {
1968 va_start(
args, first);
1969 __kmp_GOMP_doacross_wait<unsigned long long>(first,
args);
1980 unsigned thread_limit,
1984 KA_TRACE(20, (
"GOMP_teams_reg: T#%d num_teams=%u thread_limit=%u flag=%u\n",
1985 gtid, num_teams, thread_limit, flags));
1989 KA_TRACE(20, (
"GOMP_teams_reg exit: T#%d\n", gtid));
1993 MKLOC(
loc,
"GOMP_taskwait_depend");
1995 KA_TRACE(20, (
"GOMP_taskwait_depend: T#%d\n", gtid));
2002 OMPT_STORE_RETURN_ADDRESS(gtid);
2005 KA_TRACE(20, (
"GOMP_taskwait_depend exit: T#%d\n", gtid));
2011 uintptr_t *allocated =
nullptr) {
2017 data[2] = allocated[2];
2018 data[6] = allocated[6];
2030 KA_TRACE(20, (
"GOMP_taskgroup_reduction_register: T#%d\n", gtid));
2033 int nthreads = thread->th.th_team_nproc;
2040 (
"GOMP_taskgroup_reduction_unregister: T#%d\n",
__kmp_get_gtid()));
2051 KA_TRACE(20, (
"GOMP_task_reduction_remap: T#%d\n", gtid));
2054 for (
size_t i = 0;
i < cnt; ++
i) {
2055 uintptr_t
address = (uintptr_t)ptrs[
i];
2056 void *propagated_address = NULL;
2057 void *mapped_address = NULL;
2067 size_t num_vars = (size_t)gomp_data[0];
2068 uintptr_t per_thread_size = gomp_data[1];
2069 uintptr_t reduce_data = gomp_data[2];
2070 uintptr_t end_reduce_data = gomp_data[6];
2071 for (
size_t j = 0;
j < num_vars; ++
j) {
2072 uintptr_t *entry = gomp_data + 7 + 3 *
j;
2074 uintptr_t offset = entry[1];
2076 (
void *)(reduce_data + tid * per_thread_size + offset);
2078 propagated_address = (
void *)entry[0];
2085 if (!mapped_address &&
address >= reduce_data &&
2087 uintptr_t offset = (
address - reduce_data) % per_thread_size;
2088 mapped_address = (
void *)(reduce_data + tid * per_thread_size + offset);
2090 for (
size_t j = 0;
j < num_vars; ++
j) {
2091 uintptr_t *entry = gomp_data + 7 + 3 *
j;
2092 if (entry[1] == offset) {
2093 propagated_address = (
void *)entry[0];
2104 ptrs[
i] = mapped_address;
2107 ptrs[cnt +
i] = propagated_address;
2119 if (reduce_data == NULL &&
2130 &team->
t.t_tg_reduce_data[is_ws])) == (
void *)1) {
2141 data, NULL, thr->th.th_team_nproc,
2150 void (*
task)(
void *),
void *
data) {
2153 uintptr_t *reduce_data = *(uintptr_t **)
data;
2157 ompt_frame_t *ompt_frame;
2158 ompt_state_t enclosing_state;
2162 enclosing_state = thr->th.ompt_thread_info.state;
2163 thr->th.ompt_thread_info.state = ompt_state_work_parallel;
2176 ompt_frame->exit_frame = ompt_data_none;
2179 thr->th.ompt_thread_info.state = enclosing_state;
2187 if (
count == thr->th.th_team_nproc - 1) {
2191 return (
unsigned)thr->th.th_team_nproc;
2195 void (*
task)(
void *),
void *
data,
unsigned num_threads,
2196 unsigned int flags) {
2197 MKLOC(
loc,
"GOMP_parallel_reductions");
2199 KA_TRACE(20, (
"GOMP_parallel_reductions: T#%d\n", gtid));
2206 KA_TRACE(20, (
"GOMP_parallel_reductions exit: T#%d\n", gtid));
2212 long *iend, uintptr_t *reductions,
void **mem) {
2215 KA_TRACE(20, (
"GOMP_loop_start: T#%d, reductions: %p\n", gtid, reductions));
2219 KMP_FATAL(GompFeatureNotSupported,
"scan");
2223 long monotonic =
sched & MONOTONIC_FLAG;
2224 sched &= ~MONOTONIC_FLAG;
2228 start,
end, incr, istart, iend);
2232 start,
end, incr, istart, iend);
2233 }
else if (
sched == 1) {
2236 }
else if (
sched == 2) {
2244 }
else if (
sched == 3) {
2252 }
else if (
sched == 4) {
2254 start,
end, incr, istart, iend);
2262 bool up,
unsigned long long start,
unsigned long long end,
2264 unsigned long long *istart,
unsigned long long *iend, uintptr_t *reductions,
2269 (
"GOMP_loop_ull_start: T#%d, reductions: %p\n", gtid, reductions));
2273 KMP_FATAL(GompFeatureNotSupported,
"scan");
2277 long monotonic =
sched & MONOTONIC_FLAG;
2278 sched &= ~MONOTONIC_FLAG;
2282 up, start,
end, incr, istart, iend);
2286 up, start,
end, incr, istart, iend);
2287 }
else if (
sched == 1) {
2290 }
else if (
sched == 2) {
2298 }
else if (
sched == 3) {
2306 }
else if (
sched == 4) {
2309 up, start,
end, incr, istart, iend);
2317 unsigned ncounts,
long *counts,
long sched,
long chunk_size,
long *istart,
2318 long *iend, uintptr_t *reductions,
void **mem) {
2321 KA_TRACE(20, (
"GOMP_loop_doacross_start: T#%d, reductions: %p\n", gtid,
2326 KMP_FATAL(GompFeatureNotSupported,
"scan");
2331 sched &= ~MONOTONIC_FLAG;
2334 ncounts, counts, istart, iend);
2335 }
else if (
sched == 1) {
2338 }
else if (
sched == 2) {
2341 }
else if (
sched == 3) {
2351 unsigned ncounts,
unsigned long long *counts,
long sched,
2352 unsigned long long chunk_size,
unsigned long long *istart,
2353 unsigned long long *iend, uintptr_t *reductions,
void **mem) {
2356 KA_TRACE(20, (
"GOMP_loop_ull_doacross_start: T#%d, reductions: %p\n", gtid,
2361 KMP_FATAL(GompFeatureNotSupported,
"scan");
2366 sched &= ~MONOTONIC_FLAG;
2369 ncounts, counts, istart, iend);
2370 }
else if (
sched == 1) {
2373 }
else if (
sched == 2) {
2376 }
else if (
sched == 3) {
2387 long *iend, uintptr_t *reductions,
void **mem) {
2390 KA_TRACE(20, (
"GOMP_loop_ordered_start: T#%d, reductions: %p\n", gtid,
2395 KMP_FATAL(GompFeatureNotSupported,
"scan");
2400 sched &= ~MONOTONIC_FLAG;
2403 start,
end, incr, istart, iend);
2404 }
else if (
sched == 1) {
2407 }
else if (
sched == 2) {
2410 }
else if (
sched == 3) {
2420 bool up,
unsigned long long start,
unsigned long long end,
2422 unsigned long long *istart,
unsigned long long *iend, uintptr_t *reductions,
2426 KA_TRACE(20, (
"GOMP_loop_ull_ordered_start: T#%d, reductions: %p\n", gtid,
2431 KMP_FATAL(GompFeatureNotSupported,
"scan");
2436 sched &= ~MONOTONIC_FLAG;
2439 up, start,
end, incr, istart, iend);
2440 }
else if (
sched == 1) {
2443 }
else if (
sched == 2) {
2446 }
else if (
sched == 3) {
2456 unsigned count, uintptr_t *reductions,
void **mem) {
2459 (
"GOMP_sections2_start: T#%d, reductions: %p\n", gtid, reductions));
2463 KMP_FATAL(GompFeatureNotSupported,
"scan");
2470 MKLOC(
loc,
"GOMP_workshare_task_reduction_unregister");
2471 KA_TRACE(20, (
"GOMP_workshare_task_reduction_unregister: T#%d\n", gtid));
2479 if (
count == thr->th.th_team_nproc - 1) {
2492 uintptr_t allocator) {
2494 KA_TRACE(20, (
"GOMP_alloc: T#%d\n", gtid));
2495#if OMPT_SUPPORT && OMPT_OPTIONAL
2496 OMPT_STORE_RETURN_ADDRESS(gtid);
2503 KA_TRACE(20, (
"GOMP_free: T#%d\n", gtid));
2504#if OMPT_SUPPORT && OMPT_OPTIONAL
2505 OMPT_STORE_RETURN_ADDRESS(gtid);
2515#ifdef KMP_USE_VERSION_SYMBOLS
A simple pure header implementation of VLA that aims to replace uses of actual VLA,...
kmp_int32 get_num_deps() const
kmp_gomp_depends_info_t(void **depend)
kmp_depend_info_t get_kmp_depend(size_t index) const
kmp_int32(*)(kmp_int32, void *) kmp_routine_entry_t
KMP_EXPORT void __kmpc_fork_teams(ident_t *loc, kmp_int32 argc, kmpc_micro microtask,...)
KMP_EXPORT void __kmpc_push_num_teams(ident_t *loc, kmp_int32 global_tid, kmp_int32 num_teams, kmp_int32 num_threads)
KMP_EXPORT void __kmpc_barrier(ident_t *, kmp_int32 global_tid)
KMP_EXPORT kmp_int32 __kmpc_omp_task_with_deps(ident_t *loc_ref, kmp_int32 gtid, kmp_task_t *new_task, kmp_int32 ndeps, kmp_depend_info_t *dep_list, kmp_int32 ndeps_noalias, kmp_depend_info_t *noalias_dep_list)
KMP_EXPORT void __kmpc_omp_wait_deps(ident_t *loc_ref, kmp_int32 gtid, kmp_int32 ndeps, kmp_depend_info_t *dep_list, kmp_int32 ndeps_noalias, kmp_depend_info_t *noalias_dep_list)
KMP_EXPORT void __kmpc_end_ordered(ident_t *, kmp_int32 global_tid)
KMP_EXPORT void __kmpc_end_critical(ident_t *, kmp_int32 global_tid, kmp_critical_name *)
sched_type
Describes the loop schedule to be used for a parallel for loop.
KMP_EXPORT void __kmpc_ordered(ident_t *, kmp_int32 global_tid)
KMP_EXPORT void __kmpc_critical(ident_t *, kmp_int32 global_tid, kmp_critical_name *)
@ kmp_sch_static
static unspecialized
@ kmp_ord_dynamic_chunked
@ kmp_sch_guided_chunked
guided unspecialized
@ kmp_sch_dynamic_chunked
@ kmp_ord_static
ordered static unspecialized
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 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 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 count
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 ITT_FORMAT __itt_group_mark d void const wchar_t const wchar_t int ITT_FORMAT __itt_group_sync __itt_group_fsync x void const wchar_t int const wchar_t int int ITT_FORMAT __itt_group_sync __itt_group_fsync x void ITT_FORMAT __itt_group_sync __itt_group_fsync p void ITT_FORMAT __itt_group_sync __itt_group_fsync p void size_t ITT_FORMAT lu no args __itt_obj_prop_t __itt_obj_state_t ITT_FORMAT d const char ITT_FORMAT s const char ITT_FORMAT s __itt_frame ITT_FORMAT p __itt_counter ITT_FORMAT p __itt_counter unsigned long long ITT_FORMAT lu __itt_counter unsigned long long ITT_FORMAT lu __itt_counter __itt_clock_domain unsigned long long void ITT_FORMAT p const wchar_t ITT_FORMAT S __itt_mark_type const wchar_t ITT_FORMAT S __itt_mark_type const char ITT_FORMAT s __itt_mark_type ITT_FORMAT d __itt_caller ITT_FORMAT p __itt_caller ITT_FORMAT p no args const __itt_domain __itt_clock_domain unsigned long long __itt_id ITT_FORMAT lu const __itt_domain __itt_clock_domain unsigned long long __itt_id __itt_id void * fn
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 __itt_event ITT_FORMAT __itt_group_mark d void const wchar_t const wchar_t int ITT_FORMAT __itt_group_sync __itt_group_fsync x void const wchar_t int const wchar_t int int ITT_FORMAT __itt_group_sync __itt_group_fsync x void ITT_FORMAT __itt_group_sync __itt_group_fsync p void ITT_FORMAT __itt_group_sync __itt_group_fsync p void size_t ITT_FORMAT lu no args __itt_obj_prop_t __itt_obj_state_t ITT_FORMAT d const char ITT_FORMAT s const char ITT_FORMAT s __itt_frame frame
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 * address
void * omp_allocator_handle_t
KMP_EXPORT kmp_int32 __kmpc_omp_task(ident_t *loc_ref, kmp_int32 gtid, kmp_task_t *new_task)
void __kmp_run_before_invoked_task(int gtid, int tid, kmp_info_t *this_thr, kmp_team_t *team)
int __kmp_barrier(enum barrier_type bt, int gtid, int is_split, size_t reduce_size, void *reduce_data, void(*reduce)(void *, void *))
void ___kmpc_free(int gtid, void *ptr, omp_allocator_handle_t al)
static kmp_team_t * __kmp_team_from_gtid(int gtid)
void * __kmp_alloc(int gtid, size_t align, size_t sz, omp_allocator_handle_t al)
@ fork_context_gnu
Called from GNU generated code, so must not invoke the microtask internally.
void __kmp_push_num_threads(ident_t *loc, int gtid, int num_threads)
int __kmp_barrier_gomp_cancel(int gtid)
#define __kmp_entry_gtid()
static int __kmp_tid_from_gtid(int gtid)
KMP_EXPORT void __kmpc_taskloop(ident_t *loc, kmp_int32 gtid, kmp_task_t *task, kmp_int32 if_val, kmp_uint64 *lb, kmp_uint64 *ub, kmp_int64 st, kmp_int32 nogroup, kmp_int32 sched, kmp_uint64 grainsize, void *task_dup)
KMP_EXPORT void __kmpc_omp_task_complete_if0(ident_t *loc_ref, kmp_int32 gtid, kmp_task_t *task)
#define KMP_TASK_TO_TASKDATA(task)
KMP_EXPORT void __kmpc_doacross_post(ident_t *loc, kmp_int32 gtid, const kmp_int64 *vec)
int __kmp_enter_single(int gtid, ident_t *id_ref, int push_ws)
KMP_EXPORT kmp_int32 __kmpc_omp_taskwait(ident_t *loc_ref, kmp_int32 gtid)
#define __kmp_thread_malloc(th, size)
KMP_EXPORT void __kmpc_end_taskgroup(ident_t *loc, int gtid)
kmp_info_t ** __kmp_threads
KMP_EXPORT void __kmpc_omp_task_begin_if0(ident_t *loc_ref, kmp_int32 gtid, kmp_task_t *task)
void __kmp_run_after_invoked_task(int gtid, int tid, kmp_info_t *this_thr, kmp_team_t *team)
void __kmp_parallel_initialize(void)
KMP_EXPORT void __kmpc_doacross_wait(ident_t *loc, kmp_int32 gtid, const kmp_int64 *vec)
volatile int __kmp_init_parallel
#define __kmp_allocate(size)
int __kmp_fork_call(ident_t *loc, int gtid, enum fork_context_e fork_context, kmp_int32 argc, microtask_t microtask, launch_t invoker, kmp_va_list ap)
KMP_EXPORT kmp_int32 __kmpc_cancel(ident_t *loc_ref, kmp_int32 gtid, kmp_int32 cncl_kind)
KMP_EXPORT void __kmpc_taskgroup(ident_t *loc, int gtid)
void __kmp_push_proc_bind(ident_t *loc, int gtid, kmp_proc_bind_t proc_bind)
int __kmp_invoke_task_func(int gtid)
kmp_task_t * __kmp_task_alloc(ident_t *loc_ref, kmp_int32 gtid, kmp_tasking_flags_t *flags, size_t sizeof_kmp_task_t, size_t sizeof_shareds, kmp_routine_entry_t task_entry)
KMP_EXPORT kmp_int32 __kmpc_cancellationpoint(ident_t *loc_ref, kmp_int32 gtid, kmp_int32 cncl_kind)
void __kmp_resume_if_soft_paused()
static void __kmp_type_convert(T1 src, T2 *dest)
void __kmp_join_call(ident_t *loc, int gtid, int exit_teams=0)
union KMP_ALIGN_CACHE kmp_info kmp_info_t
#define __kmp_thread_free(th, ptr)
kmp_atomic_lock_t __kmp_atomic_lock
static void __kmp_acquire_atomic_lock(kmp_atomic_lock_t *lck, kmp_int32 gtid)
static void __kmp_release_atomic_lock(kmp_atomic_lock_t *lck, kmp_int32 gtid)
#define KMP_DEBUG_ASSERT(cond)
unsigned long long kmp_uint64
#define KMP_API_NAME_GOMP_FREE
#define KMP_API_NAME_GOMP_WORKSHARE_TASK_REDUCTION_UNREGISTER
#define KMP_API_NAME_GOMP_LOOP_ULL_GUIDED_NEXT
#define KMP_API_NAME_GOMP_LOOP_ULL_STATIC_START
#define KMP_API_NAME_GOMP_SECTIONS2_START
#define KMP_API_NAME_GOMP_PARALLEL_LOOP_STATIC_START
#define KMP_API_NAME_GOMP_LOOP_DOACROSS_GUIDED_START
#define KMP_API_NAME_GOMP_PARALLEL_LOOP_DYNAMIC_START
#define KMP_API_NAME_GOMP_LOOP_ULL_MAYBE_NONMONOTONIC_RUNTIME_NEXT
#define KMP_API_NAME_GOMP_TEAMS
#define KMP_API_NAME_GOMP_PARALLEL_REDUCTIONS
#define KMP_API_NAME_GOMP_LOOP_ORDERED_GUIDED_NEXT
#define KMP_API_NAME_GOMP_TARGET_DATA
#define KMP_API_NAME_GOMP_LOOP_ULL_NONMONOTONIC_RUNTIME_NEXT
#define KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_GUIDED_NEXT
#define KMP_API_NAME_GOMP_LOOP_END_CANCEL
#define KMP_API_NAME_GOMP_PARALLEL_LOOP_GUIDED_START
#define KMP_API_NAME_GOMP_SECTIONS_NEXT
#define KMP_API_NAME_GOMP_LOOP_MAYBE_NONMONOTONIC_RUNTIME_NEXT
#define KMP_API_NAME_GOMP_LOOP_MAYBE_NONMONOTONIC_RUNTIME_START
#define KMP_API_NAME_GOMP_LOOP_ULL_START
#define KMP_API_NAME_GOMP_LOOP_ORDERED_STATIC_START
#define KMP_API_NAME_GOMP_LOOP_DYNAMIC_NEXT
#define KMP_API_NAME_GOMP_SINGLE_COPY_END
#define KMP_API_NAME_GOMP_LOOP_NONMONOTONIC_GUIDED_START
#define KMP_API_NAME_GOMP_TASK_REDUCTION_REMAP
#define KMP_API_NAME_GOMP_PARALLEL_LOOP_DYNAMIC
#define KMP_API_NAME_GOMP_BARRIER_CANCEL
#define KMP_API_NAME_GOMP_LOOP_ULL_DOACROSS_GUIDED_START
#define KMP_API_NAME_GOMP_DOACROSS_ULL_POST
#define KMP_API_NAME_GOMP_PARALLEL_LOOP_GUIDED
#define KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_STATIC_NEXT
#define KMP_API_NAME_GOMP_LOOP_ORDERED_DYNAMIC_NEXT
#define KMP_API_NAME_GOMP_TASKGROUP_REDUCTION_REGISTER
#define KMP_API_NAME_GOMP_LOOP_ORDERED_GUIDED_START
#define KMP_API_NAME_GOMP_LOOP_ULL_NONMONOTONIC_GUIDED_NEXT
#define KMP_API_NAME_GOMP_LOOP_ORDERED_STATIC_NEXT
#define KMP_API_NAME_GOMP_LOOP_START
#define KMP_API_NAME_GOMP_LOOP_ULL_RUNTIME_START
#define KMP_API_NAME_GOMP_TASKGROUP_START
#define KMP_API_NAME_GOMP_LOOP_ULL_NONMONOTONIC_DYNAMIC_NEXT
#define KMP_API_NAME_GOMP_DOACROSS_ULL_WAIT
#define KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_GUIDED_START
#define KMP_API_NAME_GOMP_LOOP_RUNTIME_START
#define KMP_API_NAME_GOMP_LOOP_DYNAMIC_START
#define KMP_API_NAME_GOMP_SECTIONS_END_CANCEL
#define KMP_API_NAME_GOMP_TASKLOOP
#define KMP_API_NAME_GOMP_LOOP_ULL_NONMONOTONIC_DYNAMIC_START
#define KMP_API_NAME_GOMP_LOOP_NONMONOTONIC_RUNTIME_NEXT
#define KMP_API_NAME_GOMP_LOOP_GUIDED_START
#define KMP_API_NAME_GOMP_LOOP_ULL_DYNAMIC_NEXT
#define KMP_API_NAME_GOMP_PARALLEL_LOOP_RUNTIME_START
#define KMP_API_NAME_GOMP_SECTIONS_START
#define KMP_API_NAME_GOMP_PARALLEL_SECTIONS_START
#define KMP_API_NAME_GOMP_TASK
#define KMP_API_NAME_GOMP_LOOP_GUIDED_NEXT
#define KMP_API_NAME_GOMP_LOOP_ORDERED_DYNAMIC_START
#define KMP_API_NAME_GOMP_PARALLEL_LOOP_NONMONOTONIC_DYNAMIC
#define KMP_API_NAME_GOMP_LOOP_ULL_NONMONOTONIC_RUNTIME_START
#define KMP_API_NAME_GOMP_TASKWAIT_DEPEND
#define KMP_API_NAME_GOMP_TEAMS_REG
#define KMP_API_NAME_GOMP_ALLOC
#define KMP_API_NAME_GOMP_LOOP_ULL_STATIC_NEXT
#define KMP_API_NAME_GOMP_PARALLEL
#define KMP_API_NAME_GOMP_TASKLOOP_ULL
#define KMP_API_NAME_GOMP_SECTIONS_END
#define KMP_API_NAME_GOMP_LOOP_ULL_GUIDED_START
#define KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_DYNAMIC_START
#define KMP_API_NAME_GOMP_TARGET_END_DATA
#define KMP_API_NAME_GOMP_LOOP_ORDERED_RUNTIME_NEXT
#define KMP_API_NAME_GOMP_CRITICAL_NAME_START
#define KMP_API_NAME_GOMP_LOOP_STATIC_NEXT
#define KMP_API_NAME_GOMP_PARALLEL_SECTIONS
#define KMP_API_NAME_GOMP_LOOP_ULL_DOACROSS_DYNAMIC_START
#define KMP_API_NAME_GOMP_LOOP_ULL_NONMONOTONIC_GUIDED_START
#define KMP_API_NAME_GOMP_LOOP_ULL_DOACROSS_RUNTIME_START
#define KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_STATIC_START
#define KMP_API_NAME_GOMP_LOOP_NONMONOTONIC_RUNTIME_START
#define KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_DYNAMIC_NEXT
#define KMP_API_NAME_GOMP_TARGET_UPDATE
#define KMP_API_NAME_GOMP_TASKGROUP_REDUCTION_UNREGISTER
#define KMP_API_NAME_GOMP_PARALLEL_LOOP_STATIC
#define KMP_API_NAME_GOMP_TASKWAIT
#define KMP_API_NAME_GOMP_LOOP_ULL_RUNTIME_NEXT
#define KMP_API_NAME_GOMP_LOOP_ULL_MAYBE_NONMONOTONIC_RUNTIME_START
#define KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_RUNTIME_NEXT
#define KMP_API_NAME_GOMP_LOOP_DOACROSS_DYNAMIC_START
#define KMP_API_NAME_GOMP_TARGET
#define KMP_API_NAME_GOMP_CRITICAL_NAME_END
#define KMP_API_NAME_GOMP_LOOP_DOACROSS_STATIC_START
#define KMP_API_NAME_GOMP_LOOP_END
#define KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_RUNTIME_START
#define KMP_API_NAME_GOMP_LOOP_DOACROSS_START
#define KMP_API_NAME_GOMP_TASKGROUP_END
#define KMP_API_NAME_GOMP_LOOP_ULL_DYNAMIC_START
#define KMP_API_NAME_GOMP_PARALLEL_LOOP_NONMONOTONIC_GUIDED
#define KMP_API_NAME_GOMP_TASKYIELD
#define KMP_API_NAME_GOMP_LOOP_ULL_DOACROSS_STATIC_START
#define KMP_API_NAME_GOMP_PARALLEL_START
#define KMP_API_NAME_GOMP_DOACROSS_WAIT
#define KMP_API_NAME_GOMP_LOOP_END_NOWAIT
#define KMP_API_NAME_GOMP_CANCELLATION_POINT
#define KMP_API_NAME_GOMP_LOOP_DOACROSS_RUNTIME_START
#define KMP_API_NAME_GOMP_LOOP_ORDERED_RUNTIME_START
#define KMP_API_NAME_GOMP_LOOP_ORDERED_START
#define KMP_API_NAME_GOMP_LOOP_NONMONOTONIC_DYNAMIC_START
#define KMP_API_NAME_GOMP_LOOP_RUNTIME_NEXT
#define KMP_API_NAME_GOMP_CANCEL
#define KMP_API_NAME_GOMP_PARALLEL_LOOP_MAYBE_NONMONOTONIC_RUNTIME
#define KMP_API_NAME_GOMP_PARALLEL_LOOP_NONMONOTONIC_RUNTIME
#define KMP_API_NAME_GOMP_LOOP_ULL_ORDERED_START
#define KMP_API_NAME_GOMP_LOOP_NONMONOTONIC_GUIDED_NEXT
#define KMP_API_NAME_GOMP_LOOP_ULL_DOACROSS_START
#define KMP_API_NAME_GOMP_LOOP_NONMONOTONIC_DYNAMIC_NEXT
#define KMP_API_NAME_GOMP_LOOP_STATIC_START
#define KMP_API_NAME_GOMP_PARALLEL_LOOP_RUNTIME
#define KMP_API_NAME_GOMP_DOACROSS_POST
#define KMP_API_NAME_GOMP_SECTIONS_END_NOWAIT
void *KMP_EXPAND_NAME() KMP_API_NAME_GOMP_SINGLE_COPY_START(void)
#define LOOP_NEXT(func, fini_code)
#define LOOP_DOACROSS_START_ULL(func, schedule)
#define KMP_DISPATCH_FINI_CHUNK_ULL
void KMP_EXPAND_NAME() KMP_API_NAME_GOMP_ORDERED_END(void)
void __kmp_GOMP_doacross_post< long, true >(long *count)
int KMP_EXPAND_NAME() KMP_API_NAME_GOMP_SINGLE_START(void)
@ KMP_GOMP_TASK_UNTIED_FLAG
@ KMP_GOMP_TASK_DEPENDS_FLAG
@ KMP_GOMP_TASK_FINAL_FLAG
static void __kmp_GOMP_microtask_wrapper(int *gtid, int *npr, void(*task)(void *), void *data)
void KMP_EXPAND_NAME() KMP_API_NAME_GOMP_ATOMIC_END(void)
#define KMP_DISPATCH_FINI_CHUNK
void __kmp_GOMP_doacross_wait(T first, va_list args)
#define KMP_DISPATCH_NEXT
#define LOOP_START(func, schedule)
#define PARALLEL_LOOP_START(func, schedule, ompt_pre, ompt_post)
#define LOOP_DOACROSS_RUNTIME_START_ULL(func, schedule)
void __kmp_GOMP_doacross_post< long, false >(long *count)
static void __kmp_GOMP_taskgroup_reduction_register(uintptr_t *data, kmp_taskgroup_t *tg, int nthreads, uintptr_t *allocated=nullptr)
void KMP_EXPAND_NAME() KMP_API_NAME_GOMP_CRITICAL_END(void)
#define LOOP_RUNTIME_START(func, schedule)
kmp_sch_dynamic_chunked kmp_sch_guided_chunked kmp_sch_runtime void __GOMP_taskloop(void(*func)(void *), void *data, void(*copy_func)(void *, void *), long arg_size, long arg_align, unsigned gomp_flags, unsigned long num_tasks, int priority, T start, T end, T step)
static unsigned __kmp_GOMP_par_reductions_microtask_wrapper(int *gtid, int *npr, void(*task)(void *), void *data)
#define KMP_DISPATCH_INIT
void KMP_EXPAND_NAME() KMP_API_NAME_GOMP_ATOMIC_START(void)
#define LOOP_DOACROSS_RUNTIME_START(func, schedule)
#define LOOP_START_ULL(func, schedule)
void KMP_EXPAND_NAME() KMP_API_NAME_GOMP_CRITICAL_START(void)
#define MKLOC(loc, routine)
void __kmp_GOMP_doacross_post(T *count)
@ KMP_GOMP_DEPOBJ_MTXINOUTSET
#define PARALLEL_LOOP(func, schedule, ompt_pre, ompt_post)
void KMP_EXPAND_NAME() KMP_API_NAME_GOMP_ORDERED_START(void)
#define LOOP_DOACROSS_START(func, schedule)
kmp_critical_name * __kmp_unnamed_critical_addr
#define LOOP_NEXT_ULL(func, fini_code)
static void __kmp_GOMP_parallel_microtask_wrapper(int *gtid, int *npr, void(*task)(void *), void *data, unsigned num_threads, ident_t *loc, enum sched_type schedule, long start, long end, long incr, long chunk_size)
#define LOOP_RUNTIME_START_ULL(func, schedule)
static void __kmp_GOMP_fork_call(ident_t *loc, int gtid, unsigned num_threads, unsigned flags, void(*unwrapped_task)(void *), microtask_t wrapper, int argc,...)
void KMP_EXPAND_NAME() KMP_API_NAME_GOMP_PARALLEL_END(void)
void KMP_EXPAND_NAME() KMP_API_NAME_GOMP_BARRIER(void)
static void __kmp_GOMP_init_reductions(int gtid, uintptr_t *data, int is_ws)
static volatile kmp_i18n_cat_status_t status
#define KMP_VERSION_SYMBOL(api_name, ver_num, ver_str)
void(* microtask_t)(int *gtid, int *npr,...)
#define KMP_ATOMIC_ST_REL(p, v)
bool __kmp_atomic_compare_store(std::atomic< T > *p, T expected, T desired)
#define KMP_ATOMIC_LD_ACQ(p)
#define kmp_va_addr_of(ap)
#define KMP_ATOMIC_LD_RLX(p)
#define KMP_EXPAND_NAME(api_name)
#define KMP_ATOMIC_INC(p)
char * __kmp_str_format(char const *format,...)
void __kmp_str_free(char **str)
void(* p_task_dup_t)(kmp_task_t *, kmp_task_t *, kmp_int32)
ompt_callbacks_active_t ompt_enabled
ompt_callbacks_internal_t ompt_callbacks
#define OMPT_GET_RETURN_ADDRESS(level)
#define OMPT_GET_FRAME_ADDRESS(level)
void __ompt_thread_assign_wait_id(void *variable)
ompt_team_info_t * __ompt_get_teaminfo(int depth, int *size)
int __ompt_get_task_info_internal(int ancestor_level, int *type, ompt_data_t **task_data, ompt_frame_t **task_frame, ompt_data_t **parallel_data, int *thread_num)
ompt_task_info_t * __ompt_get_task_info_object(int depth)
struct kmp_depend_info::@8::@10 flags
void * shareds
pointer to block of pointers to shared vars
struct kmp_taskgroup * parent
ompt_data_t parallel_data