39#ifdef USE_LOAD_BALANCE
40static double __kmp_convert_to_double(
char const *
s) {
52static unsigned int __kmp_readstr_with_sentinel(
char *dest,
char const *src,
53 size_t len,
char sentinel) {
55 for (
i = 0;
i < len;
i++) {
56 if ((*src ==
'\0') || (*src == sentinel)) {
74 while (*
a && *
b && *
b != sentinel) {
75 char ca = *
a, cb = *
b;
77 if (ca >=
'a' && ca <=
'z')
79 if (cb >=
'a' && cb <=
'z')
120 while (*token && *
buf) {
121 char ct = *token, cb = *
buf;
123 if (ct >=
'a' && ct <=
'z')
125 if (cb >=
'a' && cb <=
'z')
140static size_t __kmp_round4k(
size_t size) {
141 size_t _4k = 4 * 1024;
142 if (
size & (_4k - 1)) {
158 while (*
a && *
b && *
b != sentinel) {
159 char ca = *
a, cb = *
b;
161 if (ca >=
'a' && ca <=
'z')
163 if (cb >=
'a' && cb <=
'z')
166 return (
int)(
unsigned char)*
a - (
int)(
unsigned char)*
b;
170 return *
a ? (*
b && *
b != sentinel)
171 ? (
int)(
unsigned char)*
a - (
int)(
unsigned char)*
b
173 : (*
b && *
b != sentinel) ? -1
229 const char *
begin = str;
270 *
val = __kmp_round4k(*
val);
275 size_t size_min,
size_t size_max,
276 int *is_specified,
size_t *out,
278 char const *msg = NULL;
280 size_min = __kmp_round4k(size_min);
281 size_max = __kmp_round4k(size_max);
284 if (is_specified != NULL) {
289 if (*out > size_max) {
292 }
else if (*out < size_min) {
297 size_t round4k = __kmp_round4k(*out);
298 if (*out != round4k) {
307 if (*out < size_min) {
309 }
else if (*out > size_max) {
339 char const *msg = NULL;
343 if (uint < (
unsigned int)
min) {
346 }
else if (uint > (
unsigned int)max) {
353 if (uint < (
unsigned int)
min) {
355 }
else if (uint > (
unsigned int)max) {
371#if KMP_DEBUG_ADAPTIVE_LOCKS
372static void __kmp_stg_parse_file(
char const *
name,
char const *
value,
373 const char *suffix,
char **out) {
378 t = (
char *)strrchr(
value,
'.');
388static char *par_range_to_print = NULL;
390static void __kmp_stg_parse_par_range(
char const *
name,
char const *
value,
391 int *out_range,
char *out_routine,
392 char *out_file,
int *out_lb,
394 const char *par_range_value;
398 __kmp_par_range = +1;
399 __kmp_par_range_lb = 0;
400 __kmp_par_range_ub = INT_MAX;
407 par_range_value = strchr(
value,
'=') + 1;
408 if (!par_range_value)
409 goto par_range_error;
410 value = par_range_value;
411 len = __kmp_readstr_with_sentinel(out_routine,
value,
412 KMP_PAR_RANGE_ROUTINE_LEN - 1,
',');
414 goto par_range_error;
423 par_range_value = strchr(
value,
'=') + 1;
424 if (!par_range_value)
425 goto par_range_error;
426 value = par_range_value;
427 len = __kmp_readstr_with_sentinel(out_file,
value,
428 KMP_PAR_RANGE_FILENAME_LEN - 1,
',');
430 goto par_range_error;
440 par_range_value = strchr(
value,
'=') + 1;
441 if (!par_range_value)
442 goto par_range_error;
443 value = par_range_value;
445 goto par_range_error;
455 par_range_value = strchr(
value,
'=') + 1;
456 if (!par_range_value)
457 goto par_range_error;
458 value = par_range_value;
460 goto par_range_error;
482 if (nth < (4 * req_nproc))
483 nth = (4 * req_nproc);
500 int all_threads_specified) {
503 if (all_threads_specified)
507 if (nth < (4 * req_nproc))
508 nth = (4 * req_nproc);
581 if (strcmp(
name,
"KMP_ALL_THREADS") == 0) {
677 const int ms_mult = 1000;
683 if ((*
buf >=
'0') && (*
buf <=
'9')) {
700 multiplier = ms_mult;
710 multiplier = ms_mult;
716 multiplier = ms_mult;
748 __kmp_monitor_wakeups =
792#if KMP_ARCH_X86 || KMP_ARCH_X86_64
794static void __kmp_stg_parse_inherit_fp_control(
char const *
name,
799static void __kmp_stg_print_inherit_fp_control(
kmp_str_buf_t *buffer,
871 char const *
value = NULL;
892 value =
"turnaround";
895 value =
"throughput";
912static void __kmp_stg_parse_monitor_stacksize(
char const *
name,
915 NULL, &__kmp_monitor_stksize, 1);
918static void __kmp_stg_print_monitor_stacksize(
kmp_str_buf_t *buffer,
921 if (__kmp_monitor_stksize > 0)
928 if (__kmp_monitor_stksize > 0) {
1072#if KMP_AFFINITY_SUPPORTED && KMP_USE_HWLOC
1074 __kmp_affinity_top_method = affinity_top_method_hwloc;
1118 const char *next = env;
1119 const char *scan = next;
1122 int prev_comma =
FALSE;
1128 if (*next ==
'\0') {
1132 if (((*next <
'0') || (*next >
'9')) && (*next !=
',')) {
1139 if (total == 0 || prev_comma) {
1147 if (*next >=
'0' && *next <=
'9') {
1151 const char *tmp = next;
1153 if ((*next ==
' ' || *next ==
'\t') && (*tmp >=
'0' && *tmp <=
'9')) {
1167 if (!nth_array->
nth) {
1170 if (nth_array->
nth == NULL) {
1173 nth_array->
size = total * 2;
1175 if (nth_array->
size < total) {
1178 nth_array->
size *= 2;
1179 }
while (nth_array->
size < total);
1182 nth_array->
nth,
sizeof(
int) * nth_array->
size);
1183 if (nth_array->
nth == NULL) {
1188 nth_array->
used = total;
1196 if (*scan ==
'\0') {
1206 nth_array->
nth[
i++] = 0;
1208 }
else if (prev_comma) {
1210 nth_array->
nth[
i] = nth_array->
nth[
i - 1];
1219 if (*scan >=
'0' && *scan <=
'9') {
1221 const char *
buf = scan;
1222 char const *msg = NULL;
1240 nth_array->
nth[
i++] = num;
1270static void __kmp_stg_parse_max_tdgs(
char const *
name,
char const *
value,
1280static void __kmp_stg_parse_tdg_dot(
char const *
name,
char const *
value,
1326 (
"__kmp_stg_parse_use_hidden_helper: Disable hidden helper task on "
1327 "non-Linux platform although it is enabled by user explicitly.\n"));
1392 char const *msg = NULL;
1432 const char *scan = value_str.
get();
1451 const char *
value = NULL;
1455 value =
"MANDATORY";
1547#if KMP_HANDLE_SIGNALS
1549static void __kmp_stg_parse_handle_signals(
char const *
name,
char const *
value,
1554static void __kmp_stg_print_handle_signals(
kmp_str_buf_t *buffer,
1566#define KMP_STG_X_DEBUG(x) \
1567 static void __kmp_stg_parse_##x##_debug(char const *name, char const *value, \
1569 __kmp_stg_parse_int(name, value, 0, INT_MAX, &kmp_##x##_debug); \
1571 static void __kmp_stg_print_##x##_debug(kmp_str_buf_t *buffer, \
1572 char const *name, void *data) { \
1573 __kmp_stg_print_int(buffer, name, kmp_##x##_debug); \
1583#undef KMP_STG_X_DEBUG
1585static void __kmp_stg_parse_debug(
char const *
name,
char const *
value,
1589 if (kmp_a_debug < debug) {
1590 kmp_a_debug = debug;
1592 if (kmp_b_debug < debug) {
1593 kmp_b_debug = debug;
1595 if (kmp_c_debug < debug) {
1596 kmp_c_debug = debug;
1598 if (kmp_d_debug < debug) {
1599 kmp_d_debug = debug;
1601 if (kmp_e_debug < debug) {
1602 kmp_e_debug = debug;
1604 if (kmp_f_debug < debug) {
1605 kmp_f_debug = debug;
1609static void __kmp_stg_parse_debug_buf(
char const *
name,
char const *
value,
1634static void __kmp_stg_parse_debug_buf_atomic(
char const *
name,
1639static void __kmp_stg_print_debug_buf_atomic(
kmp_str_buf_t *buffer,
1644static void __kmp_stg_parse_debug_buf_chars(
char const *
name,
char const *
value,
1650static void __kmp_stg_print_debug_buf_chars(
kmp_str_buf_t *buffer,
1655static void __kmp_stg_parse_debug_buf_lines(
char const *
name,
char const *
value,
1661static void __kmp_stg_print_debug_buf_lines(
kmp_str_buf_t *buffer,
1666static void __kmp_stg_parse_diag(
char const *
name,
char const *
value,
1710 if ((strcmp(var,
name) == 0) && (
value != 0)) {
1717 if (comma == NULL) {
1725 KMP_MSG(BarrReleaseValueInvalid,
name, comma + 1),
1748 if (strcmp(var,
name) == 0) {
1774 static int dist_req = 0, non_dist_req = 0;
1775 static bool warn = 1;
1779 if ((strcmp(var,
name) == 0) && (
value != 0)) {
1781 char *comma =
CCAST(
char *, strchr(
value,
','));
1803 if (comma != NULL) {
1817 KMP_MSG(BarrReleaseValueInvalid,
name, comma + 1),
1825 if (dist_req != 0) {
1827 if ((non_dist_req != 0) && warn) {
1846 if (strcmp(var,
name) == 0) {
1884#if KMP_AFFINITY_SUPPORTED
1886 K_DIAG(1, (
"__kmp_cpuinfo_file == %s\n", __kmp_cpuinfo_file));
1892#if KMP_AFFINITY_SUPPORTED
1898 if (__kmp_cpuinfo_file) {
1918 if (reduction->
force) {
1938 K_DIAG(1, (
"__kmp_force_reduction_method == %d\n",
1946 if (reduction->
force) {
2025static inline const char *
2031#if KMP_ARCH_X86 || KMP_ARCH_X86_64
2032 case KMP_HW_CORE_TYPE_ATOM:
2033 return "intel_atom";
2034 case KMP_HW_CORE_TYPE_CORE:
2035 return "intel_core";
2038 KMP_ASSERT2(
false,
"Unhandled kmp_hw_core_type_t enumeration");
2042#if KMP_AFFINITY_SUPPORTED
2044static int __kmp_parse_affinity_proc_id_list(
const char *var,
const char *env,
2045 const char **nextEnv,
2047 const char *scan = env;
2048 const char *next = scan;
2054 int start,
end, stride;
2058 if (*next ==
'\0') {
2069 if ((*next <
'0') || (*next >
'9')) {
2093 if ((*next <
'0') || (*next >
'9')) {
2113 if ((*next <
'0') || (*next >
'9')) {
2143 if ((*next <
'0') || (*next >
'9')) {
2166 if ((*next <
'0') || (*next >
'9')) {
2192 if ((
end - start) / stride > 65536) {
2210 ptrdiff_t len = next - env;
2212 KMP_MEMCPY_S(retlist, (len + 1) *
sizeof(
char), env, len *
sizeof(
char));
2213 retlist[len] =
'\0';
2214 *proclist = retlist;
2223static void __kmp_parse_affinity_env(
char const *
name,
char const *
value,
2224 kmp_affinity_t *out_affinity) {
2225 char *buffer = NULL;
2263#define EMIT_WARN(skip, errlist) \
2267 SKIP_TO(next, ','); \
2271 KMP_WARNING errlist; \
2280#define _set_param(_guard, _var, _val) \
2282 if (_guard == 0) { \
2285 EMIT_WARN(FALSE, (AffParamDefined, name, start)); \
2290#define set_type(val) _set_param(type, out_affinity->type, val)
2291#define set_verbose(val) _set_param(verbose, out_affinity->flags.verbose, val)
2292#define set_warnings(val) \
2293 _set_param(warnings, out_affinity->flags.warnings, val)
2294#define set_respect(val) _set_param(respect, out_affinity->flags.respect, val)
2295#define set_dups(val) _set_param(dups, out_affinity->flags.dups, val)
2296#define set_proclist(val) _set_param(proclist, out_affinity->proclist, val)
2297#define set_reset(val) _set_param(reset, out_affinity->flags.reset, val)
2299#define set_gran(val, levels) \
2302 out_affinity->gran = val; \
2303 out_affinity->gran_levels = levels; \
2305 EMIT_WARN(FALSE, (AffParamDefined, name, start)); \
2313 while (*
buf !=
'\0') {
2317 set_type(affinity_none);
2321 set_type(affinity_scatter);
2325 set_type(affinity_compact);
2329 set_type(affinity_logical);
2333 set_type(affinity_physical);
2337 set_type(affinity_explicit);
2341 set_type(affinity_balanced);
2345 set_type(affinity_disabled);
2358 CCAST(
const char **, &next))) {
2359 set_warnings(
FALSE);
2374 CCAST(
const char **, &next)) ||
2379 CCAST(
const char **, &next)) ||
2384 CCAST(
const char **, &next)) ||
2388 EMIT_WARN(
TRUE, (AffInvalidParam,
name, start));
2400 out_affinity->flags.core_types_gran = 1;
2404 CCAST(
const char **, &next)) ||
2406 CCAST(
const char **, &next))) {
2408 out_affinity->flags.core_effs_gran = 1;
2431 CCAST(
const char **, &next))) {
2439#if KMP_GROUP_AFFINITY
2445 }
else if ((*
buf >=
'0') && (*
buf <=
'9')) {
2455 EMIT_WARN(
TRUE, (AffInvalidParam,
name, start));
2460 char *temp_proclist;
2464 EMIT_WARN(
TRUE, (AffInvalidParam,
name, start));
2470 EMIT_WARN(
TRUE, (AffInvalidParam,
name, start));
2475 if (!__kmp_parse_affinity_proc_id_list(
2476 name,
buf,
CCAST(
const char **, &next), &temp_proclist)) {
2488 EMIT_WARN(
TRUE, (AffInvalidParam,
name, start));
2492 set_proclist(temp_proclist);
2493 }
else if ((*
buf >=
'0') && (*
buf <=
'9')) {
2508 EMIT_WARN(
TRUE, (AffInvalidParam,
name, start));
2516 }
else if (*next !=
'\0') {
2517 const char *temp = next;
2518 EMIT_WARN(
TRUE, (ParseExtraCharsWarn,
name, temp));
2530#undef set_granularity
2538 out_affinity->type = affinity_explicit;
2540 }
else if (out_affinity->type != affinity_explicit) {
2544 out_affinity->proclist = NULL;
2547 switch (out_affinity->type) {
2548 case affinity_logical:
2549 case affinity_physical: {
2551 out_affinity->offset = number[0];
2557 case affinity_balanced: {
2559 out_affinity->compact = number[0];
2562 out_affinity->offset = number[1];
2566 int verbose = out_affinity->flags.verbose;
2567 int warnings = out_affinity->flags.warnings;
2568#if KMP_MIC_SUPPORTED
2569 if (__kmp_mic_type != non_mic) {
2570 if (verbose || warnings) {
2571 KMP_WARNING(AffGranUsing, out_affinity->env_var,
"fine");
2577 if (verbose || warnings) {
2578 KMP_WARNING(AffGranUsing, out_affinity->env_var,
"core");
2584 case affinity_scatter:
2585 case affinity_compact: {
2587 out_affinity->compact = number[0];
2590 out_affinity->offset = number[1];
2593 case affinity_explicit: {
2594 if (out_affinity->proclist == NULL) {
2596 out_affinity->type = affinity_none;
2602 case affinity_none: {
2607 case affinity_disabled: {
2612 case affinity_default: {
2623static void __kmp_stg_parse_affinity(
char const *
name,
char const *
value,
2633 __kmp_parse_affinity_env(
name,
value, &__kmp_affinity);
2636static void __kmp_stg_parse_hh_affinity(
char const *
name,
char const *
value,
2638 __kmp_parse_affinity_env(
name,
value, &__kmp_hh_affinity);
2640 if (__kmp_hh_affinity.flags.reset) {
2643 if (__kmp_hh_affinity.flags.respect != affinity_respect_mask_default) {
2649 const kmp_affinity_t &affinity) {
2650 bool is_hh_affinity = (&affinity == &__kmp_hh_affinity);
2656 if (affinity.flags.verbose) {
2661 if (affinity.flags.warnings) {
2666 if (KMP_AFFINITY_CAPABLE()) {
2669 if (!is_hh_affinity) {
2670 if (affinity.flags.respect) {
2675 if (affinity.flags.reset) {
2682 if (affinity.flags.core_types_gran)
2684 else if (affinity.flags.core_effs_gran) {
2691 if (!KMP_AFFINITY_CAPABLE()) {
2694 int compact = affinity.compact;
2695 int offset = affinity.offset;
2696 switch (affinity.type) {
2700 case affinity_physical:
2703 case affinity_logical:
2706 case affinity_compact:
2709 case affinity_scatter:
2712 case affinity_explicit:
2716 case affinity_balanced:
2719 case affinity_disabled:
2722 case affinity_default:
2735 __kmp_print_affinity_env(buffer,
name, __kmp_affinity);
2739 __kmp_print_affinity_env(buffer,
name, __kmp_hh_affinity);
2742#ifdef KMP_GOMP_COMPAT
2744static void __kmp_stg_parse_gomp_cpu_affinity(
char const *
name,
2746 const char *next = NULL;
2747 char *temp_proclist;
2764 if (__kmp_parse_affinity_proc_id_list(
name,
value, &next, &temp_proclist)) {
2766 if (*next ==
'\0') {
2768 __kmp_affinity.proclist = temp_proclist;
2769 __kmp_affinity.type = affinity_explicit;
2774 if (temp_proclist != NULL) {
2780 __kmp_affinity.type = affinity_none;
2808static int __kmp_parse_subplace_list(
const char *var,
const char **scan) {
2812 int start,
count, stride;
2818 if ((**scan <
'0') || (**scan >
'9')) {
2829 if (**scan ==
'}') {
2832 if (**scan ==
',') {
2836 if (**scan !=
':') {
2843 if ((**scan <
'0') || (**scan >
'9')) {
2854 if (**scan ==
'}') {
2857 if (**scan ==
',') {
2861 if (**scan !=
':') {
2870 if (**scan ==
'+') {
2874 if (**scan ==
'-') {
2882 if ((**scan <
'0') || (**scan >
'9')) {
2894 if (**scan ==
'}') {
2897 if (**scan ==
',') {
2907static int __kmp_parse_place(
const char *var,
const char **scan) {
2912 if (**scan ==
'{') {
2914 if (!__kmp_parse_subplace_list(var, scan)) {
2917 if (**scan !=
'}') {
2921 }
else if (**scan ==
'!') {
2923 return __kmp_parse_place(var, scan);
2924 }
else if ((**scan >=
'0') && (**scan <=
'9')) {
2937static int __kmp_parse_place_list(
const char *var,
const char *env,
2938 char **place_list) {
2939 const char *scan = env;
2940 const char *next = scan;
2945 if (!__kmp_parse_place(var, &scan)) {
2951 if (*scan ==
'\0') {
2965 if ((*scan <
'0') || (*scan >
'9')) {
2976 if (*scan ==
'\0') {
3004 if ((*scan <
'0') || (*scan >
'9')) {
3016 if (*scan ==
'\0') {
3028 ptrdiff_t len = scan - env;
3030 KMP_MEMCPY_S(retlist, (len + 1) *
sizeof(
char), env, len *
sizeof(
char));
3031 retlist[len] =
'\0';
3032 *place_list = retlist;
3037static inline void __kmp_places_set(
enum affinity_type
type,
kmp_hw_t kind) {
3038 __kmp_affinity.type =
type;
3039 __kmp_affinity.gran = kind;
3040 __kmp_affinity.flags.dups =
FALSE;
3041 __kmp_affinity.flags.omp_places =
TRUE;
3044static void __kmp_places_syntax_error_fallback(
char const *
name,
3048 __kmp_places_set(affinity_compact, kind);
3053static void __kmp_stg_parse_places(
char const *
name,
char const *
value,
3055 struct kmp_place_t {
3061 const char *scan =
value;
3062 const char *next = scan;
3077 for (
size_t i = 0;
i <
sizeof(std_places) /
sizeof(std_places[0]); ++
i) {
3078 const kmp_place_t &place = std_places[
i];
3081 __kmp_places_set(affinity_compact, place.type);
3088 __kmp_places_syntax_error_fallback(
name, place.type);
3093#if KMP_ARCH_X86 || KMP_ARCH_X86_64
3095 __kmp_affinity.core_attr_gran.core_type = KMP_HW_CORE_TYPE_CORE;
3096 __kmp_affinity.core_attr_gran.valid = 1;
3099 __kmp_affinity.core_attr_gran.core_type = KMP_HW_CORE_TYPE_ATOM;
3100 __kmp_affinity.core_attr_gran.valid = 1;
3106 if (!isdigit(*next)) {
3107 __kmp_places_syntax_error_fallback(
name, place.type);
3114 __kmp_places_syntax_error_fallback(
name, place.type);
3119 __kmp_affinity.core_attr_gran.core_eff = eff;
3120 __kmp_affinity.core_attr_gran.valid = 1;
3123 if (!__kmp_affinity.core_attr_gran.valid) {
3124 __kmp_places_syntax_error_fallback(
name, place.type);
3140 __kmp_places_set(affinity_compact,
type);
3150 if (*scan !=
'\0') {
3154 __kmp_affinity.flags.core_types_gran = 1;
3159 if (*scan !=
'\0') {
3163 __kmp_affinity.flags.core_effs_gran = 1;
3169 if (__kmp_affinity.proclist != NULL) {
3171 __kmp_affinity.proclist = NULL;
3173 if (__kmp_parse_place_list(
name,
value, &__kmp_affinity.proclist)) {
3185 kmp_hw_t gran = __kmp_affinity.gran;
3187 gran = __kmp_affinity.gran;
3197 if (*scan ==
'\0') {
3203 __kmp_places_syntax_error_fallback(
name, gran);
3217 __kmp_places_syntax_error_fallback(
name, gran);
3223 if (*scan !=
'\0') {
3231 enum affinity_type
type = __kmp_affinity.type;
3232 const char *proclist = __kmp_affinity.proclist;
3233 kmp_hw_t gran = __kmp_affinity.gran;
3244 }
else if (
type == affinity_explicit) {
3245 if (proclist != NULL) {
3250 }
else if (
type == affinity_compact) {
3252 if (__kmp_affinity.num_masks > 0) {
3253 num = __kmp_affinity.num_masks;
3261 if (__kmp_affinity.flags.core_types_gran) {
3265 if (__kmp_affinity.flags.core_effs_gran) {
3275 if (__kmp_affinity.core_attr_gran.valid) {
3278 int eff = __kmp_affinity.core_attr_gran.core_eff;
3299static void __kmp_stg_parse_topology_method(
char const *
name,
char const *
value,
3302 __kmp_affinity_top_method = affinity_top_method_all;
3306 __kmp_affinity_top_method = affinity_top_method_hwloc;
3309#if KMP_ARCH_X86 || KMP_ARCH_X86_64
3319 __kmp_affinity_top_method = affinity_top_method_x2apicid_1f;
3342 __kmp_affinity_top_method = affinity_top_method_x2apicid;
3365 __kmp_affinity_top_method = affinity_top_method_apicid;
3370 __kmp_affinity_top_method = affinity_top_method_cpuinfo;
3372#if KMP_GROUP_AFFINITY
3375 __kmp_affinity_top_method = affinity_top_method_group;
3379 __kmp_affinity_top_method = affinity_top_method_flat;
3385static void __kmp_stg_print_topology_method(
kmp_str_buf_t *buffer,
3387 char const *
value = NULL;
3389 switch (__kmp_affinity_top_method) {
3390 case affinity_top_method_default:
3394 case affinity_top_method_all:
3398#if KMP_ARCH_X86 || KMP_ARCH_X86_64
3399 case affinity_top_method_x2apicid_1f:
3400 value =
"x2APIC id leaf 0x1f";
3403 case affinity_top_method_x2apicid:
3404 value =
"x2APIC id leaf 0xb";
3407 case affinity_top_method_apicid:
3413 case affinity_top_method_hwloc:
3418 case affinity_top_method_cpuinfo:
3422#if KMP_GROUP_AFFINITY
3423 case affinity_top_method_group:
3428 case affinity_top_method_flat:
3433 if (
value != NULL) {
3439struct kmp_proc_bind_info_t {
3443static kmp_proc_bind_info_t proc_bind_table[] = {
3450static void __kmp_stg_parse_teams_proc_bind(
char const *
name,
char const *
value,
3455 for (
size_t i = 0;
i <
sizeof(proc_bind_table) /
sizeof(proc_bind_table[0]);
3467static void __kmp_stg_print_teams_proc_bind(
kmp_str_buf_t *buffer,
3470 for (
size_t i = 0;
i <
sizeof(proc_bind_table) /
sizeof(proc_bind_table[0]);
3473 value = proc_bind_table[
i].name;
3506#if KMP_AFFINITY_SUPPORTED
3507 __kmp_affinity.type = affinity_disabled;
3514#if KMP_AFFINITY_SUPPORTED
3515 __kmp_affinity.type = affinity_none;
3528 for (scan =
buf; *scan !=
'\0'; scan++) {
3607 for (
i = 0;
i < nelem;
i++) {
3637 if (
i < nelem - 1) {
3691 const char *next, *scan, *start;
3695 bool is_memspace =
false;
3696 int ntraits = 0,
count = 0;
3700 const char *delim = strchr(
buf,
':');
3701 const char *predef_mem_space = strstr(
buf,
"mem_space");
3703 bool is_memalloc = (!predef_mem_space && !delim) ?
true :
false;
3708 for (scan =
buf; *scan !=
'\0'; scan++) {
3717#define IS_POWER_OF_TWO(n) (((n) & ((n)-1)) == 0)
3719#define GET_NEXT(sentinel) \
3722 if (*next == sentinel) \
3728#define SKIP_PAIR(key) \
3730 char const str_delimiter[] = {',', 0}; \
3731 char *value = __kmp_str_token(CCAST(char *, scan), str_delimiter, \
3732 CCAST(char **, &next)); \
3733 KMP_WARNING(StgInvalidValue, key, value); \
3741 char const str_delimiter[] = {'=', 0}; \
3742 key = __kmp_str_token(CCAST(char *, start), str_delimiter, \
3743 CCAST(char **, &next)); \
3748 while (*next !=
'\0') {
3761 KMP_WARNING(OmpNoAllocator,
"omp_high_bw_mem_alloc");
3774 KMP_WARNING(OmpNoAllocator,
"omp_large_cap_mem_alloc");
3790 KMP_WARNING(OmpNoAllocator,
"omp_const_mem_alloc");
3798 KMP_WARNING(OmpNoAllocator,
"omp_low_lat_mem_alloc");
3806 KMP_WARNING(OmpNoAllocator,
"omp_cgroup_mem_alloc");
3814 KMP_WARNING(OmpNoAllocator,
"omp_pteam_mem_alloc");
3822 KMP_WARNING(OmpNoAllocator,
"omp_thread_mem_alloc");
3836 if (next ==
buf || *next !=
'\0') {
3843 if (
count == ntraits)
3866 if (next ==
buf || *next !=
'\0') {
3895 if (!isdigit(*next)) {
3927 if (!isdigit(*next)) {
3992 if (
count == ntraits)
4043#ifdef USE_LOAD_BALANCE
4071#ifdef USE_LOAD_BALANCE
4072 else if (
__kmp_global.g.g_dynamic_mode == dynamic_load_balance) {
4086#ifdef USE_LOAD_BALANCE
4091static void __kmp_stg_parse_ld_balance_interval(
char const *
name,
4093 double interval = __kmp_convert_to_double(
value);
4094 if (interval >= 0) {
4095 __kmp_load_balance_interval = interval;
4101static void __kmp_stg_print_ld_balance_interval(
kmp_str_buf_t *buffer,
4105 __kmp_load_balance_interval);
4133 if (
value != NULL) {
4138 const char *semicolon;
4144 semicolon = strchr(
value,
';');
4146 const char *comma = strchr(
value,
',');
4177 }
while ((
value = semicolon ? semicolon + 1 : NULL));
4206#if KMP_USE_HIER_SCHED
4219 bool parse_hier =
false) {
4221 const char *ptr =
value;
4228 while (*delim !=
',' && *delim !=
':' && *delim !=
'\0')
4230#if KMP_USE_HIER_SCHED
4233 if (*delim ==
',') {
4251 while (*delim !=
',' && *delim !=
':' && *delim !=
'\0')
4258 if (*delim ==
':') {
4262 while (*delim !=
',' && *delim !=
':' && *delim !=
'\0')
4267 while (*delim !=
',' && *delim !=
':' && *delim !=
'\0')
4269 }
else if (!parse_hier) {
4288#if KMP_STATIC_STEAL_ENABLED
4303 if (*delim ==
',') {
4306 if (!isdigit(*ptr)) {
4347#if KMP_USE_HIER_SCHED
4362 const char *ptr =
value;
4370#if KMP_USE_HIER_SCHED
4375 while (*ptr ==
' ' || *ptr ==
'\t' || *ptr ==
':')
4386#if KMP_USE_HIER_SCHED
4433 KMP_ASSERT2(
false,
"Unhandled sched_type enumeration");
4462 KMP_ASSERT2(
false,
"Unhandled sched_type enumeration");
4469#if KMP_USE_HIER_SCHED
4472static void __kmp_stg_parse_kmp_hand_thread(
char const *
name,
char const *
value,
4477static void __kmp_stg_print_kmp_hand_thread(
kmp_str_buf_t *buffer,
4504#ifdef KMP_GOMP_COMPAT
4547 const char *
value = NULL;
4555 if (
value != NULL) {
4567static void __kmp_stg_parse_itt_prepare_delay(
char const *
name,
4573 __kmp_itt_prepare_delay =
delay;
4576static void __kmp_stg_print_itt_prepare_delay(
kmp_str_buf_t *buffer,
4606static void __kmp_stg_parse_par_range_env(
char const *
name,
char const *
value,
4608 __kmp_stg_parse_par_range(
name,
value, &__kmp_par_range,
4609 __kmp_par_range_routine, __kmp_par_range_filename,
4610 &__kmp_par_range_lb, &__kmp_par_range_ub);
4613static void __kmp_stg_print_par_range_env(
kmp_str_buf_t *buffer,
4615 if (__kmp_par_range != 0) {
4635#ifdef KMP_TDATA_GTID
4674#if KMP_USE_DYNAMIC_LOCK
4675#define KMP_STORE_LOCK_SEQ(a) (__kmp_user_lock_seq = lockseq_##a)
4677#define KMP_STORE_LOCK_SEQ(a)
4703 if (__kmp_futex_determine_capable()) {
4726#if KMP_USE_ADAPTIVE_LOCKS
4728 if (__kmp_cpuinfo.flags.rtm) {
4738#if KMP_USE_DYNAMIC_LOCK && KMP_USE_TSX
4740 if (__kmp_cpuinfo.flags.rtm) {
4749 if (__kmp_cpuinfo.flags.rtm) {
4769 const char *
value = NULL;
4786#if KMP_USE_DYNAMIC_LOCK && KMP_USE_TSX
4787 case lk_rtm_queuing:
4788 value =
"rtm_queuing";
4811#if KMP_USE_ADAPTIVE_LOCKS
4818 if (
value != NULL) {
4830 const char *next =
value;
4833 int prev_comma =
FALSE;
4841 for (
i = 0;
i < 3;
i++) {
4844 if (*next ==
'\0') {
4849 if (((*next <
'0' || *next >
'9') && *next !=
',') || total > 2) {
4856 if (total == 0 || prev_comma) {
4864 if (*next >=
'0' && *next <=
'9') {
4866 const char *
buf = next;
4867 char const *msg = NULL;
4872 const char *tmp = next;
4874 if ((*next ==
' ' || *next ==
'\t') && (*tmp >=
'0' && *tmp <=
'9')) {
4891 }
else if (total == 2) {
4915#if KMP_USE_ADAPTIVE_LOCKS
4922static void __kmp_stg_parse_adaptive_lock_props(
const char *
name,
4924 int max_retries = 0;
4925 int max_badness = 0;
4927 const char *next =
value;
4930 int prev_comma =
FALSE;
4936 for (
i = 0;
i < 3;
i++) {
4939 if (*next ==
'\0') {
4944 if (((*next <
'0' || *next >
'9') && *next !=
',') || total > 2) {
4951 if (total == 0 || prev_comma) {
4959 if (*next >=
'0' && *next <=
'9') {
4961 const char *
buf = next;
4962 char const *msg = NULL;
4967 const char *tmp = next;
4969 if ((*next ==
' ' || *next ==
'\t') && (*tmp >=
'0' && *tmp <=
'9')) {
4986 }
else if (total == 2) {
4995 __kmp_adaptive_backoff_params.max_soft_retries = max_retries;
4996 __kmp_adaptive_backoff_params.max_badness = max_badness;
4999static void __kmp_stg_print_adaptive_lock_props(
kmp_str_buf_t *buffer,
5007 __kmp_adaptive_backoff_params.max_soft_retries,
5008 __kmp_adaptive_backoff_params.max_badness);
5011#if KMP_DEBUG_ADAPTIVE_LOCKS
5013static void __kmp_stg_parse_speculative_statsfile(
char const *
name,
5017 CCAST(
char **, &__kmp_speculative_statsfile));
5020static void __kmp_stg_print_speculative_statsfile(
kmp_str_buf_t *buffer,
5043 size_t num_possible) {
5044 for (
size_t i = 0;
i < num_possible; ++
i) {
5060 size_t index, num_possible, token_length;
5067 while (isalnum(*
end) || *
end ==
'_') {
5081 while (num_possible > 1 && index < token_length) {
5082 size_t n = num_possible;
5083 char token_char = (
char)toupper(token[index]);
5084 for (
size_t i = 0;
i < n; ++
i) {
5089 char c = (
char)toupper(
s[index]);
5091 if (c != token_char) {
5099 for (
size_t i = 0;
i < n; ++
i) {
5102 possible[
i] = possible[start];
5103 possible[start] = temp;
5113 if (num_possible > 1)
5115 if (num_possible == 1)
5122#define MAX_T_LEVEL KMP_HW_LAST
5123#define MAX_STR_LEN 512
5129 if (strcmp(
name,
"KMP_PLACE_THREADS") == 0) {
5137 char const *digits =
"0123456789";
5141 bool absolute =
false;
5144 while (*pos && mlen) {
5146 if (len == 0 && *pos ==
':') {
5149 input[len] = (
char)(toupper(*pos));
5150 if (input[len] ==
'X')
5152 if (input[len] ==
'O' && strchr(digits, *(pos + 1)))
5160 if (len == 0 || mlen == 0) {
5166 components[
level++] = pos;
5167 while ((pos = strchr(pos,
','))) {
5171 components[
level++] = ++pos;
5183 pos = components[
i];
5184 core_components[core_level++] = pos;
5185 while ((pos = strchr(pos,
'&'))) {
5189 core_components[core_level++] = ++pos;
5192 for (
int j = 0;
j < core_level; ++
j) {
5199 if (isdigit(*core_components[
j])) {
5200 num = atoi(core_components[
j]);
5204 pos = core_components[
j] + strspn(core_components[
j], digits);
5205 }
else if (*core_components[
j] ==
'*') {
5207 pos = core_components[
j] + 1;
5210 pos = core_components[
j];
5213 offset_ptr = strchr(core_components[
j],
'@');
5214 attr_ptr = strchr(core_components[
j],
':');
5217 offset = atoi(offset_ptr + 1);
5223#if KMP_ARCH_X86 || KMP_ARCH_X86_64
5231 const char *number = attr_ptr + 1;
5233 while (isalpha(*number))
5235 if (!isdigit(*number)) {
5238 int efficiency = atoi(number);
5283 for (
int i = 0;
i < depth; ++
i) {
5287 for (
int j = 0;
j < item.num_attrs; ++
j) {
5290 if (item.attr[
j].is_core_type_valid())
5294 if (item.attr[
j].is_core_eff_valid())
5308static void __kmp_stg_parse_forkjoin_frames(
char const *
name,
char const *
value,
5313static void __kmp_stg_print_forkjoin_frames(
kmp_str_buf_t *buffer,
5321static void __kmp_stg_parse_forkjoin_frames_mode(
char const *
name,
5327static void __kmp_stg_print_forkjoin_frames_mode(
kmp_str_buf_t *buffer,
5346#if KMP_HAVE_MWAIT || KMP_HAVE_UMWAIT
5350static void __kmp_stg_parse_user_level_mwait(
char const *
name,
5355static void __kmp_stg_print_user_level_mwait(
kmp_str_buf_t *buffer,
5363static void __kmp_stg_parse_mwait_hints(
char const *
name,
char const *
value,
5380static void __kmp_stg_parse_tpause(
char const *
name,
char const *
value,
5383 if (__kmp_tpause_state != 0) {
5385 if (__kmp_tpause_state == 2)
5386 __kmp_tpause_hint = 0;
5434static void __kmp_stg_parse_omp_tool(
char const *
name,
char const *
value,
5445 __kmp_tool ?
"enabled" :
"disabled");
5449char *__kmp_tool_libraries = NULL;
5451static void __kmp_stg_parse_omp_tool_libraries(
char const *
name,
5456static void __kmp_stg_print_omp_tool_libraries(
kmp_str_buf_t *buffer,
5458 if (__kmp_tool_libraries)
5470char *__kmp_tool_verbose_init = NULL;
5472static void __kmp_stg_parse_omp_tool_verbose_init(
char const *
name,
5478static void __kmp_stg_print_omp_tool_verbose_init(
kmp_str_buf_t *buffer,
5481 if (__kmp_tool_verbose_init)
5511 {
"KMP_MONITOR_STACKSIZE", __kmp_stg_parse_monitor_stacksize,
5512 __kmp_stg_print_monitor_stacksize, NULL, 0, 0},
5566#if KMP_HANDLE_SIGNALS
5567 {
"KMP_HANDLE_SIGNALS", __kmp_stg_parse_handle_signals,
5568 __kmp_stg_print_handle_signals, NULL, 0, 0},
5571#if KMP_ARCH_X86 || KMP_ARCH_X86_64
5572 {
"KMP_INHERIT_FP_CONTROL", __kmp_stg_parse_inherit_fp_control,
5573 __kmp_stg_print_inherit_fp_control, NULL, 0, 0},
5576#ifdef KMP_GOMP_COMPAT
5581 {
"KMP_A_DEBUG", __kmp_stg_parse_a_debug, __kmp_stg_print_a_debug, NULL, 0,
5583 {
"KMP_B_DEBUG", __kmp_stg_parse_b_debug, __kmp_stg_print_b_debug, NULL, 0,
5585 {
"KMP_C_DEBUG", __kmp_stg_parse_c_debug, __kmp_stg_print_c_debug, NULL, 0,
5587 {
"KMP_D_DEBUG", __kmp_stg_parse_d_debug, __kmp_stg_print_d_debug, NULL, 0,
5589 {
"KMP_E_DEBUG", __kmp_stg_parse_e_debug, __kmp_stg_print_e_debug, NULL, 0,
5591 {
"KMP_F_DEBUG", __kmp_stg_parse_f_debug, __kmp_stg_print_f_debug, NULL, 0,
5593 {
"KMP_DEBUG", __kmp_stg_parse_debug, NULL, NULL, 0, 0},
5594 {
"KMP_DEBUG_BUF", __kmp_stg_parse_debug_buf, __kmp_stg_print_debug_buf,
5596 {
"KMP_DEBUG_BUF_ATOMIC", __kmp_stg_parse_debug_buf_atomic,
5597 __kmp_stg_print_debug_buf_atomic, NULL, 0, 0},
5598 {
"KMP_DEBUG_BUF_CHARS", __kmp_stg_parse_debug_buf_chars,
5599 __kmp_stg_print_debug_buf_chars, NULL, 0, 0},
5600 {
"KMP_DEBUG_BUF_LINES", __kmp_stg_parse_debug_buf_lines,
5601 __kmp_stg_print_debug_buf_lines, NULL, 0, 0},
5602 {
"KMP_DIAG", __kmp_stg_parse_diag, __kmp_stg_print_diag, NULL, 0, 0},
5604 {
"KMP_PAR_RANGE", __kmp_stg_parse_par_range_env,
5605 __kmp_stg_print_par_range_env, NULL, 0, 0},
5619#if KMP_FAST_REDUCTION_BARRIER
5638 {
"KMP_FOREIGN_THREADS_THREADPRIVATE",
5642#if KMP_AFFINITY_SUPPORTED
5643 {
"KMP_AFFINITY", __kmp_stg_parse_affinity, __kmp_stg_print_affinity, NULL,
5645 {
"KMP_HIDDEN_HELPER_AFFINITY", __kmp_stg_parse_hh_affinity,
5646 __kmp_stg_print_hh_affinity, NULL, 0, 0},
5647#ifdef KMP_GOMP_COMPAT
5648 {
"GOMP_CPU_AFFINITY", __kmp_stg_parse_gomp_cpu_affinity, NULL,
5653 {
"KMP_TEAMS_PROC_BIND", __kmp_stg_parse_teams_proc_bind,
5654 __kmp_stg_print_teams_proc_bind, NULL, 0, 0},
5655 {
"OMP_PLACES", __kmp_stg_parse_places, __kmp_stg_print_places, NULL, 0, 0},
5656 {
"KMP_TOPOLOGY_METHOD", __kmp_stg_parse_topology_method,
5657 __kmp_stg_print_topology_method, NULL, 0, 0},
5677#if KMP_USE_HIER_SCHED
5678 {
"KMP_DISP_HAND_THREAD", __kmp_stg_parse_kmp_hand_thread,
5679 __kmp_stg_print_kmp_hand_thread, NULL, 0, 0},
5681 {
"KMP_FORCE_MONOTONIC_DYNAMIC_SCHEDULE",
5689#if USE_ITT_BUILD && USE_ITT_NOTIFY
5690 {
"KMP_ITT_PREPARE_DELAY", __kmp_stg_parse_itt_prepare_delay,
5691 __kmp_stg_print_itt_prepare_delay, NULL, 0, 0},
5702#ifdef USE_LOAD_BALANCE
5703 {
"KMP_LOAD_BALANCE_INTERVAL", __kmp_stg_parse_ld_balance_interval,
5704 __kmp_stg_print_ld_balance_interval, NULL, 0, 0},
5713#if KMP_USE_ADAPTIVE_LOCKS
5714 {
"KMP_ADAPTIVE_LOCK_PROPS", __kmp_stg_parse_adaptive_lock_props,
5715 __kmp_stg_print_adaptive_lock_props, NULL, 0, 0},
5716#if KMP_DEBUG_ADAPTIVE_LOCKS
5717 {
"KMP_SPECULATIVE_STATSFILE", __kmp_stg_parse_speculative_statsfile,
5718 __kmp_stg_print_speculative_statsfile, NULL, 0, 0},
5726 {
"KMP_FORKJOIN_FRAMES", __kmp_stg_parse_forkjoin_frames,
5727 __kmp_stg_print_forkjoin_frames, NULL, 0, 0},
5728 {
"KMP_FORKJOIN_FRAMES_MODE", __kmp_stg_parse_forkjoin_frames_mode,
5729 __kmp_stg_print_forkjoin_frames_mode, NULL, 0, 0},
5742 {
"LIBOMP_NUM_HIDDEN_HELPER_THREADS",
5746 {
"KMP_MAX_TDGS", __kmp_stg_parse_max_tdgs, __kmp_std_print_max_tdgs, NULL,
5748 {
"KMP_TDG_DOT", __kmp_stg_parse_tdg_dot, __kmp_stg_print_tdg_dot, NULL, 0,
5753 {
"OMP_TOOL", __kmp_stg_parse_omp_tool, __kmp_stg_print_omp_tool, NULL, 0,
5755 {
"OMP_TOOL_LIBRARIES", __kmp_stg_parse_omp_tool_libraries,
5756 __kmp_stg_print_omp_tool_libraries, NULL, 0, 0},
5757 {
"OMP_TOOL_VERBOSE_INIT", __kmp_stg_parse_omp_tool_verbose_init,
5758 __kmp_stg_print_omp_tool_verbose_init, NULL, 0, 0},
5761#if KMP_HAVE_MWAIT || KMP_HAVE_UMWAIT
5762 {
"KMP_USER_LEVEL_MWAIT", __kmp_stg_parse_user_level_mwait,
5763 __kmp_stg_print_user_level_mwait, NULL, 0, 0},
5764 {
"KMP_MWAIT_HINTS", __kmp_stg_parse_mwait_hints,
5765 __kmp_stg_print_mwait_hints, NULL, 0, 0},
5769 {
"KMP_TPAUSE", __kmp_stg_parse_tpause, __kmp_stg_print_tpause, NULL, 0, 0},
5771 {
"", NULL, NULL, NULL, 0, 0}};
5796 if (strcmp(
a->name,
"KMP_AFFINITY") == 0) {
5797 if (strcmp(
b->name,
"KMP_AFFINITY") == 0) {
5801 }
else if (strcmp(
b->name,
"KMP_AFFINITY") == 0) {
5804 return strcmp(
a->name,
b->name);
5820#ifdef KMP_GOMP_COMPAT
5833#ifdef KMP_GOMP_COMPAT
5841 rivals[
i++] = kmp_stacksize;
5842#ifdef KMP_GOMP_COMPAT
5843 if (gomp_stacksize != NULL) {
5844 rivals[
i++] = gomp_stacksize;
5847 rivals[
i++] = omp_stacksize;
5850 kmp_stacksize->
data = &kmp_data;
5851#ifdef KMP_GOMP_COMPAT
5852 if (gomp_stacksize != NULL) {
5853 gomp_stacksize->
data = &gomp_data;
5856 omp_stacksize->
data = &omp_data;
5871 rivals[
i++] = kmp_library;
5872 if (omp_wait_policy != NULL) {
5873 rivals[
i++] = omp_wait_policy;
5877 kmp_library->
data = &kmp_data;
5878 if (omp_wait_policy != NULL) {
5879 omp_wait_policy->
data = &omp_data;
5893 rivals[
i++] = kmp_device_thread_limit;
5894 rivals[
i++] = kmp_all_threads;
5911 rivals[
i++] = kmp_hw_subset;
5912 rivals[
i++] = kmp_place_threads;
5919#if KMP_AFFINITY_SUPPORTED
5925#ifdef KMP_GOMP_COMPAT
5939 rivals[
i++] = kmp_affinity;
5941#ifdef KMP_GOMP_COMPAT
5942 rivals[
i++] = gomp_cpu_affinity;
5946 rivals[
i++] = omp_proc_bind;
5956 places_rivals[
i++] = kmp_affinity;
5957#ifdef KMP_GOMP_COMPAT
5958 places_rivals[
i++] = gomp_cpu_affinity;
5960 places_rivals[
i++] = omp_places;
5962 places_rivals[
i++] = NULL;
5983 rivals[
i++] = kmp_force_red;
5984 if (kmp_determ_red != NULL) {
5985 rivals[
i++] = kmp_determ_red;
5989 kmp_force_red->
data = &force_data;
5990 if (kmp_determ_red != NULL) {
5991 kmp_determ_red->
data = &determ_data;
6014 if (
value != NULL) {
6016 if (setting != NULL) {
6030 if (rivals == NULL) {
6036 for (; strcmp(rivals[
i]->
name,
name) != 0;
i++) {
6039#if KMP_AFFINITY_SUPPORTED
6040 if (rivals[
i] == __kmp_affinity_notype) {
6047 if (rivals[
i]->set) {
6061 if (setting != NULL) {
6070#if defined(KMP_DEBUG) && KMP_AFFINITY_SUPPORTED
6071static void __kmp_print_affinity_settings(
const kmp_affinity_t *affinity) {
6072 K_DIAG(1, (
"%s:\n", affinity->env_var));
6073 K_DIAG(1, (
" type : %d\n", affinity->type));
6074 K_DIAG(1, (
" compact : %d\n", affinity->compact));
6075 K_DIAG(1, (
" offset : %d\n", affinity->offset));
6076 K_DIAG(1, (
" verbose : %u\n", affinity->flags.verbose));
6077 K_DIAG(1, (
" warnings : %u\n", affinity->flags.warnings));
6078 K_DIAG(1, (
" respect : %u\n", affinity->flags.respect));
6079 K_DIAG(1, (
" reset : %u\n", affinity->flags.reset));
6080 K_DIAG(1, (
" dups : %u\n", affinity->flags.dups));
6081 K_DIAG(1, (
" gran : %d\n", (
int)affinity->gran));
6129 if (
string == NULL) {
6137 for (
i = 0;
i < block.
count; ++
i) {
6145 if (setting != NULL) {
6155 if (
string == NULL) {
6156 char const *
name =
"KMP_WARNINGS";
6161#if KMP_AFFINITY_SUPPORTED
6167 __kmp_affinity_notype = NULL;
6169 if (aff_str != NULL) {
6180#if KMP_OS_WINDOWS || KMP_OS_AIX
6183#define FIND strcasestr
6186 if ((FIND(aff_str,
"none") == NULL) &&
6187 (FIND(aff_str,
"physical") == NULL) &&
6188 (FIND(aff_str,
"logical") == NULL) &&
6189 (FIND(aff_str,
"compact") == NULL) &&
6190 (FIND(aff_str,
"scatter") == NULL) &&
6191 (FIND(aff_str,
"explicit") == NULL) &&
6192 (FIND(aff_str,
"balanced") == NULL) &&
6193 (FIND(aff_str,
"disabled") == NULL)) {
6199 __kmp_affinity.type = affinity_default;
6201 __kmp_affinity_top_method = affinity_top_method_default;
6202 __kmp_affinity.flags.respect = affinity_respect_mask_default;
6208 if (aff_str != NULL) {
6209 __kmp_affinity.type = affinity_default;
6211 __kmp_affinity_top_method = affinity_top_method_default;
6212 __kmp_affinity.flags.respect = affinity_respect_mask_default;
6227#if KMP_AFFINITY_SUPPORTED
6249 for (
i = 0;
i < block.
count; ++
i) {
6258#if KMP_USE_DYNAMIC_LOCK
6259 __kmp_init_dynamic_user_locks();
6270#if KMP_USE_DYNAMIC_LOCK
6271 __kmp_init_dynamic_user_locks();
6277#if KMP_AFFINITY_SUPPORTED
6285 __kmp_affinity_top_method == affinity_top_method_default)
6290 __kmp_affinity_top_method = affinity_top_method_hwloc;
6294 __kmp_affinity_top_method = affinity_top_method_hwloc;
6298 const char *var =
"KMP_AFFINITY";
6299 KMPAffinity::pick_api();
6304 if (__kmp_affinity_top_method == affinity_top_method_hwloc &&
6305 __kmp_affinity_dispatch->get_api_type() != KMPAffinity::HWLOC) {
6307 __kmp_affinity_top_method = affinity_top_method_all;
6310 if (__kmp_affinity.type == affinity_disabled) {
6311 KMP_AFFINITY_DISABLE();
6312 }
else if (!KMP_AFFINITY_CAPABLE()) {
6313 __kmp_affinity_dispatch->determine_capable(var);
6314 if (!KMP_AFFINITY_CAPABLE()) {
6315 if (__kmp_affinity.flags.verbose ||
6316 (__kmp_affinity.flags.warnings &&
6317 (__kmp_affinity.type != affinity_default) &&
6318 (__kmp_affinity.type != affinity_none) &&
6319 (__kmp_affinity.type != affinity_disabled))) {
6322 __kmp_affinity.type = affinity_disabled;
6323 __kmp_affinity.flags.respect =
FALSE;
6328 if (__kmp_affinity.type == affinity_disabled) {
6335 if (KMP_AFFINITY_CAPABLE()) {
6337#if KMP_GROUP_AFFINITY
6342 bool exactly_one_group =
false;
6343 if (__kmp_num_proc_groups > 1) {
6345 bool within_one_group;
6348 kmp_affin_mask_t *init_mask;
6349 KMP_CPU_ALLOC(init_mask);
6350 __kmp_get_system_affinity(init_mask,
TRUE);
6351 group = __kmp_get_proc_group(init_mask);
6352 within_one_group = (group >= 0);
6355 if (within_one_group) {
6356 DWORD num_bits_in_group = __kmp_GetActiveProcessorCount(group);
6357 DWORD num_bits_in_mask = 0;
6358 for (
int bit = init_mask->begin(); bit != init_mask->end();
6359 bit = init_mask->next(bit))
6361 exactly_one_group = (num_bits_in_group == num_bits_in_mask);
6363 KMP_CPU_FREE(init_mask);
6369 if (__kmp_num_proc_groups > 1 &&
6370 __kmp_affinity.type == affinity_default &&
6376 if (__kmp_affinity.flags.respect == affinity_respect_mask_default &&
6377 exactly_one_group) {
6378 __kmp_affinity.flags.respect =
FALSE;
6382 if (__kmp_affinity.type == affinity_default) {
6383 __kmp_affinity.type = affinity_compact;
6386 if (__kmp_hh_affinity.type == affinity_default)
6387 __kmp_hh_affinity.type = affinity_compact;
6388 if (__kmp_affinity_top_method == affinity_top_method_default)
6389 __kmp_affinity_top_method = affinity_top_method_all;
6399 if (__kmp_affinity.flags.respect == affinity_respect_mask_default) {
6400#if KMP_GROUP_AFFINITY
6401 if (__kmp_num_proc_groups > 1 && exactly_one_group) {
6402 __kmp_affinity.flags.respect =
FALSE;
6406 __kmp_affinity.flags.respect =
TRUE;
6412 __kmp_affinity.type = affinity_none;
6413 if (__kmp_affinity.type == affinity_default) {
6414 __kmp_affinity.type = affinity_compact;
6415 __kmp_affinity.flags.dups =
FALSE;
6417 }
else if (__kmp_affinity.type == affinity_default) {
6418#if KMP_MIC_SUPPORTED
6419 if (__kmp_mic_type != non_mic) {
6426#if KMP_MIC_SUPPORTED
6427 if (__kmp_mic_type != non_mic) {
6428 __kmp_affinity.type = affinity_scatter;
6432 __kmp_affinity.type = affinity_none;
6435 if (__kmp_hh_affinity.type == affinity_default)
6436 __kmp_hh_affinity.type = affinity_none;
6438 (__kmp_affinity.gran_levels < 0)) {
6439#if KMP_MIC_SUPPORTED
6440 if (__kmp_mic_type != non_mic) {
6449 (__kmp_hh_affinity.gran_levels < 0)) {
6450#if KMP_MIC_SUPPORTED
6451 if (__kmp_mic_type != non_mic) {
6459 if (__kmp_affinity_top_method == affinity_top_method_default) {
6460 __kmp_affinity_top_method = affinity_top_method_all;
6466 if (__kmp_affinity_top_method == affinity_top_method_default)
6467 __kmp_affinity_top_method = affinity_top_method_all;
6468 if (__kmp_affinity.type == affinity_default)
6469 __kmp_affinity.type = affinity_disabled;
6470 if (__kmp_hh_affinity.type == affinity_default)
6471 __kmp_hh_affinity.type = affinity_disabled;
6475 for (
const kmp_affinity_t *affinity : __kmp_affinities)
6476 __kmp_print_affinity_settings(affinity);
6478 K_DIAG(1, (
"__kmp_nested_proc_bind.bind_types[0] == %d\n",
6487 if (
string != NULL) {
6511 for (
i = 0;
i < block.
count; ++
i) {
6515 strncmp(
name,
"OMP_", 4) == 0
6516#ifdef KMP_GOMP_COMPAT
6517 || strncmp(
name,
"GOMP_", 5) == 0
6565 display_env_verbose)) {
6584void __kmp_env_dump() {
6607 if (strstr(env.
str, notdefined.
str))
6616 ompd_env_block_size = (ompd_size_t)
KMP_STRLEN(ompd_env_block);
bool specified(kmp_hw_t type) const
void push_back(int num, kmp_hw_t type, int offset, kmp_hw_attr_t attr)
static kmp_hw_subset_t * allocate()
static void deallocate(kmp_hw_subset_t *subset)
const item_t & at(int index) const
sched_type
Describes the loop schedule to be used for a parallel for loop.
@ kmp_sch_static
static unspecialized
@ kmp_sch_modifier_monotonic
Set if the monotonic schedule modifier was present.
@ kmp_sch_default
default scheduling algorithm
@ kmp_sch_modifier_nonmonotonic
Set if the nonmonotonic schedule modifier was present.
@ kmp_sch_guided_chunked
guided unspecialized
@ kmp_sch_dynamic_chunked
@ kmp_sch_guided_analytical_chunked
@ kmp_sch_static_balanced
@ kmp_sch_guided_iterative_chunked
__itt_string_handle * name
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 s
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 initialized
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 begin
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 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 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 mode
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 type
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 * key
int __kmp_memkind_available
omp_memspace_handle_t const omp_default_mem_space
int __kmp_hot_teams_max_level
void * omp_memspace_handle_t
void * omp_allocator_handle_t
#define KMP_HW_MAX_NUM_CORE_EFFS
int __kmp_generate_warnings
volatile int __kmp_init_user_locks
int __kmp_debug_buf_lines
omp_allocator_handle_t __kmpc_init_allocator(int gtid, omp_memspace_handle_t, int ntraits, omp_alloctrait_t traits[])
kmp_proc_bind_t __kmp_teams_proc_bind
#define KMP_INTERNAL_MALLOC(sz)
#define KMP_DEFAULT_CHUNK
void ompc_set_dynamic(int flag)
#define KMP_MAX_STKPADDING
int __kmp_display_env_verbose
omp_allocator_handle_t const omp_cgroup_mem_alloc
kmp_global_t __kmp_global
#define KMP_MAX_BLOCKTIME
kmp_int32 __kmp_use_yield
char const * __kmp_barrier_pattern_name[bp_last_bar]
int __kmp_dflt_team_nth_ub
#define KMP_MIN_STKOFFSET
#define KMP_INTERNAL_REALLOC(p, sz)
int __kmp_dflt_max_active_levels
omp_memspace_handle_t const omp_low_lat_mem_space
int __kmp_storage_map_verbose_specified
#define KMP_FOREACH_HW_TYPE(type)
kmp_bar_pat_e __kmp_barrier_gather_pattern[bs_last_barrier]
kmp_tasking_mode_t __kmp_tasking_mode
char * __kmp_affinity_format
omp_allocator_handle_t __kmp_def_allocator
int __kmp_omp_cancellation
kmp_nested_proc_bind_t __kmp_nested_proc_bind
kmp_nested_nthreads_t __kmp_nested_nth
omp_allocator_handle_t const omp_default_mem_alloc
kmp_target_offload_kind_t __kmp_target_offload
int __kmp_debug_buf_chars
#define KMP_MAX_TASK_PRIORITY_LIMIT
#define SCHEDULE_HAS_MONOTONIC(s)
#define KMP_MAX_BRANCH_BITS
int __kmp_adjust_gtid_mode
#define __kmp_entry_gtid()
static int __kmp_tid_from_gtid(int gtid)
kmp_int32 __kmp_use_yield_exp_set
omp_allocator_handle_t const omp_large_cap_mem_alloc
const char * __kmp_hw_get_catalog_string(kmp_hw_t type, bool plural=false)
omp_allocator_handle_t const omp_low_lat_mem_alloc
#define KMP_DEFAULT_STKSIZE
volatile int __kmp_init_middle
omp_allocator_handle_t const omp_high_bw_mem_alloc
int __kmp_storage_map_verbose
int __kmp_allThreadsSpecified
enum sched_type __kmp_static
const char * __kmp_hw_get_keyword(kmp_hw_t type, bool plural=false)
int __kmp_affinity_num_places
int __kmp_duplicate_library_ok
#define KMP_MAX_STKOFFSET
omp_memspace_handle_t const omp_const_mem_space
kmp_uint32 __kmp_barrier_release_branch_bits[bs_last_barrier]
kmp_int32 __kmp_default_device
omp_memspace_handle_t const omp_large_cap_mem_space
int __kmp_force_monotonic
enum sched_type __kmp_sched
int __kmp_enable_task_throttling
kmp_uint32 __kmp_barrier_gather_bb_dflt
kmp_uint32 __kmp_barrier_release_bb_dflt
int __kmp_task_stealing_constraint
int __kmp_need_register_atfork
int __kmp_dispatch_num_buffers
#define SCHEDULE_WITHOUT_MODIFIERS(s)
bool __kmp_dflt_max_active_levels_set
char * __kmp_debug_buffer
omp_memspace_handle_t const omp_high_bw_mem_space
omp_allocator_handle_t const omp_const_mem_alloc
volatile int __kmp_init_parallel
omp_allocator_handle_t const omp_pteam_mem_alloc
int __kmp_need_register_atfork_specified
kmp_int32 __kmp_enable_hidden_helper
#define KMP_DEFAULT_BLOCKTIME
#define __kmp_allocate(size)
#define KMP_DEBUG_BUF_LINES_MIN
static const size_t KMP_AFFINITY_FORMAT_SIZE
enum library_type __kmp_library
int __kmp_env_consistency_check
kmp_uint64 __kmp_taskloop_min_tasks
char const * __kmp_barrier_branch_bit_env_name[bs_last_barrier]
#define SCHEDULE_HAS_NONMONOTONIC(s)
size_t __kmp_sys_min_stksize
char __kmp_blocktime_units
void ompc_set_nested(int flag)
kmp_uint32 __kmp_barrier_gather_branch_bits[bs_last_barrier]
size_t __kmp_malloc_pool_incr
#define KMP_INTERNAL_FREE(p)
int __kmp_threads_capacity
bool __kmp_wpolicy_passive
#define KMP_MAX_DEFAULT_DEVICE_LIMIT
int __kmp_display_affinity
enum sched_type __kmp_guided
PACKED_REDUCTION_METHOD_T __kmp_force_reduction_method
#define KMP_MIN_MALLOC_POOL_INCR
omp_allocator_handle_t const omp_thread_mem_alloc
#define KMP_MAX_MALLOC_POOL_INCR
#define __kmp_page_allocate(size)
kmp_int32 __kmp_max_task_priority
int __kmp_teams_thread_limit
#define KMP_DEBUG_BUF_CHARS_MIN
void ompc_set_num_threads(int arg)
char const * __kmp_barrier_pattern_env_name[bs_last_barrier]
std::atomic< int > __kmp_debug_count
static kmp_info_t * __kmp_thread_from_gtid(int gtid)
#define KMP_MIN_DISP_NUM_BUFF
void __kmp_expand_file_name(char *result, size_t rlen, char *pattern)
#define KMP_MIN_BLOCKTIME
#define SCHEDULE_SET_MODIFIERS(s, m)
@ KMP_HW_MAX_NUM_CORE_TYPES
@ KMP_HW_CORE_TYPE_UNKNOWN
#define KMP_MIN_STKPADDING
volatile int __kmp_init_serial
@ reduction_method_not_defined
#define KMP_MAX_DISP_NUM_BUFF
kmp_int32 __kmp_hidden_helper_threads_num
#define KMP_MAX_ACTIVE_LEVELS_LIMIT
static void __kmp_type_convert(T1 src, T2 *dest)
enum kmp_bar_pat kmp_bar_pat_e
int __kmp_debug_buf_atomic
kmp_bar_pat_e __kmp_barrier_release_pattern[bs_last_barrier]
bool __kmp_hwloc_available
union KMP_ALIGN_CACHE kmp_info kmp_info_t
omp_allocator_handle_t const omp_null_allocator
void __kmp_aux_set_blocktime(int arg, kmp_info_t *thread, int tid)
kmp_hw_subset_t * __kmp_hw_subset
KMP_ARCH_X86 KMP_ARCH_X86 KMP_ARCH_X86 KMP_ARCH_X86 KMP_ARCH_X86 KMP_ARCH_X86 KMP_ARCH_X86 KMP_ARCH_X86 KMP_ARCH_X86<<, 2i, 1, KMP_ARCH_X86) ATOMIC_CMPXCHG(fixed2, shr, kmp_int16, 16, > KMP_ARCH_X86 KMP_ARCH_X86 kmp_uint32
#define KMP_DEBUG_ASSERT(cond)
#define KMP_ASSERT2(cond, msg)
unsigned long long kmp_uint64
kmp_hier_sched_env_t __kmp_hier_scheds
int __kmp_dispatch_hand_threading
char const * __kmp_env_blk_var(kmp_env_blk_t *block, char const *name)
void __kmp_env_blk_sort(kmp_env_blk_t *block)
void __kmp_env_blk_init(kmp_env_blk_t *block, char const *bulk)
void __kmp_env_blk_free(kmp_env_blk_t *block)
static void __kmp_msg(kmp_msg_severity_t severity, kmp_msg_t message, va_list ap)
kmp_msg_t __kmp_msg_format(unsigned id_arg,...)
void __kmp_printf(char const *format,...)
kmp_backoff_t __kmp_spin_backoff_params
enum kmp_lock_kind __kmp_user_lock_kind
void __kmp_set_user_lock_vptrs(kmp_lock_kind_t user_lock_kind)
int __kmp_num_locks_in_block
#define KMP_BUILTIN_UNREACHABLE
#define KMP_STRNCPY_S(dst, bsz, src, cnt)
#define KMP_STRCPY_S(dst, bsz, src)
#define KMP_MEMCPY_S(dst, bsz, src, cnt)
static void __kmp_strncpy_truncate(char *buffer, size_t buf_size, char const *src, size_t src_size)
static void __kmp_stg_parse_nteams(char const *name, char const *value, void *data)
static void __kmp_stg_print_cpuinfo_file(kmp_str_buf_t *buffer, char const *name, void *data)
static kmp_setting_t __kmp_stg_table[]
static void __kmp_stg_parse_max_active_levels(char const *name, char const *value, void *data)
static const char * __kmp_parse_single_omp_schedule(const char *name, const char *value, bool parse_hier=false)
static void __kmp_stg_parse_nested(char const *name, char const *value, void *data)
static void __kmp_stg_print_barrier_pattern(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_parse_gtid_mode(char const *name, char const *value, void *data)
static void __kmp_stg_print_force_reduction(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_print_warnings(kmp_str_buf_t *buffer, char const *name, void *data)
#define KMP_STORE_LOCK_SEQ(a)
static char const * blocktime_str
static void __kmp_stg_print_max_task_priority(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_print_use_yield(kmp_str_buf_t *buffer, char const *name, void *data)
#define IS_POWER_OF_TWO(n)
static void __kmp_stg_print_taskloop_min_tasks(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_print_wait_policy(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_parse_align_alloc(char const *name, char const *value, void *data)
static void __kmp_stg_parse_init_at_fork(char const *name, char const *value, void *data)
static void __kmp_stg_print_affinity_format(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_parse_lock_block(char const *name, char const *value, void *data)
static void __kmp_stg_parse_stackpad(char const *name, char const *value, void *data)
static void __kmp_stg_parse_target_offload(char const *name, char const *value, void *data)
static void __kmp_stg_parse_kmp_dynamic_mode(char const *name, char const *value, void *data)
static void __kmp_stg_parse_affinity_format(char const *name, char const *value, void *data)
static void __kmp_stg_parse_omp_schedule(char const *name, char const *value, void *data)
static void __kmp_stg_parse_num_threads(char const *name, char const *value, void *data)
static void __kmp_stg_print_settings(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_parse_teams_th_limit(char const *name, char const *value, void *data)
static void __kmp_stg_parse_use_yield(char const *name, char const *value, void *data)
static void __kmp_stg_parse_schedule(char const *name, char const *value, void *data)
static void __kmp_stg_print_proc_bind(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_parse_omp_display_env(char const *name, char const *value, void *data)
static void __kmp_stg_parse_duplicate_lib_ok(char const *name, char const *value, void *data)
static kmp_hw_t __kmp_hw_subset_break_tie(const kmp_hw_t *possible, size_t num_possible)
static void __kmp_stg_print_storage_map(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_parse_kmp_force_monotonic(char const *name, char const *value, void *data)
static void __kmp_stg_print_align_alloc(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_print_display_affinity(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_parse_consistency_check(char const *name, char const *value, void *data)
static void __kmp_stg_print_num_hidden_helper_threads(kmp_str_buf_t *buffer, char const *name, void *data)
int __kmp_default_tp_capacity(int req_nproc, int max_nth, int all_threads_specified)
static void __kmp_stg_print_all_threadprivate(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_print_omp_display_env(kmp_str_buf_t *buffer, char const *name, void *data)
void(* kmp_stg_parse_func_t)(char const *name, char const *value, void *data)
static void __kmp_stg_print_version(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_print_task_throttling(kmp_str_buf_t *buffer, char const *name, void *data)
static int const __kmp_stg_count
static void __kmp_stg_parse_allocator(char const *name, char const *value, void *data)
int __kmp_initial_threads_capacity(int req_nproc)
static void __kmp_stg_print_uint64(kmp_str_buf_t *buffer, char const *name, kmp_uint64 value)
static void __kmp_stg_print_use_hidden_helper(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_parse_stacksize(char const *name, char const *value, void *data)
static void __kmp_stg_parse_abort_delay(char const *name, char const *value, void *data)
static void __kmp_stg_parse_device_thread_limit(char const *name, char const *value, void *data)
static void __kmp_stg_parse_storage_map(char const *name, char const *value, void *data)
static int __kmp_strcasecmp_with_sentinel(char const *a, char const *b, char sentinel)
static void __kmp_stg_parse_all_threadprivate(char const *name, char const *value, void *data)
static void __kmp_stg_parse_omp_cancellation(char const *name, char const *value, void *data)
static void __kmp_stg_parse_lock_kind(char const *name, char const *value, void *data)
static void __kmp_stg_print_omp_cancellation(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_print_abort_delay(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_parse_hw_subset(char const *name, char const *value, void *data)
void __kmp_check_stksize(size_t *val)
static void __kmp_stg_parse_proc_bind(char const *name, char const *value, void *data)
static void __kmp_stg_print_stacksize(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_parse_size(char const *name, char const *value, size_t size_min, size_t size_max, int *is_specified, size_t *out, size_t factor)
static void __kmp_stg_parse_omp_dynamic(char const *name, char const *value, void *data)
static void __kmp_stg_print_atomic_mode(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_parse_version(char const *name, char const *value, void *data)
static void __kmp_stg_print_bool(kmp_str_buf_t *buffer, char const *name, int value)
static void __kmp_stg_print_int(kmp_str_buf_t *buffer, char const *name, int value)
static void __kmp_stg_parse_disp_buffers(char const *name, char const *value, void *data)
static void __kmp_stg_print_allocator(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_parse_task_throttling(char const *name, char const *value, void *data)
static void __kmp_stg_print_thread_limit(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_print_hot_teams_level(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_print_teams_th_limit(kmp_str_buf_t *buffer, char const *name, void *data)
void __kmp_env_initialize(char const *string)
static void __kmp_stg_parse_task_stealing(char const *name, char const *value, void *data)
static void __kmp_stg_print_stackoffset(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_print_schedule(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_print_malloc_pool_incr(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_print_nested(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_parse_taskloop_min_tasks(char const *name, char const *value, void *data)
static void __kmp_stg_print_omp_dynamic(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_parse_hot_teams_level(char const *name, char const *value, void *data)
static void __kmp_stg_print_hw_subset(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_print_str(kmp_str_buf_t *buffer, char const *name, char const *value)
void __kmp_display_env_impl(int display_env, int display_env_verbose)
static void __kmp_stg_print_num_threads(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_parse_nesting_mode(char const *name, char const *value, void *data)
static int __kmp_match_str(char const *token, char const *buf, const char **end)
static void __kmp_stg_print_spin_backoff_params(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_print_lock_kind(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_parse_wait_policy(char const *name, char const *value, void *data)
static void __kmp_stg_print_hot_teams_mode(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_print_lock_block(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_print_default_device(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_aux_env_initialize(kmp_env_blk_t *block)
static void __kmp_stg_print_duplicate_lib_ok(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_print_foreign_threads_threadprivate(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_print_kmp_dynamic_mode(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_parse_spin_backoff_params(const char *name, const char *value, void *data)
static void __kmp_stg_print_barrier_branch_bit(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_parse_num_hidden_helper_threads(char const *name, char const *value, void *data)
static void __kmp_stg_print_disp_buffers(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_print_target_offload(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_parse_blocktime(char const *name, char const *value, void *data)
static void __kmp_stg_print_nesting_mode(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_print_consistency_check(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_init(void)
static void __kmp_stg_parse_teams_thread_limit(char const *name, char const *value, void *data)
static void __kmp_stg_print_task_stealing(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_parse_nested_num_threads(const char *var, const char *env, kmp_nested_nthreads_t *nth_array)
static void __kmp_stg_parse_atomic_mode(char const *name, char const *value, void *data)
static void __kmp_stg_parse_max_task_priority(char const *name, char const *value, void *data)
static void __kmp_stg_print_init_at_fork(kmp_str_buf_t *buffer, char const *name, void *data)
void(* kmp_stg_print_func_t)(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_print_tasking(kmp_str_buf_t *buffer, char const *name, void *data)
static kmp_setting_t * __kmp_stg_find(char const *name)
#define GET_NEXT(sentinel)
static int __kmp_stg_cmp(void const *_a, void const *_b)
static void __kmp_stg_print_kmp_force_monotonic(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_print_gtid_mode(kmp_str_buf_t *buffer, char const *name, void *data)
static int __kmp_match_with_sentinel(char const *a, char const *b, size_t len, char sentinel)
static void __kmp_stg_parse_foreign_threads_threadprivate(char const *name, char const *value, void *data)
static void __kmp_stg_parse_str(char const *name, char const *value, char **out)
static void __kmp_stg_parse_display_affinity(char const *name, char const *value, void *data)
static void __kmp_stg_parse_malloc_pool_incr(char const *name, char const *value, void *data)
static void __kmp_stg_parse_hot_teams_mode(char const *name, char const *value, void *data)
static void __kmp_stg_parse_bool(char const *name, char const *value, int *out)
static void __kmp_stg_parse_stackoffset(char const *name, char const *value, void *data)
static void __kmp_stg_parse_tasking(char const *name, char const *value, void *data)
static void __kmp_stg_print_omp_schedule(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_print_teams_thread_limit(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_print_stackpad(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_parse_barrier_pattern(char const *name, char const *value, void *data)
static void __kmp_stg_parse_settings(char const *name, char const *value, void *data)
static void __kmp_stg_parse_cpuinfo_file(char const *name, char const *value, void *data)
static int __kmp_stg_check_rivals(char const *name, char const *value, kmp_setting_t **rivals)
static void __kmp_stg_parse_thread_limit(char const *name, char const *value, void *data)
static void __kmp_stg_print_blocktime(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_print_nteams(kmp_str_buf_t *buffer, char const *name, void *data)
static kmp_hw_t __kmp_stg_parse_hw_subset_name(char const *token)
static void __kmp_stg_print_size(kmp_str_buf_t *buffer, char const *name, size_t value)
static void __kmp_stg_parse_int(char const *name, char const *value, int min, int max, int *out)
static void __kmp_stg_parse(char const *name, char const *value)
static int __kmp_env_toPrint(char const *name, int flag)
static void __kmp_omp_schedule_restore()
static void __kmp_stg_print_device_thread_limit(kmp_str_buf_t *buffer, char const *name, void *data)
static void __kmp_stg_parse_barrier_branch_bit(char const *name, char const *value, void *data)
static void __kmp_stg_parse_force_reduction(char const *name, char const *value, void *data)
static void __kmp_stg_parse_default_device(char const *name, char const *value, void *data)
static void __kmp_stg_print_max_active_levels(kmp_str_buf_t *buffer, char const *name, void *data)
static const char * __kmp_hw_get_core_type_keyword(kmp_hw_core_type_t type)
static void __kmp_stg_parse_use_hidden_helper(char const *name, char const *value, void *data)
static void __kmp_stg_parse_warnings(char const *name, char const *value, void *data)
#define KMP_STR_BUF_PRINT_BOOL_EX(n, v, t, f)
#define KMP_STR_BUF_PRINT_NAME
#define KMP_STR_BUF_PRINT_STR
#define KMP_STR_BUF_PRINT_UINT64
#define KMP_STR_BUF_PRINT_BOOL
#define KMP_STR_BUF_PRINT_NAME_EX(x)
#define KMP_STR_BUF_PRINT_INT
int __kmp_str_to_int(char const *str, char sentinel)
void __kmp_str_to_uint(char const *str, kmp_uint64 *out, char const **error)
void __kmp_str_to_size(char const *str, size_t *out, size_t dfactor, char const **error)
void __kmp_str_buf_clear(kmp_str_buf_t *buffer)
int __kmp_str_eqf(char const *lhs, char const *rhs)
int __kmp_str_match(char const *target, int len, char const *data)
void __kmp_str_buf_free(kmp_str_buf_t *buffer)
char * __kmp_str_format(char const *format,...)
int __kmp_str_match_true(char const *data)
void __kmp_str_buf_cat(kmp_str_buf_t *buffer, char const *str, size_t len)
int __kmp_basic_str_to_int(char const *str)
int __kmp_str_buf_print(kmp_str_buf_t *buffer, char const *format,...)
int __kmp_str_match_false(char const *data)
void __kmp_str_free(char **str)
void __kmp_str_buf_print_size(kmp_str_buf_t *buf, size_t size)
#define __kmp_str_buf_init(b)
int const __kmp_openmp_version
kmp_stg_print_func_t print
kmp_stg_parse_func_t parse
void append(enum sched_type sched, kmp_int32 chunk, kmp_hier_layer_e layer)
void set_core_type(kmp_hw_core_type_t type)
void set_core_eff(int eff)
kmp_proc_bind_t * bind_types
kmp_trimmed_str_t(const char *str)