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')) {
1168 if (!nth_array->
nth) {
1171 if (nth_array->
nth == NULL) {
1174 nth_array->
size = total * 2;
1176 if (nth_array->
size < total) {
1179 nth_array->
size *= 2;
1180 }
while (nth_array->
size < total);
1183 nth_array->
nth,
sizeof(
int) * nth_array->
size);
1184 if (nth_array->
nth == NULL) {
1189 nth_array->
used = total;
1197 if (*scan ==
'\0') {
1207 nth_array->
nth[
i++] = 0;
1209 }
else if (prev_comma) {
1211 nth_array->
nth[
i] = nth_array->
nth[
i - 1];
1220 if (*scan >=
'0' && *scan <=
'9') {
1222 const char *
buf = scan;
1223 char const *msg = NULL;
1241 nth_array->
nth[
i++] = num;
1268static void __kmp_stg_parse_max_tdgs(
char const *
name,
char const *
value,
1278static void __kmp_stg_parse_tdg_dot(
char const *
name,
char const *
value,
1324 (
"__kmp_stg_parse_use_hidden_helper: Disable hidden helper task on "
1325 "non-Linux platform although it is enabled by user explicitly.\n"));
1385 char const *msg = NULL;
1425 const char *scan = value_str.
get();
1444 const char *
value = NULL;
1448 value =
"MANDATORY";
1504#if KMP_NESTED_HOT_TEAMS
1508static void __kmp_stg_parse_hot_teams_level(
char const *
name,
char const *
value,
1515 &__kmp_hot_teams_max_level);
1518static void __kmp_stg_print_hot_teams_level(
kmp_str_buf_t *buffer,
1523static void __kmp_stg_parse_hot_teams_mode(
char const *
name,
char const *
value,
1530 &__kmp_hot_teams_mode);
1533static void __kmp_stg_print_hot_teams_mode(
kmp_str_buf_t *buffer,
1543#if KMP_HANDLE_SIGNALS
1545static void __kmp_stg_parse_handle_signals(
char const *
name,
char const *
value,
1550static void __kmp_stg_print_handle_signals(
kmp_str_buf_t *buffer,
1562#define KMP_STG_X_DEBUG(x) \
1563 static void __kmp_stg_parse_##x##_debug(char const *name, char const *value, \
1565 __kmp_stg_parse_int(name, value, 0, INT_MAX, &kmp_##x##_debug); \
1567 static void __kmp_stg_print_##x##_debug(kmp_str_buf_t *buffer, \
1568 char const *name, void *data) { \
1569 __kmp_stg_print_int(buffer, name, kmp_##x##_debug); \
1579#undef KMP_STG_X_DEBUG
1581static void __kmp_stg_parse_debug(
char const *
name,
char const *
value,
1585 if (kmp_a_debug < debug) {
1586 kmp_a_debug = debug;
1588 if (kmp_b_debug < debug) {
1589 kmp_b_debug = debug;
1591 if (kmp_c_debug < debug) {
1592 kmp_c_debug = debug;
1594 if (kmp_d_debug < debug) {
1595 kmp_d_debug = debug;
1597 if (kmp_e_debug < debug) {
1598 kmp_e_debug = debug;
1600 if (kmp_f_debug < debug) {
1601 kmp_f_debug = debug;
1605static void __kmp_stg_parse_debug_buf(
char const *
name,
char const *
value,
1630static void __kmp_stg_parse_debug_buf_atomic(
char const *
name,
1635static void __kmp_stg_print_debug_buf_atomic(
kmp_str_buf_t *buffer,
1640static void __kmp_stg_parse_debug_buf_chars(
char const *
name,
char const *
value,
1646static void __kmp_stg_print_debug_buf_chars(
kmp_str_buf_t *buffer,
1651static void __kmp_stg_parse_debug_buf_lines(
char const *
name,
char const *
value,
1657static void __kmp_stg_print_debug_buf_lines(
kmp_str_buf_t *buffer,
1662static void __kmp_stg_parse_diag(
char const *
name,
char const *
value,
1701 if ((strcmp(var,
name) == 0) && (
value != 0)) {
1708 if (comma == NULL) {
1716 KMP_MSG(BarrReleaseValueInvalid,
name, comma + 1),
1738 if (strcmp(var,
name) == 0) {
1764 static int dist_req = 0, non_dist_req = 0;
1765 static bool warn = 1;
1769 if ((strcmp(var,
name) == 0) && (
value != 0)) {
1771 char *comma =
CCAST(
char *, strchr(
value,
','));
1793 if (comma != NULL) {
1807 KMP_MSG(BarrReleaseValueInvalid,
name, comma + 1),
1815 if (dist_req != 0) {
1817 if ((non_dist_req != 0) && warn) {
1836 if (strcmp(var,
name) == 0) {
1874#if KMP_AFFINITY_SUPPORTED
1876 K_DIAG(1, (
"__kmp_cpuinfo_file == %s\n", __kmp_cpuinfo_file));
1882#if KMP_AFFINITY_SUPPORTED
1888 if (__kmp_cpuinfo_file) {
1908 if (reduction->
force) {
1928 K_DIAG(1, (
"__kmp_force_reduction_method == %d\n",
1936 if (reduction->
force) {
2015static inline const char *
2021#if KMP_ARCH_X86 || KMP_ARCH_X86_64
2022 case KMP_HW_CORE_TYPE_ATOM:
2023 return "intel_atom";
2024 case KMP_HW_CORE_TYPE_CORE:
2025 return "intel_core";
2028 KMP_ASSERT2(
false,
"Unhandled kmp_hw_core_type_t enumeration");
2032#if KMP_AFFINITY_SUPPORTED
2034static int __kmp_parse_affinity_proc_id_list(
const char *var,
const char *env,
2035 const char **nextEnv,
2037 const char *scan = env;
2038 const char *next = scan;
2044 int start,
end, stride;
2048 if (*next ==
'\0') {
2059 if ((*next <
'0') || (*next >
'9')) {
2083 if ((*next <
'0') || (*next >
'9')) {
2103 if ((*next <
'0') || (*next >
'9')) {
2133 if ((*next <
'0') || (*next >
'9')) {
2156 if ((*next <
'0') || (*next >
'9')) {
2182 if ((
end - start) / stride > 65536) {
2200 ptrdiff_t len = next - env;
2202 KMP_MEMCPY_S(retlist, (len + 1) *
sizeof(
char), env, len *
sizeof(
char));
2203 retlist[len] =
'\0';
2204 *proclist = retlist;
2213static void __kmp_parse_affinity_env(
char const *
name,
char const *
value,
2214 kmp_affinity_t *out_affinity) {
2215 char *buffer = NULL;
2253#define EMIT_WARN(skip, errlist) \
2257 SKIP_TO(next, ','); \
2261 KMP_WARNING errlist; \
2270#define _set_param(_guard, _var, _val) \
2272 if (_guard == 0) { \
2275 EMIT_WARN(FALSE, (AffParamDefined, name, start)); \
2280#define set_type(val) _set_param(type, out_affinity->type, val)
2281#define set_verbose(val) _set_param(verbose, out_affinity->flags.verbose, val)
2282#define set_warnings(val) \
2283 _set_param(warnings, out_affinity->flags.warnings, val)
2284#define set_respect(val) _set_param(respect, out_affinity->flags.respect, val)
2285#define set_dups(val) _set_param(dups, out_affinity->flags.dups, val)
2286#define set_proclist(val) _set_param(proclist, out_affinity->proclist, val)
2287#define set_reset(val) _set_param(reset, out_affinity->flags.reset, val)
2289#define set_gran(val, levels) \
2292 out_affinity->gran = val; \
2293 out_affinity->gran_levels = levels; \
2295 EMIT_WARN(FALSE, (AffParamDefined, name, start)); \
2303 while (*
buf !=
'\0') {
2307 set_type(affinity_none);
2311 set_type(affinity_scatter);
2315 set_type(affinity_compact);
2319 set_type(affinity_logical);
2323 set_type(affinity_physical);
2327 set_type(affinity_explicit);
2331 set_type(affinity_balanced);
2335 set_type(affinity_disabled);
2348 CCAST(
const char **, &next))) {
2349 set_warnings(
FALSE);
2364 CCAST(
const char **, &next)) ||
2369 CCAST(
const char **, &next)) ||
2374 CCAST(
const char **, &next)) ||
2378 EMIT_WARN(
TRUE, (AffInvalidParam,
name, start));
2390 out_affinity->flags.core_types_gran = 1;
2394 CCAST(
const char **, &next)) ||
2396 CCAST(
const char **, &next))) {
2398 out_affinity->flags.core_effs_gran = 1;
2421 CCAST(
const char **, &next))) {
2429#if KMP_GROUP_AFFINITY
2435 }
else if ((*
buf >=
'0') && (*
buf <=
'9')) {
2445 EMIT_WARN(
TRUE, (AffInvalidParam,
name, start));
2450 char *temp_proclist;
2454 EMIT_WARN(
TRUE, (AffInvalidParam,
name, start));
2460 EMIT_WARN(
TRUE, (AffInvalidParam,
name, start));
2465 if (!__kmp_parse_affinity_proc_id_list(
2466 name,
buf,
CCAST(
const char **, &next), &temp_proclist)) {
2478 EMIT_WARN(
TRUE, (AffInvalidParam,
name, start));
2482 set_proclist(temp_proclist);
2483 }
else if ((*
buf >=
'0') && (*
buf <=
'9')) {
2498 EMIT_WARN(
TRUE, (AffInvalidParam,
name, start));
2506 }
else if (*next !=
'\0') {
2507 const char *temp = next;
2508 EMIT_WARN(
TRUE, (ParseExtraCharsWarn,
name, temp));
2520#undef set_granularity
2528 out_affinity->type = affinity_explicit;
2530 }
else if (out_affinity->type != affinity_explicit) {
2534 out_affinity->proclist = NULL;
2537 switch (out_affinity->type) {
2538 case affinity_logical:
2539 case affinity_physical: {
2541 out_affinity->offset = number[0];
2547 case affinity_balanced: {
2549 out_affinity->compact = number[0];
2552 out_affinity->offset = number[1];
2556 int verbose = out_affinity->flags.verbose;
2557 int warnings = out_affinity->flags.warnings;
2558#if KMP_MIC_SUPPORTED
2559 if (__kmp_mic_type != non_mic) {
2560 if (verbose || warnings) {
2561 KMP_WARNING(AffGranUsing, out_affinity->env_var,
"fine");
2567 if (verbose || warnings) {
2568 KMP_WARNING(AffGranUsing, out_affinity->env_var,
"core");
2574 case affinity_scatter:
2575 case affinity_compact: {
2577 out_affinity->compact = number[0];
2580 out_affinity->offset = number[1];
2583 case affinity_explicit: {
2584 if (out_affinity->proclist == NULL) {
2586 out_affinity->type = affinity_none;
2592 case affinity_none: {
2597 case affinity_disabled: {
2602 case affinity_default: {
2613static void __kmp_stg_parse_affinity(
char const *
name,
char const *
value,
2623 __kmp_parse_affinity_env(
name,
value, &__kmp_affinity);
2626static void __kmp_stg_parse_hh_affinity(
char const *
name,
char const *
value,
2628 __kmp_parse_affinity_env(
name,
value, &__kmp_hh_affinity);
2630 if (__kmp_hh_affinity.flags.reset) {
2633 if (__kmp_hh_affinity.flags.respect != affinity_respect_mask_default) {
2639 const kmp_affinity_t &affinity) {
2640 bool is_hh_affinity = (&affinity == &__kmp_hh_affinity);
2646 if (affinity.flags.verbose) {
2651 if (affinity.flags.warnings) {
2656 if (KMP_AFFINITY_CAPABLE()) {
2659 if (!is_hh_affinity) {
2660 if (affinity.flags.respect) {
2665 if (affinity.flags.reset) {
2672 if (affinity.flags.core_types_gran)
2674 else if (affinity.flags.core_effs_gran) {
2681 if (!KMP_AFFINITY_CAPABLE()) {
2684 int compact = affinity.compact;
2685 int offset = affinity.offset;
2686 switch (affinity.type) {
2690 case affinity_physical:
2693 case affinity_logical:
2696 case affinity_compact:
2699 case affinity_scatter:
2702 case affinity_explicit:
2706 case affinity_balanced:
2709 case affinity_disabled:
2712 case affinity_default:
2725 __kmp_print_affinity_env(buffer,
name, __kmp_affinity);
2729 __kmp_print_affinity_env(buffer,
name, __kmp_hh_affinity);
2732#ifdef KMP_GOMP_COMPAT
2734static void __kmp_stg_parse_gomp_cpu_affinity(
char const *
name,
2736 const char *next = NULL;
2737 char *temp_proclist;
2754 if (__kmp_parse_affinity_proc_id_list(
name,
value, &next, &temp_proclist)) {
2756 if (*next ==
'\0') {
2758 __kmp_affinity.proclist = temp_proclist;
2759 __kmp_affinity.type = affinity_explicit;
2764 if (temp_proclist != NULL) {
2770 __kmp_affinity.type = affinity_none;
2798static int __kmp_parse_subplace_list(
const char *var,
const char **scan) {
2802 int start,
count, stride;
2808 if ((**scan <
'0') || (**scan >
'9')) {
2819 if (**scan ==
'}') {
2822 if (**scan ==
',') {
2826 if (**scan !=
':') {
2833 if ((**scan <
'0') || (**scan >
'9')) {
2844 if (**scan ==
'}') {
2847 if (**scan ==
',') {
2851 if (**scan !=
':') {
2860 if (**scan ==
'+') {
2864 if (**scan ==
'-') {
2872 if ((**scan <
'0') || (**scan >
'9')) {
2884 if (**scan ==
'}') {
2887 if (**scan ==
',') {
2897static int __kmp_parse_place(
const char *var,
const char **scan) {
2902 if (**scan ==
'{') {
2904 if (!__kmp_parse_subplace_list(var, scan)) {
2907 if (**scan !=
'}') {
2911 }
else if (**scan ==
'!') {
2913 return __kmp_parse_place(var, scan);
2914 }
else if ((**scan >=
'0') && (**scan <=
'9')) {
2927static int __kmp_parse_place_list(
const char *var,
const char *env,
2928 char **place_list) {
2929 const char *scan = env;
2930 const char *next = scan;
2935 if (!__kmp_parse_place(var, &scan)) {
2941 if (*scan ==
'\0') {
2955 if ((*scan <
'0') || (*scan >
'9')) {
2966 if (*scan ==
'\0') {
2994 if ((*scan <
'0') || (*scan >
'9')) {
3006 if (*scan ==
'\0') {
3018 ptrdiff_t len = scan - env;
3020 KMP_MEMCPY_S(retlist, (len + 1) *
sizeof(
char), env, len *
sizeof(
char));
3021 retlist[len] =
'\0';
3022 *place_list = retlist;
3027static inline void __kmp_places_set(
enum affinity_type
type,
kmp_hw_t kind) {
3028 __kmp_affinity.type =
type;
3029 __kmp_affinity.gran = kind;
3030 __kmp_affinity.flags.dups =
FALSE;
3031 __kmp_affinity.flags.omp_places =
TRUE;
3034static void __kmp_places_syntax_error_fallback(
char const *
name,
3038 __kmp_places_set(affinity_compact, kind);
3043static void __kmp_stg_parse_places(
char const *
name,
char const *
value,
3045 struct kmp_place_t {
3051 const char *scan =
value;
3052 const char *next = scan;
3067 for (
size_t i = 0;
i <
sizeof(std_places) /
sizeof(std_places[0]); ++
i) {
3068 const kmp_place_t &place = std_places[
i];
3071 __kmp_places_set(affinity_compact, place.type);
3078 __kmp_places_syntax_error_fallback(
name, place.type);
3083#if KMP_ARCH_X86 || KMP_ARCH_X86_64
3085 __kmp_affinity.core_attr_gran.core_type = KMP_HW_CORE_TYPE_CORE;
3086 __kmp_affinity.core_attr_gran.valid = 1;
3089 __kmp_affinity.core_attr_gran.core_type = KMP_HW_CORE_TYPE_ATOM;
3090 __kmp_affinity.core_attr_gran.valid = 1;
3096 if (!isdigit(*next)) {
3097 __kmp_places_syntax_error_fallback(
name, place.type);
3104 __kmp_places_syntax_error_fallback(
name, place.type);
3109 __kmp_affinity.core_attr_gran.core_eff = eff;
3110 __kmp_affinity.core_attr_gran.valid = 1;
3113 if (!__kmp_affinity.core_attr_gran.valid) {
3114 __kmp_places_syntax_error_fallback(
name, place.type);
3130 __kmp_places_set(affinity_compact,
type);
3140 if (*scan !=
'\0') {
3144 __kmp_affinity.flags.core_types_gran = 1;
3149 if (*scan !=
'\0') {
3153 __kmp_affinity.flags.core_effs_gran = 1;
3159 if (__kmp_affinity.proclist != NULL) {
3161 __kmp_affinity.proclist = NULL;
3163 if (__kmp_parse_place_list(
name,
value, &__kmp_affinity.proclist)) {
3175 kmp_hw_t gran = __kmp_affinity.gran;
3177 gran = __kmp_affinity.gran;
3187 if (*scan ==
'\0') {
3193 __kmp_places_syntax_error_fallback(
name, gran);
3207 __kmp_places_syntax_error_fallback(
name, gran);
3213 if (*scan !=
'\0') {
3221 enum affinity_type
type = __kmp_affinity.type;
3222 const char *proclist = __kmp_affinity.proclist;
3223 kmp_hw_t gran = __kmp_affinity.gran;
3234 }
else if (
type == affinity_explicit) {
3235 if (proclist != NULL) {
3240 }
else if (
type == affinity_compact) {
3242 if (__kmp_affinity.num_masks > 0) {
3243 num = __kmp_affinity.num_masks;
3251 if (__kmp_affinity.flags.core_types_gran) {
3255 if (__kmp_affinity.flags.core_effs_gran) {
3265 if (__kmp_affinity.core_attr_gran.valid) {
3268 int eff = __kmp_affinity.core_attr_gran.core_eff;
3289static void __kmp_stg_parse_topology_method(
char const *
name,
char const *
value,
3292 __kmp_affinity_top_method = affinity_top_method_all;
3296 __kmp_affinity_top_method = affinity_top_method_hwloc;
3299#if KMP_ARCH_X86 || KMP_ARCH_X86_64
3309 __kmp_affinity_top_method = affinity_top_method_x2apicid_1f;
3332 __kmp_affinity_top_method = affinity_top_method_x2apicid;
3355 __kmp_affinity_top_method = affinity_top_method_apicid;
3360 __kmp_affinity_top_method = affinity_top_method_cpuinfo;
3362#if KMP_GROUP_AFFINITY
3365 __kmp_affinity_top_method = affinity_top_method_group;
3369 __kmp_affinity_top_method = affinity_top_method_flat;
3375static void __kmp_stg_print_topology_method(
kmp_str_buf_t *buffer,
3377 char const *
value = NULL;
3379 switch (__kmp_affinity_top_method) {
3380 case affinity_top_method_default:
3384 case affinity_top_method_all:
3388#if KMP_ARCH_X86 || KMP_ARCH_X86_64
3389 case affinity_top_method_x2apicid_1f:
3390 value =
"x2APIC id leaf 0x1f";
3393 case affinity_top_method_x2apicid:
3394 value =
"x2APIC id leaf 0xb";
3397 case affinity_top_method_apicid:
3403 case affinity_top_method_hwloc:
3408 case affinity_top_method_cpuinfo:
3412#if KMP_GROUP_AFFINITY
3413 case affinity_top_method_group:
3418 case affinity_top_method_flat:
3423 if (
value != NULL) {
3429struct kmp_proc_bind_info_t {
3433static kmp_proc_bind_info_t proc_bind_table[] = {
3440static void __kmp_stg_parse_teams_proc_bind(
char const *
name,
char const *
value,
3445 for (
size_t i = 0;
i <
sizeof(proc_bind_table) /
sizeof(proc_bind_table[0]);
3457static void __kmp_stg_print_teams_proc_bind(
kmp_str_buf_t *buffer,
3460 for (
size_t i = 0;
i <
sizeof(proc_bind_table) /
sizeof(proc_bind_table[0]);
3463 value = proc_bind_table[
i].name;
3491 if ((*
buf >=
'0') && (*
buf <=
'9')) {
3506#if KMP_AFFINITY_SUPPORTED
3507 __kmp_affinity.type = affinity_disabled;
3515#if KMP_AFFINITY_SUPPORTED
3516 __kmp_affinity.type = affinity_none;
3530 for (scan =
buf; *scan !=
'\0'; scan++) {
3589 if ((*
buf >=
'0') && (*
buf <=
'9')) {
3620 for (
i = 0;
i < nelem;
i++) {
3650 if (
i < nelem - 1) {
3704 const char *next, *scan, *start;
3708 bool is_memspace =
false;
3709 int ntraits = 0,
count = 0;
3713 const char *delim = strchr(
buf,
':');
3714 const char *predef_mem_space = strstr(
buf,
"mem_space");
3716 bool is_memalloc = (!predef_mem_space && !delim) ?
true :
false;
3721 for (scan =
buf; *scan !=
'\0'; scan++) {
3730#define IS_POWER_OF_TWO(n) (((n) & ((n)-1)) == 0)
3732#define GET_NEXT(sentinel) \
3735 if (*next == sentinel) \
3741#define SKIP_PAIR(key) \
3743 char const str_delimiter[] = {',', 0}; \
3744 char *value = __kmp_str_token(CCAST(char *, scan), str_delimiter, \
3745 CCAST(char **, &next)); \
3746 KMP_WARNING(StgInvalidValue, key, value); \
3754 char const str_delimiter[] = {'=', 0}; \
3755 key = __kmp_str_token(CCAST(char *, start), str_delimiter, \
3756 CCAST(char **, &next)); \
3761 while (*next !=
'\0') {
3774 KMP_WARNING(OmpNoAllocator,
"omp_high_bw_mem_alloc");
3787 KMP_WARNING(OmpNoAllocator,
"omp_large_cap_mem_alloc");
3803 KMP_WARNING(OmpNoAllocator,
"omp_const_mem_alloc");
3811 KMP_WARNING(OmpNoAllocator,
"omp_low_lat_mem_alloc");
3819 KMP_WARNING(OmpNoAllocator,
"omp_cgroup_mem_alloc");
3827 KMP_WARNING(OmpNoAllocator,
"omp_pteam_mem_alloc");
3835 KMP_WARNING(OmpNoAllocator,
"omp_thread_mem_alloc");
3849 if (next ==
buf || *next !=
'\0') {
3856 if (
count == ntraits)
3879 if (next ==
buf || *next !=
'\0') {
3908 if (!isdigit(*next)) {
3940 if (!isdigit(*next)) {
4005 if (
count == ntraits)
4056#ifdef USE_LOAD_BALANCE
4084#ifdef USE_LOAD_BALANCE
4085 else if (
__kmp_global.g.g_dynamic_mode == dynamic_load_balance) {
4099#ifdef USE_LOAD_BALANCE
4104static void __kmp_stg_parse_ld_balance_interval(
char const *
name,
4106 double interval = __kmp_convert_to_double(
value);
4107 if (interval >= 0) {
4108 __kmp_load_balance_interval = interval;
4114static void __kmp_stg_print_ld_balance_interval(
kmp_str_buf_t *buffer,
4118 __kmp_load_balance_interval);
4146 if (
value != NULL) {
4151 const char *semicolon;
4157 semicolon = strchr(
value,
';');
4159 const char *comma = strchr(
value,
',');
4190 }
while ((
value = semicolon ? semicolon + 1 : NULL));
4219#if KMP_USE_HIER_SCHED
4232 bool parse_hier =
false) {
4234 const char *ptr =
value;
4241 while (*delim !=
',' && *delim !=
':' && *delim !=
'\0')
4243#if KMP_USE_HIER_SCHED
4246 if (*delim ==
',') {
4264 while (*delim !=
',' && *delim !=
':' && *delim !=
'\0')
4271 if (*delim ==
':') {
4275 while (*delim !=
',' && *delim !=
':' && *delim !=
'\0')
4280 while (*delim !=
',' && *delim !=
':' && *delim !=
'\0')
4282 }
else if (!parse_hier) {
4301#if KMP_STATIC_STEAL_ENABLED
4316 if (*delim ==
',') {
4319 if (!isdigit(*ptr)) {
4360#if KMP_USE_HIER_SCHED
4375 const char *ptr =
value;
4383#if KMP_USE_HIER_SCHED
4388 while (*ptr ==
' ' || *ptr ==
'\t' || *ptr ==
':')
4399#if KMP_USE_HIER_SCHED
4446 KMP_ASSERT2(
false,
"Unhandled sched_type enumeration");
4475 KMP_ASSERT2(
false,
"Unhandled sched_type enumeration");
4482#if KMP_USE_HIER_SCHED
4485static void __kmp_stg_parse_kmp_hand_thread(
char const *
name,
char const *
value,
4490static void __kmp_stg_print_kmp_hand_thread(
kmp_str_buf_t *buffer,
4517#ifdef KMP_GOMP_COMPAT
4556 const char *
value = NULL;
4564 if (
value != NULL) {
4576static void __kmp_stg_parse_itt_prepare_delay(
char const *
name,
4582 __kmp_itt_prepare_delay =
delay;
4585static void __kmp_stg_print_itt_prepare_delay(
kmp_str_buf_t *buffer,
4615static void __kmp_stg_parse_par_range_env(
char const *
name,
char const *
value,
4617 __kmp_stg_parse_par_range(
name,
value, &__kmp_par_range,
4618 __kmp_par_range_routine, __kmp_par_range_filename,
4619 &__kmp_par_range_lb, &__kmp_par_range_ub);
4622static void __kmp_stg_print_par_range_env(
kmp_str_buf_t *buffer,
4624 if (__kmp_par_range != 0) {
4644#ifdef KMP_TDATA_GTID
4683#if KMP_USE_DYNAMIC_LOCK
4684#define KMP_STORE_LOCK_SEQ(a) (__kmp_user_lock_seq = lockseq_##a)
4686#define KMP_STORE_LOCK_SEQ(a)
4712 if (__kmp_futex_determine_capable()) {
4735#if KMP_USE_ADAPTIVE_LOCKS
4737 if (__kmp_cpuinfo.flags.rtm) {
4747#if KMP_USE_DYNAMIC_LOCK && KMP_USE_TSX
4749 if (__kmp_cpuinfo.flags.rtm) {
4758 if (__kmp_cpuinfo.flags.rtm) {
4778 const char *
value = NULL;
4795#if KMP_USE_DYNAMIC_LOCK && KMP_USE_TSX
4796 case lk_rtm_queuing:
4797 value =
"rtm_queuing";
4820#if KMP_USE_ADAPTIVE_LOCKS
4827 if (
value != NULL) {
4839 const char *next =
value;
4842 int prev_comma =
FALSE;
4850 for (
i = 0;
i < 3;
i++) {
4853 if (*next ==
'\0') {
4858 if (((*next <
'0' || *next >
'9') && *next !=
',') || total > 2) {
4865 if (total == 0 || prev_comma) {
4873 if (*next >=
'0' && *next <=
'9') {
4875 const char *
buf = next;
4876 char const *msg = NULL;
4881 const char *tmp = next;
4883 if ((*next ==
' ' || *next ==
'\t') && (*tmp >=
'0' && *tmp <=
'9')) {
4900 }
else if (total == 2) {
4925#if KMP_USE_ADAPTIVE_LOCKS
4932static void __kmp_stg_parse_adaptive_lock_props(
const char *
name,
4934 int max_retries = 0;
4935 int max_badness = 0;
4937 const char *next =
value;
4940 int prev_comma =
FALSE;
4946 for (
i = 0;
i < 3;
i++) {
4949 if (*next ==
'\0') {
4954 if (((*next <
'0' || *next >
'9') && *next !=
',') || total > 2) {
4961 if (total == 0 || prev_comma) {
4969 if (*next >=
'0' && *next <=
'9') {
4971 const char *
buf = next;
4972 char const *msg = NULL;
4977 const char *tmp = next;
4979 if ((*next ==
' ' || *next ==
'\t') && (*tmp >=
'0' && *tmp <=
'9')) {
4996 }
else if (total == 2) {
5006 __kmp_adaptive_backoff_params.max_soft_retries = max_retries;
5007 __kmp_adaptive_backoff_params.max_badness = max_badness;
5010static void __kmp_stg_print_adaptive_lock_props(
kmp_str_buf_t *buffer,
5018 __kmp_adaptive_backoff_params.max_soft_retries,
5019 __kmp_adaptive_backoff_params.max_badness);
5022#if KMP_DEBUG_ADAPTIVE_LOCKS
5024static void __kmp_stg_parse_speculative_statsfile(
char const *
name,
5028 CCAST(
char **, &__kmp_speculative_statsfile));
5031static void __kmp_stg_print_speculative_statsfile(
kmp_str_buf_t *buffer,
5054 size_t num_possible) {
5055 for (
size_t i = 0;
i < num_possible; ++
i) {
5071 size_t index, num_possible, token_length;
5078 while (isalnum(*
end) || *
end ==
'_') {
5092 while (num_possible > 1 && index < token_length) {
5093 size_t n = num_possible;
5094 char token_char = (
char)toupper(token[index]);
5095 for (
size_t i = 0;
i < n; ++
i) {
5100 char c = (
char)toupper(
s[index]);
5102 if (c != token_char) {
5110 for (
size_t i = 0;
i < n; ++
i) {
5113 possible[
i] = possible[start];
5114 possible[start] = temp;
5124 if (num_possible > 1)
5126 if (num_possible == 1)
5133#define MAX_T_LEVEL KMP_HW_LAST
5134#define MAX_STR_LEN 512
5140 if (strcmp(
name,
"KMP_PLACE_THREADS") == 0) {
5148 char const *digits =
"0123456789";
5152 bool absolute =
false;
5155 while (*pos && mlen) {
5157 if (len == 0 && *pos ==
':') {
5160 input[len] = (
char)(toupper(*pos));
5161 if (input[len] ==
'X')
5163 if (input[len] ==
'O' && strchr(digits, *(pos + 1)))
5171 if (len == 0 || mlen == 0) {
5177 components[
level++] = pos;
5178 while ((pos = strchr(pos,
','))) {
5182 components[
level++] = ++pos;
5194 pos = components[
i];
5195 core_components[core_level++] = pos;
5196 while ((pos = strchr(pos,
'&'))) {
5200 core_components[core_level++] = ++pos;
5203 for (
int j = 0;
j < core_level; ++
j) {
5210 if (isdigit(*core_components[
j])) {
5211 num = atoi(core_components[
j]);
5215 pos = core_components[
j] + strspn(core_components[
j], digits);
5216 }
else if (*core_components[
j] ==
'*') {
5218 pos = core_components[
j] + 1;
5221 pos = core_components[
j];
5224 offset_ptr = strchr(core_components[
j],
'@');
5225 attr_ptr = strchr(core_components[
j],
':');
5228 offset = atoi(offset_ptr + 1);
5234#if KMP_ARCH_X86 || KMP_ARCH_X86_64
5242 const char *number = attr_ptr + 1;
5244 while (isalpha(*number))
5246 if (!isdigit(*number)) {
5249 int efficiency = atoi(number);
5294 for (
int i = 0;
i < depth; ++
i) {
5298 for (
int j = 0;
j < item.num_attrs; ++
j) {
5301 if (item.attr[
j].is_core_type_valid())
5305 if (item.attr[
j].is_core_eff_valid())
5319static void __kmp_stg_parse_forkjoin_frames(
char const *
name,
char const *
value,
5324static void __kmp_stg_print_forkjoin_frames(
kmp_str_buf_t *buffer,
5332static void __kmp_stg_parse_forkjoin_frames_mode(
char const *
name,
5338static void __kmp_stg_print_forkjoin_frames_mode(
kmp_str_buf_t *buffer,
5357#if KMP_HAVE_MWAIT || KMP_HAVE_UMWAIT
5361static void __kmp_stg_parse_user_level_mwait(
char const *
name,
5366static void __kmp_stg_print_user_level_mwait(
kmp_str_buf_t *buffer,
5374static void __kmp_stg_parse_mwait_hints(
char const *
name,
char const *
value,
5391static void __kmp_stg_parse_tpause(
char const *
name,
char const *
value,
5394 if (__kmp_tpause_state != 0) {
5396 if (__kmp_tpause_state == 2)
5397 __kmp_tpause_hint = 0;
5445static void __kmp_stg_parse_omp_tool(
char const *
name,
char const *
value,
5456 __kmp_tool ?
"enabled" :
"disabled");
5460char *__kmp_tool_libraries = NULL;
5462static void __kmp_stg_parse_omp_tool_libraries(
char const *
name,
5467static void __kmp_stg_print_omp_tool_libraries(
kmp_str_buf_t *buffer,
5469 if (__kmp_tool_libraries)
5481char *__kmp_tool_verbose_init = NULL;
5483static void __kmp_stg_parse_omp_tool_verbose_init(
char const *
name,
5489static void __kmp_stg_print_omp_tool_verbose_init(
kmp_str_buf_t *buffer,
5492 if (__kmp_tool_verbose_init)
5522 {
"KMP_MONITOR_STACKSIZE", __kmp_stg_parse_monitor_stacksize,
5523 __kmp_stg_print_monitor_stacksize, NULL, 0, 0},
5572#if KMP_NESTED_HOT_TEAMS
5573 {
"KMP_HOT_TEAMS_MAX_LEVEL", __kmp_stg_parse_hot_teams_level,
5574 __kmp_stg_print_hot_teams_level, NULL, 0, 0},
5575 {
"KMP_HOT_TEAMS_MODE", __kmp_stg_parse_hot_teams_mode,
5576 __kmp_stg_print_hot_teams_mode, NULL, 0, 0},
5579#if KMP_HANDLE_SIGNALS
5580 {
"KMP_HANDLE_SIGNALS", __kmp_stg_parse_handle_signals,
5581 __kmp_stg_print_handle_signals, NULL, 0, 0},
5584#if KMP_ARCH_X86 || KMP_ARCH_X86_64
5585 {
"KMP_INHERIT_FP_CONTROL", __kmp_stg_parse_inherit_fp_control,
5586 __kmp_stg_print_inherit_fp_control, NULL, 0, 0},
5589#ifdef KMP_GOMP_COMPAT
5594 {
"KMP_A_DEBUG", __kmp_stg_parse_a_debug, __kmp_stg_print_a_debug, NULL, 0,
5596 {
"KMP_B_DEBUG", __kmp_stg_parse_b_debug, __kmp_stg_print_b_debug, NULL, 0,
5598 {
"KMP_C_DEBUG", __kmp_stg_parse_c_debug, __kmp_stg_print_c_debug, NULL, 0,
5600 {
"KMP_D_DEBUG", __kmp_stg_parse_d_debug, __kmp_stg_print_d_debug, NULL, 0,
5602 {
"KMP_E_DEBUG", __kmp_stg_parse_e_debug, __kmp_stg_print_e_debug, NULL, 0,
5604 {
"KMP_F_DEBUG", __kmp_stg_parse_f_debug, __kmp_stg_print_f_debug, NULL, 0,
5606 {
"KMP_DEBUG", __kmp_stg_parse_debug, NULL, NULL, 0, 0},
5607 {
"KMP_DEBUG_BUF", __kmp_stg_parse_debug_buf, __kmp_stg_print_debug_buf,
5609 {
"KMP_DEBUG_BUF_ATOMIC", __kmp_stg_parse_debug_buf_atomic,
5610 __kmp_stg_print_debug_buf_atomic, NULL, 0, 0},
5611 {
"KMP_DEBUG_BUF_CHARS", __kmp_stg_parse_debug_buf_chars,
5612 __kmp_stg_print_debug_buf_chars, NULL, 0, 0},
5613 {
"KMP_DEBUG_BUF_LINES", __kmp_stg_parse_debug_buf_lines,
5614 __kmp_stg_print_debug_buf_lines, NULL, 0, 0},
5615 {
"KMP_DIAG", __kmp_stg_parse_diag, __kmp_stg_print_diag, NULL, 0, 0},
5617 {
"KMP_PAR_RANGE", __kmp_stg_parse_par_range_env,
5618 __kmp_stg_print_par_range_env, NULL, 0, 0},
5632#if KMP_FAST_REDUCTION_BARRIER
5651 {
"KMP_FOREIGN_THREADS_THREADPRIVATE",
5655#if KMP_AFFINITY_SUPPORTED
5656 {
"KMP_AFFINITY", __kmp_stg_parse_affinity, __kmp_stg_print_affinity, NULL,
5658 {
"KMP_HIDDEN_HELPER_AFFINITY", __kmp_stg_parse_hh_affinity,
5659 __kmp_stg_print_hh_affinity, NULL, 0, 0},
5660#ifdef KMP_GOMP_COMPAT
5661 {
"GOMP_CPU_AFFINITY", __kmp_stg_parse_gomp_cpu_affinity, NULL,
5666 {
"KMP_TEAMS_PROC_BIND", __kmp_stg_parse_teams_proc_bind,
5667 __kmp_stg_print_teams_proc_bind, NULL, 0, 0},
5668 {
"OMP_PLACES", __kmp_stg_parse_places, __kmp_stg_print_places, NULL, 0, 0},
5669 {
"KMP_TOPOLOGY_METHOD", __kmp_stg_parse_topology_method,
5670 __kmp_stg_print_topology_method, NULL, 0, 0},
5690#if KMP_USE_HIER_SCHED
5691 {
"KMP_DISP_HAND_THREAD", __kmp_stg_parse_kmp_hand_thread,
5692 __kmp_stg_print_kmp_hand_thread, NULL, 0, 0},
5694 {
"KMP_FORCE_MONOTONIC_DYNAMIC_SCHEDULE",
5702#if USE_ITT_BUILD && USE_ITT_NOTIFY
5703 {
"KMP_ITT_PREPARE_DELAY", __kmp_stg_parse_itt_prepare_delay,
5704 __kmp_stg_print_itt_prepare_delay, NULL, 0, 0},
5715#ifdef USE_LOAD_BALANCE
5716 {
"KMP_LOAD_BALANCE_INTERVAL", __kmp_stg_parse_ld_balance_interval,
5717 __kmp_stg_print_ld_balance_interval, NULL, 0, 0},
5726#if KMP_USE_ADAPTIVE_LOCKS
5727 {
"KMP_ADAPTIVE_LOCK_PROPS", __kmp_stg_parse_adaptive_lock_props,
5728 __kmp_stg_print_adaptive_lock_props, NULL, 0, 0},
5729#if KMP_DEBUG_ADAPTIVE_LOCKS
5730 {
"KMP_SPECULATIVE_STATSFILE", __kmp_stg_parse_speculative_statsfile,
5731 __kmp_stg_print_speculative_statsfile, NULL, 0, 0},
5739 {
"KMP_FORKJOIN_FRAMES", __kmp_stg_parse_forkjoin_frames,
5740 __kmp_stg_print_forkjoin_frames, NULL, 0, 0},
5741 {
"KMP_FORKJOIN_FRAMES_MODE", __kmp_stg_parse_forkjoin_frames_mode,
5742 __kmp_stg_print_forkjoin_frames_mode, NULL, 0, 0},
5755 {
"LIBOMP_NUM_HIDDEN_HELPER_THREADS",
5759 {
"KMP_MAX_TDGS", __kmp_stg_parse_max_tdgs, __kmp_std_print_max_tdgs, NULL,
5761 {
"KMP_TDG_DOT", __kmp_stg_parse_tdg_dot, __kmp_stg_print_tdg_dot, NULL, 0, 0},
5765 {
"OMP_TOOL", __kmp_stg_parse_omp_tool, __kmp_stg_print_omp_tool, NULL, 0,
5767 {
"OMP_TOOL_LIBRARIES", __kmp_stg_parse_omp_tool_libraries,
5768 __kmp_stg_print_omp_tool_libraries, NULL, 0, 0},
5769 {
"OMP_TOOL_VERBOSE_INIT", __kmp_stg_parse_omp_tool_verbose_init,
5770 __kmp_stg_print_omp_tool_verbose_init, NULL, 0, 0},
5773#if KMP_HAVE_MWAIT || KMP_HAVE_UMWAIT
5774 {
"KMP_USER_LEVEL_MWAIT", __kmp_stg_parse_user_level_mwait,
5775 __kmp_stg_print_user_level_mwait, NULL, 0, 0},
5776 {
"KMP_MWAIT_HINTS", __kmp_stg_parse_mwait_hints,
5777 __kmp_stg_print_mwait_hints, NULL, 0, 0},
5781 {
"KMP_TPAUSE", __kmp_stg_parse_tpause, __kmp_stg_print_tpause, NULL, 0, 0},
5783 {
"", NULL, NULL, NULL, 0, 0}};
5808 if (strcmp(
a->name,
"KMP_AFFINITY") == 0) {
5809 if (strcmp(
b->name,
"KMP_AFFINITY") == 0) {
5813 }
else if (strcmp(
b->name,
"KMP_AFFINITY") == 0) {
5816 return strcmp(
a->name,
b->name);
5832#ifdef KMP_GOMP_COMPAT
5845#ifdef KMP_GOMP_COMPAT
5853 rivals[
i++] = kmp_stacksize;
5854#ifdef KMP_GOMP_COMPAT
5855 if (gomp_stacksize != NULL) {
5856 rivals[
i++] = gomp_stacksize;
5859 rivals[
i++] = omp_stacksize;
5862 kmp_stacksize->
data = &kmp_data;
5863#ifdef KMP_GOMP_COMPAT
5864 if (gomp_stacksize != NULL) {
5865 gomp_stacksize->
data = &gomp_data;
5868 omp_stacksize->
data = &omp_data;
5883 rivals[
i++] = kmp_library;
5884 if (omp_wait_policy != NULL) {
5885 rivals[
i++] = omp_wait_policy;
5889 kmp_library->
data = &kmp_data;
5890 if (omp_wait_policy != NULL) {
5891 omp_wait_policy->
data = &omp_data;
5905 rivals[
i++] = kmp_device_thread_limit;
5906 rivals[
i++] = kmp_all_threads;
5923 rivals[
i++] = kmp_hw_subset;
5924 rivals[
i++] = kmp_place_threads;
5931#if KMP_AFFINITY_SUPPORTED
5937#ifdef KMP_GOMP_COMPAT
5951 rivals[
i++] = kmp_affinity;
5953#ifdef KMP_GOMP_COMPAT
5954 rivals[
i++] = gomp_cpu_affinity;
5958 rivals[
i++] = omp_proc_bind;
5968 places_rivals[
i++] = kmp_affinity;
5969#ifdef KMP_GOMP_COMPAT
5970 places_rivals[
i++] = gomp_cpu_affinity;
5972 places_rivals[
i++] = omp_places;
5974 places_rivals[
i++] = NULL;
5995 rivals[
i++] = kmp_force_red;
5996 if (kmp_determ_red != NULL) {
5997 rivals[
i++] = kmp_determ_red;
6001 kmp_force_red->
data = &force_data;
6002 if (kmp_determ_red != NULL) {
6003 kmp_determ_red->
data = &determ_data;
6026 if (
value != NULL) {
6028 if (setting != NULL) {
6042 if (rivals == NULL) {
6048 for (; strcmp(rivals[
i]->
name,
name) != 0;
i++) {
6051#if KMP_AFFINITY_SUPPORTED
6052 if (rivals[
i] == __kmp_affinity_notype) {
6059 if (rivals[
i]->set) {
6073 if (setting != NULL) {
6082#if defined(KMP_DEBUG) && KMP_AFFINITY_SUPPORTED
6083static void __kmp_print_affinity_settings(
const kmp_affinity_t *affinity) {
6084 K_DIAG(1, (
"%s:\n", affinity->env_var));
6085 K_DIAG(1, (
" type : %d\n", affinity->type));
6086 K_DIAG(1, (
" compact : %d\n", affinity->compact));
6087 K_DIAG(1, (
" offset : %d\n", affinity->offset));
6088 K_DIAG(1, (
" verbose : %u\n", affinity->flags.verbose));
6089 K_DIAG(1, (
" warnings : %u\n", affinity->flags.warnings));
6090 K_DIAG(1, (
" respect : %u\n", affinity->flags.respect));
6091 K_DIAG(1, (
" reset : %u\n", affinity->flags.reset));
6092 K_DIAG(1, (
" dups : %u\n", affinity->flags.dups));
6093 K_DIAG(1, (
" gran : %d\n", (
int)affinity->gran));
6141 if (
string == NULL) {
6149 for (
i = 0;
i < block.
count; ++
i) {
6157 if (setting != NULL) {
6167 if (
string == NULL) {
6168 char const *
name =
"KMP_WARNINGS";
6173#if KMP_AFFINITY_SUPPORTED
6179 __kmp_affinity_notype = NULL;
6181 if (aff_str != NULL) {
6192#if KMP_OS_WINDOWS || KMP_OS_AIX
6195#define FIND strcasestr
6198 if ((FIND(aff_str,
"none") == NULL) &&
6199 (FIND(aff_str,
"physical") == NULL) &&
6200 (FIND(aff_str,
"logical") == NULL) &&
6201 (FIND(aff_str,
"compact") == NULL) &&
6202 (FIND(aff_str,
"scatter") == NULL) &&
6203 (FIND(aff_str,
"explicit") == NULL) &&
6204 (FIND(aff_str,
"balanced") == NULL) &&
6205 (FIND(aff_str,
"disabled") == NULL)) {
6211 __kmp_affinity.type = affinity_default;
6213 __kmp_affinity_top_method = affinity_top_method_default;
6214 __kmp_affinity.flags.respect = affinity_respect_mask_default;
6220 if (aff_str != NULL) {
6221 __kmp_affinity.type = affinity_default;
6223 __kmp_affinity_top_method = affinity_top_method_default;
6224 __kmp_affinity.flags.respect = affinity_respect_mask_default;
6239#if KMP_AFFINITY_SUPPORTED
6261 for (
i = 0;
i < block.
count; ++
i) {
6270#if KMP_USE_DYNAMIC_LOCK
6271 __kmp_init_dynamic_user_locks();
6282#if KMP_USE_DYNAMIC_LOCK
6283 __kmp_init_dynamic_user_locks();
6289#if KMP_AFFINITY_SUPPORTED
6297 __kmp_affinity_top_method == affinity_top_method_default)
6302 __kmp_affinity_top_method = affinity_top_method_hwloc;
6306 __kmp_affinity_top_method = affinity_top_method_hwloc;
6310 const char *var =
"KMP_AFFINITY";
6311 KMPAffinity::pick_api();
6316 if (__kmp_affinity_top_method == affinity_top_method_hwloc &&
6317 __kmp_affinity_dispatch->get_api_type() != KMPAffinity::HWLOC) {
6319 __kmp_affinity_top_method = affinity_top_method_all;
6322 if (__kmp_affinity.type == affinity_disabled) {
6323 KMP_AFFINITY_DISABLE();
6324 }
else if (!KMP_AFFINITY_CAPABLE()) {
6325 __kmp_affinity_dispatch->determine_capable(var);
6326 if (!KMP_AFFINITY_CAPABLE()) {
6327 if (__kmp_affinity.flags.verbose ||
6328 (__kmp_affinity.flags.warnings &&
6329 (__kmp_affinity.type != affinity_default) &&
6330 (__kmp_affinity.type != affinity_none) &&
6331 (__kmp_affinity.type != affinity_disabled))) {
6334 __kmp_affinity.type = affinity_disabled;
6335 __kmp_affinity.flags.respect =
FALSE;
6340 if (__kmp_affinity.type == affinity_disabled) {
6347 if (KMP_AFFINITY_CAPABLE()) {
6349#if KMP_GROUP_AFFINITY
6354 bool exactly_one_group =
false;
6355 if (__kmp_num_proc_groups > 1) {
6357 bool within_one_group;
6360 kmp_affin_mask_t *init_mask;
6361 KMP_CPU_ALLOC(init_mask);
6362 __kmp_get_system_affinity(init_mask,
TRUE);
6363 group = __kmp_get_proc_group(init_mask);
6364 within_one_group = (group >= 0);
6367 if (within_one_group) {
6368 DWORD num_bits_in_group = __kmp_GetActiveProcessorCount(group);
6369 DWORD num_bits_in_mask = 0;
6370 for (
int bit = init_mask->begin(); bit != init_mask->end();
6371 bit = init_mask->next(bit))
6373 exactly_one_group = (num_bits_in_group == num_bits_in_mask);
6375 KMP_CPU_FREE(init_mask);
6381 if (__kmp_num_proc_groups > 1 &&
6382 __kmp_affinity.type == affinity_default &&
6388 if (__kmp_affinity.flags.respect == affinity_respect_mask_default &&
6389 exactly_one_group) {
6390 __kmp_affinity.flags.respect =
FALSE;
6394 if (__kmp_affinity.type == affinity_default) {
6395 __kmp_affinity.type = affinity_compact;
6398 if (__kmp_hh_affinity.type == affinity_default)
6399 __kmp_hh_affinity.type = affinity_compact;
6400 if (__kmp_affinity_top_method == affinity_top_method_default)
6401 __kmp_affinity_top_method = affinity_top_method_all;
6411 if (__kmp_affinity.flags.respect == affinity_respect_mask_default) {
6412#if KMP_GROUP_AFFINITY
6413 if (__kmp_num_proc_groups > 1 && exactly_one_group) {
6414 __kmp_affinity.flags.respect =
FALSE;
6418 __kmp_affinity.flags.respect =
TRUE;
6424 __kmp_affinity.type = affinity_none;
6425 if (__kmp_affinity.type == affinity_default) {
6426 __kmp_affinity.type = affinity_compact;
6427 __kmp_affinity.flags.dups =
FALSE;
6429 }
else if (__kmp_affinity.type == affinity_default) {
6430#if KMP_MIC_SUPPORTED
6431 if (__kmp_mic_type != non_mic) {
6438#if KMP_MIC_SUPPORTED
6439 if (__kmp_mic_type != non_mic) {
6440 __kmp_affinity.type = affinity_scatter;
6444 __kmp_affinity.type = affinity_none;
6447 if (__kmp_hh_affinity.type == affinity_default)
6448 __kmp_hh_affinity.type = affinity_none;
6450 (__kmp_affinity.gran_levels < 0)) {
6451#if KMP_MIC_SUPPORTED
6452 if (__kmp_mic_type != non_mic) {
6461 (__kmp_hh_affinity.gran_levels < 0)) {
6462#if KMP_MIC_SUPPORTED
6463 if (__kmp_mic_type != non_mic) {
6471 if (__kmp_affinity_top_method == affinity_top_method_default) {
6472 __kmp_affinity_top_method = affinity_top_method_all;
6478 if (__kmp_affinity_top_method == affinity_top_method_default)
6479 __kmp_affinity_top_method = affinity_top_method_all;
6480 if (__kmp_affinity.type == affinity_default)
6481 __kmp_affinity.type = affinity_disabled;
6482 if (__kmp_hh_affinity.type == affinity_default)
6483 __kmp_hh_affinity.type = affinity_disabled;
6487 for (
const kmp_affinity_t *affinity : __kmp_affinities)
6488 __kmp_print_affinity_settings(affinity);
6490 K_DIAG(1, (
"__kmp_nested_proc_bind.bind_types[0] == %d\n",
6499 if (
string != NULL) {
6523 for (
i = 0;
i < block.
count; ++
i) {
6527 strncmp(
name,
"OMP_", 4) == 0
6528#ifdef KMP_GOMP_COMPAT
6529 || strncmp(
name,
"GOMP_", 5) == 0
6577 display_env_verbose)) {
6596void __kmp_env_dump() {
6619 if (strstr(env.
str, notdefined.
str))
6628 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
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]
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_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_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_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_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)