41#ifdef USE_LOAD_BALANCE
42static double __kmp_convert_to_double(
char const *
s) {
54static unsigned int __kmp_readstr_with_sentinel(
char *dest,
char const *src,
55 size_t len,
char sentinel) {
57 for (
i = 0;
i < len;
i++) {
58 if ((*src ==
'\0') || (*src == sentinel)) {
76 while (*
a && *
b && *
b != sentinel) {
77 char ca = *
a, cb = *
b;
79 if (ca >=
'a' && ca <=
'z')
81 if (cb >=
'a' && cb <=
'z')
122 while (*token && *
buf) {
123 char ct = *token, cb = *
buf;
125 if (ct >=
'a' && ct <=
'z')
127 if (cb >=
'a' && cb <=
'z')
142static size_t __kmp_round4k(
size_t size) {
143 size_t _4k = 4 * 1024;
144 if (
size & (_4k - 1)) {
160 while (*
a && *
b && *
b != sentinel) {
161 char ca = *
a, cb = *
b;
163 if (ca >=
'a' && ca <=
'z')
165 if (cb >=
'a' && cb <=
'z')
168 return (
int)(
unsigned char)*
a - (
int)(
unsigned char)*
b;
172 return *
a ? (*
b && *
b != sentinel)
173 ? (
int)(
unsigned char)*
a - (
int)(
unsigned char)*
b
175 : (*
b && *
b != sentinel) ? -1
231 const char *
begin = str;
272 *
val = __kmp_round4k(*
val);
277 size_t size_min,
size_t size_max,
278 int *is_specified,
size_t *out,
280 char const *msg = NULL;
282 size_min = __kmp_round4k(size_min);
283 size_max = __kmp_round4k(size_max);
286 if (is_specified != NULL) {
291 if (*out > size_max) {
294 }
else if (*out < size_min) {
299 size_t round4k = __kmp_round4k(*out);
300 if (*out != round4k) {
309 if (*out < size_min) {
311 }
else if (*out > size_max) {
341 char const *msg = NULL;
345 if (uint < (
unsigned int)
min) {
348 }
else if (uint > (
unsigned int)max) {
355 if (uint < (
unsigned int)
min) {
357 }
else if (uint > (
unsigned int)max) {
373#if KMP_DEBUG_ADAPTIVE_LOCKS
374static void __kmp_stg_parse_file(
char const *
name,
char const *
value,
375 const char *suffix,
char **out) {
380 t = (
char *)strrchr(
value,
'.');
390static char *par_range_to_print = NULL;
392static void __kmp_stg_parse_par_range(
char const *
name,
char const *
value,
393 int *out_range,
char *out_routine,
394 char *out_file,
int *out_lb,
396 const char *par_range_value;
400 __kmp_par_range = +1;
401 __kmp_par_range_lb = 0;
402 __kmp_par_range_ub = INT_MAX;
409 par_range_value = strchr(
value,
'=') + 1;
410 if (!par_range_value)
411 goto par_range_error;
412 value = par_range_value;
413 len = __kmp_readstr_with_sentinel(out_routine,
value,
414 KMP_PAR_RANGE_ROUTINE_LEN - 1,
',');
416 goto par_range_error;
425 par_range_value = strchr(
value,
'=') + 1;
426 if (!par_range_value)
427 goto par_range_error;
428 value = par_range_value;
429 len = __kmp_readstr_with_sentinel(out_file,
value,
430 KMP_PAR_RANGE_FILENAME_LEN - 1,
',');
432 goto par_range_error;
442 par_range_value = strchr(
value,
'=') + 1;
443 if (!par_range_value)
444 goto par_range_error;
445 value = par_range_value;
447 goto par_range_error;
457 par_range_value = strchr(
value,
'=') + 1;
458 if (!par_range_value)
459 goto par_range_error;
460 value = par_range_value;
462 goto par_range_error;
484 if (nth < (4 * req_nproc))
485 nth = (4 * req_nproc);
502 int all_threads_specified) {
505 if (all_threads_specified)
509 if (nth < (4 * req_nproc))
510 nth = (4 * req_nproc);
583 if (strcmp(
name,
"KMP_ALL_THREADS") == 0) {
679 const int ms_mult = 1000;
685 if ((*
buf >=
'0') && (*
buf <=
'9')) {
702 multiplier = ms_mult;
712 multiplier = ms_mult;
718 multiplier = ms_mult;
750 __kmp_monitor_wakeups =
794#if KMP_ARCH_X86 || KMP_ARCH_X86_64
796static void __kmp_stg_parse_inherit_fp_control(
char const *
name,
801static void __kmp_stg_print_inherit_fp_control(
kmp_str_buf_t *buffer,
878 char const *
value = NULL;
899 value =
"turnaround";
902 value =
"throughput";
919static void __kmp_stg_parse_monitor_stacksize(
char const *
name,
922 NULL, &__kmp_monitor_stksize, 1);
925static void __kmp_stg_print_monitor_stacksize(
kmp_str_buf_t *buffer,
928 if (__kmp_monitor_stksize > 0)
935 if (__kmp_monitor_stksize > 0) {
1079#if KMP_HWLOC_ENABLED
1081 __kmp_affinity_top_method = affinity_top_method_hwloc;
1125 const char *next = env;
1126 const char *scan = next;
1129 int prev_comma =
FALSE;
1135 if (*next ==
'\0') {
1139 if (((*next <
'0') || (*next >
'9')) && (*next !=
',')) {
1146 if (total == 0 || prev_comma) {
1154 if (*next >=
'0' && *next <=
'9') {
1158 const char *tmp = next;
1160 if ((*next ==
' ' || *next ==
'\t') && (*tmp >=
'0' && *tmp <=
'9')) {
1174 if (!nth_array->
nth) {
1177 if (nth_array->
nth == NULL) {
1180 nth_array->
size = total * 2;
1182 if (nth_array->
size < total) {
1185 nth_array->
size *= 2;
1186 }
while (nth_array->
size < total);
1189 nth_array->
nth,
sizeof(
int) * nth_array->
size);
1190 if (nth_array->
nth == NULL) {
1195 nth_array->
used = total;
1203 if (*scan ==
'\0') {
1213 nth_array->
nth[
i++] = 0;
1215 }
else if (prev_comma) {
1217 nth_array->
nth[
i] = nth_array->
nth[
i - 1];
1226 if (*scan >=
'0' && *scan <=
'9') {
1228 const char *
buf = scan;
1229 char const *msg = NULL;
1247 nth_array->
nth[
i++] = num;
1276#if OMP_TASKGRAPH_EXPERIMENTAL
1277static void __kmp_stg_parse_max_tdgs(
char const *
name,
char const *
value,
1287static void __kmp_stg_parse_tdg_dot(
char const *
name,
char const *
value,
1333 (
"__kmp_stg_parse_use_hidden_helper: Disable hidden helper task on "
1334 "non-Linux platform although it is enabled by user explicitly.\n"));
1399 char const *msg = NULL;
1439 const char *scan = value_str.
get();
1458 const char *
value = NULL;
1462 value =
"MANDATORY";
1554#if KMP_HANDLE_SIGNALS
1556static void __kmp_stg_parse_handle_signals(
char const *
name,
char const *
value,
1561static void __kmp_stg_print_handle_signals(
kmp_str_buf_t *buffer,
1573#define KMP_STG_X_DEBUG(x) \
1574 static void __kmp_stg_parse_##x##_debug(char const *name, char const *value, \
1576 __kmp_stg_parse_int(name, value, 0, INT_MAX, &kmp_##x##_debug); \
1578 static void __kmp_stg_print_##x##_debug(kmp_str_buf_t *buffer, \
1579 char const *name, void *data) { \
1580 __kmp_stg_print_int(buffer, name, kmp_##x##_debug); \
1590#undef KMP_STG_X_DEBUG
1592static void __kmp_stg_parse_debug(
char const *
name,
char const *
value,
1596 if (kmp_a_debug < debug) {
1597 kmp_a_debug = debug;
1599 if (kmp_b_debug < debug) {
1600 kmp_b_debug = debug;
1602 if (kmp_c_debug < debug) {
1603 kmp_c_debug = debug;
1605 if (kmp_d_debug < debug) {
1606 kmp_d_debug = debug;
1608 if (kmp_e_debug < debug) {
1609 kmp_e_debug = debug;
1611 if (kmp_f_debug < debug) {
1612 kmp_f_debug = debug;
1616static void __kmp_stg_parse_debug_buf(
char const *
name,
char const *
value,
1641static void __kmp_stg_parse_debug_buf_atomic(
char const *
name,
1646static void __kmp_stg_print_debug_buf_atomic(
kmp_str_buf_t *buffer,
1651static void __kmp_stg_parse_debug_buf_chars(
char const *
name,
char const *
value,
1657static void __kmp_stg_print_debug_buf_chars(
kmp_str_buf_t *buffer,
1662static void __kmp_stg_parse_debug_buf_lines(
char const *
name,
char const *
value,
1668static void __kmp_stg_print_debug_buf_lines(
kmp_str_buf_t *buffer,
1673static void __kmp_stg_parse_diag(
char const *
name,
char const *
value,
1717 if ((strcmp(var,
name) == 0) && (
value != 0)) {
1724 if (comma == NULL) {
1732 KMP_MSG(BarrReleaseValueInvalid,
name, comma + 1),
1755 if (strcmp(var,
name) == 0) {
1781 static int dist_req = 0, non_dist_req = 0;
1782 static bool warn = 1;
1786 if ((strcmp(var,
name) == 0) && (
value != 0)) {
1788 char *comma =
CCAST(
char *, strchr(
value,
','));
1810 if (comma != NULL) {
1824 KMP_MSG(BarrReleaseValueInvalid,
name, comma + 1),
1832 if (dist_req != 0) {
1834 if ((non_dist_req != 0) && warn) {
1853 if (strcmp(var,
name) == 0) {
1891#if KMP_AFFINITY_SUPPORTED
1893 K_DIAG(1, (
"__kmp_cpuinfo_file == %s\n", __kmp_cpuinfo_file));
1899#if KMP_AFFINITY_SUPPORTED
1905 if (__kmp_cpuinfo_file) {
1925 if (reduction->
force) {
1945 K_DIAG(1, (
"__kmp_force_reduction_method == %d\n",
1953 if (reduction->
force) {
2032static inline const char *
2038#if KMP_ARCH_X86 || KMP_ARCH_X86_64
2039 case KMP_HW_CORE_TYPE_ATOM:
2040 return "intel_atom";
2041 case KMP_HW_CORE_TYPE_CORE:
2042 return "intel_core";
2045 KMP_ASSERT2(
false,
"Unhandled kmp_hw_core_type_t enumeration");
2049#if KMP_AFFINITY_SUPPORTED
2051static int __kmp_parse_affinity_proc_id_list(
const char *var,
const char *env,
2052 const char **nextEnv,
2054 const char *scan = env;
2055 const char *next = scan;
2061 int start,
end, stride;
2065 if (*next ==
'\0') {
2076 if ((*next <
'0') || (*next >
'9')) {
2100 if ((*next <
'0') || (*next >
'9')) {
2120 if ((*next <
'0') || (*next >
'9')) {
2150 if ((*next <
'0') || (*next >
'9')) {
2173 if ((*next <
'0') || (*next >
'9')) {
2199 if ((
end - start) / stride > 65536) {
2217 ptrdiff_t len = next - env;
2219 KMP_MEMCPY_S(retlist, (len + 1) *
sizeof(
char), env, len *
sizeof(
char));
2220 retlist[len] =
'\0';
2221 *proclist = retlist;
2230static void __kmp_parse_affinity_env(
char const *
name,
char const *
value,
2231 kmp_affinity_t *out_affinity) {
2232 char *buffer = NULL;
2270#define EMIT_WARN(skip, errlist) \
2274 SKIP_TO(next, ','); \
2278 KMP_WARNING errlist; \
2287#define _set_param(_guard, _var, _val) \
2289 if (_guard == 0) { \
2292 EMIT_WARN(FALSE, (AffParamDefined, name, start)); \
2297#define set_type(val) _set_param(type, out_affinity->type, val)
2298#define set_verbose(val) _set_param(verbose, out_affinity->flags.verbose, val)
2299#define set_warnings(val) \
2300 _set_param(warnings, out_affinity->flags.warnings, val)
2301#define set_respect(val) _set_param(respect, out_affinity->flags.respect, val)
2302#define set_dups(val) _set_param(dups, out_affinity->flags.dups, val)
2303#define set_proclist(val) _set_param(proclist, out_affinity->proclist, val)
2304#define set_reset(val) _set_param(reset, out_affinity->flags.reset, val)
2306#define set_gran(val, levels) \
2309 out_affinity->gran = val; \
2310 out_affinity->gran_levels = levels; \
2312 EMIT_WARN(FALSE, (AffParamDefined, name, start)); \
2320 while (*
buf !=
'\0') {
2324 set_type(affinity_none);
2328 set_type(affinity_scatter);
2332 set_type(affinity_compact);
2336 set_type(affinity_logical);
2340 set_type(affinity_physical);
2344 set_type(affinity_explicit);
2348 set_type(affinity_balanced);
2352 set_type(affinity_disabled);
2365 CCAST(
const char **, &next))) {
2366 set_warnings(
FALSE);
2381 CCAST(
const char **, &next)) ||
2386 CCAST(
const char **, &next)) ||
2391 CCAST(
const char **, &next)) ||
2395 EMIT_WARN(
TRUE, (AffInvalidParam,
name, start));
2407 out_affinity->flags.core_types_gran = 1;
2411 CCAST(
const char **, &next)) ||
2413 CCAST(
const char **, &next))) {
2415 out_affinity->flags.core_effs_gran = 1;
2438 CCAST(
const char **, &next))) {
2446#if KMP_GROUP_AFFINITY
2452 }
else if ((*
buf >=
'0') && (*
buf <=
'9')) {
2462 EMIT_WARN(
TRUE, (AffInvalidParam,
name, start));
2467 char *temp_proclist;
2471 EMIT_WARN(
TRUE, (AffInvalidParam,
name, start));
2477 EMIT_WARN(
TRUE, (AffInvalidParam,
name, start));
2482 if (!__kmp_parse_affinity_proc_id_list(
2483 name,
buf,
CCAST(
const char **, &next), &temp_proclist)) {
2495 EMIT_WARN(
TRUE, (AffInvalidParam,
name, start));
2499 set_proclist(temp_proclist);
2500 }
else if ((*
buf >=
'0') && (*
buf <=
'9')) {
2515 EMIT_WARN(
TRUE, (AffInvalidParam,
name, start));
2523 }
else if (*next !=
'\0') {
2524 const char *temp = next;
2525 EMIT_WARN(
TRUE, (ParseExtraCharsWarn,
name, temp));
2537#undef set_granularity
2545 out_affinity->type = affinity_explicit;
2547 }
else if (out_affinity->type != affinity_explicit) {
2551 out_affinity->proclist = NULL;
2554 switch (out_affinity->type) {
2555 case affinity_logical:
2556 case affinity_physical: {
2558 out_affinity->offset = number[0];
2564 case affinity_balanced: {
2566 out_affinity->compact = number[0];
2569 out_affinity->offset = number[1];
2573 int verbose = out_affinity->flags.verbose;
2574 int warnings = out_affinity->flags.warnings;
2575#if KMP_MIC_SUPPORTED
2576 if (__kmp_mic_type != non_mic) {
2577 if (verbose || warnings) {
2578 KMP_WARNING(AffGranUsing, out_affinity->env_var,
"fine");
2584 if (verbose || warnings) {
2585 KMP_WARNING(AffGranUsing, out_affinity->env_var,
"core");
2591 case affinity_scatter:
2592 case affinity_compact: {
2594 out_affinity->compact = number[0];
2597 out_affinity->offset = number[1];
2600 case affinity_explicit: {
2601 if (out_affinity->proclist == NULL) {
2603 out_affinity->type = affinity_none;
2609 case affinity_none: {
2614 case affinity_disabled: {
2619 case affinity_default: {
2630static void __kmp_stg_parse_affinity(
char const *
name,
char const *
value,
2640 __kmp_parse_affinity_env(
name,
value, &__kmp_affinity);
2643static void __kmp_stg_parse_hh_affinity(
char const *
name,
char const *
value,
2645 __kmp_parse_affinity_env(
name,
value, &__kmp_hh_affinity);
2647 if (__kmp_hh_affinity.flags.reset) {
2650 if (__kmp_hh_affinity.flags.respect != affinity_respect_mask_default) {
2656 const kmp_affinity_t &affinity) {
2657 bool is_hh_affinity = (&affinity == &__kmp_hh_affinity);
2663 if (affinity.flags.verbose) {
2668 if (affinity.flags.warnings) {
2673 if (KMP_AFFINITY_CAPABLE()) {
2676 if (!is_hh_affinity) {
2677 if (affinity.flags.respect) {
2682 if (affinity.flags.reset) {
2689 if (affinity.flags.core_types_gran)
2691 else if (affinity.flags.core_effs_gran) {
2698 if (!KMP_AFFINITY_CAPABLE()) {
2701 int compact = affinity.compact;
2702 int offset = affinity.offset;
2703 switch (affinity.type) {
2707 case affinity_physical:
2710 case affinity_logical:
2713 case affinity_compact:
2716 case affinity_scatter:
2719 case affinity_explicit:
2723 case affinity_balanced:
2726 case affinity_disabled:
2729 case affinity_default:
2742 __kmp_print_affinity_env(buffer,
name, __kmp_affinity);
2746 __kmp_print_affinity_env(buffer,
name, __kmp_hh_affinity);
2749#ifdef KMP_GOMP_COMPAT
2751static void __kmp_stg_parse_gomp_cpu_affinity(
char const *
name,
2753 const char *next = NULL;
2754 char *temp_proclist;
2771 if (__kmp_parse_affinity_proc_id_list(
name,
value, &next, &temp_proclist)) {
2773 if (*next ==
'\0') {
2775 __kmp_affinity.proclist = temp_proclist;
2776 __kmp_affinity.type = affinity_explicit;
2781 if (temp_proclist != NULL) {
2787 __kmp_affinity.type = affinity_none;
2815static int __kmp_parse_subplace_list(
const char *var,
const char **scan) {
2819 int start,
count, stride;
2825 if ((**scan <
'0') || (**scan >
'9')) {
2836 if (**scan ==
'}') {
2839 if (**scan ==
',') {
2843 if (**scan !=
':') {
2850 if ((**scan <
'0') || (**scan >
'9')) {
2861 if (**scan ==
'}') {
2864 if (**scan ==
',') {
2868 if (**scan !=
':') {
2877 if (**scan ==
'+') {
2881 if (**scan ==
'-') {
2889 if ((**scan <
'0') || (**scan >
'9')) {
2901 if (**scan ==
'}') {
2904 if (**scan ==
',') {
2914static int __kmp_parse_place(
const char *var,
const char **scan) {
2919 if (**scan ==
'{') {
2921 if (!__kmp_parse_subplace_list(var, scan)) {
2924 if (**scan !=
'}') {
2928 }
else if (**scan ==
'!') {
2930 return __kmp_parse_place(var, scan);
2931 }
else if ((**scan >=
'0') && (**scan <=
'9')) {
2944static int __kmp_parse_place_list(
const char *var,
const char *env,
2945 char **place_list) {
2946 const char *scan = env;
2947 const char *next = scan;
2952 if (!__kmp_parse_place(var, &scan)) {
2958 if (*scan ==
'\0') {
2972 if ((*scan <
'0') || (*scan >
'9')) {
2983 if (*scan ==
'\0') {
3011 if ((*scan <
'0') || (*scan >
'9')) {
3023 if (*scan ==
'\0') {
3035 ptrdiff_t len = scan - env;
3037 KMP_MEMCPY_S(retlist, (len + 1) *
sizeof(
char), env, len *
sizeof(
char));
3038 retlist[len] =
'\0';
3039 *place_list = retlist;
3044static inline void __kmp_places_set(
enum affinity_type
type,
kmp_hw_t kind) {
3045 __kmp_affinity.type =
type;
3046 __kmp_affinity.gran = kind;
3047 __kmp_affinity.flags.dups =
FALSE;
3048 __kmp_affinity.flags.omp_places =
TRUE;
3051static void __kmp_places_syntax_error_fallback(
char const *
name,
3055 __kmp_places_set(affinity_compact, kind);
3060static void __kmp_stg_parse_places(
char const *
name,
char const *
value,
3062 struct kmp_place_t {
3068 const char *scan =
value;
3069 const char *next = scan;
3084 for (
size_t i = 0;
i <
sizeof(std_places) /
sizeof(std_places[0]); ++
i) {
3085 const kmp_place_t &place = std_places[
i];
3088 __kmp_places_set(affinity_compact, place.type);
3095 __kmp_places_syntax_error_fallback(
name, place.type);
3100#if KMP_ARCH_X86 || KMP_ARCH_X86_64
3102 __kmp_affinity.core_attr_gran.core_type = KMP_HW_CORE_TYPE_CORE;
3103 __kmp_affinity.core_attr_gran.valid = 1;
3106 __kmp_affinity.core_attr_gran.core_type = KMP_HW_CORE_TYPE_ATOM;
3107 __kmp_affinity.core_attr_gran.valid = 1;
3113 if (!isdigit(*next)) {
3114 __kmp_places_syntax_error_fallback(
name, place.type);
3121 __kmp_places_syntax_error_fallback(
name, place.type);
3126 __kmp_affinity.core_attr_gran.core_eff = eff;
3127 __kmp_affinity.core_attr_gran.valid = 1;
3130 if (!__kmp_affinity.core_attr_gran.valid) {
3131 __kmp_places_syntax_error_fallback(
name, place.type);
3147 __kmp_places_set(affinity_compact,
type);
3157 if (*scan !=
'\0') {
3161 __kmp_affinity.flags.core_types_gran = 1;
3166 if (*scan !=
'\0') {
3170 __kmp_affinity.flags.core_effs_gran = 1;
3176 if (__kmp_affinity.proclist != NULL) {
3178 __kmp_affinity.proclist = NULL;
3180 if (__kmp_parse_place_list(
name,
value, &__kmp_affinity.proclist)) {
3192 kmp_hw_t gran = __kmp_affinity.gran;
3194 gran = __kmp_affinity.gran;
3204 if (*scan ==
'\0') {
3210 __kmp_places_syntax_error_fallback(
name, gran);
3224 __kmp_places_syntax_error_fallback(
name, gran);
3230 if (*scan !=
'\0') {
3238 enum affinity_type
type = __kmp_affinity.type;
3239 const char *proclist = __kmp_affinity.proclist;
3240 kmp_hw_t gran = __kmp_affinity.gran;
3251 }
else if (
type == affinity_explicit) {
3252 if (proclist != NULL) {
3257 }
else if (
type == affinity_compact) {
3259 if (__kmp_affinity.num_masks > 0) {
3260 num = __kmp_affinity.num_masks;
3268 if (__kmp_affinity.flags.core_types_gran) {
3272 if (__kmp_affinity.flags.core_effs_gran) {
3282 if (__kmp_affinity.core_attr_gran.valid) {
3285 int eff = __kmp_affinity.core_attr_gran.core_eff;
3306static void __kmp_stg_parse_topology_method(
char const *
name,
char const *
value,
3309 __kmp_affinity_top_method = affinity_top_method_all;
3311#if KMP_HWLOC_ENABLED
3313 __kmp_affinity_top_method = affinity_top_method_hwloc;
3316#if KMP_ARCH_X86 || KMP_ARCH_X86_64
3326 __kmp_affinity_top_method = affinity_top_method_x2apicid_1f;
3349 __kmp_affinity_top_method = affinity_top_method_x2apicid;
3372 __kmp_affinity_top_method = affinity_top_method_apicid;
3377 __kmp_affinity_top_method = affinity_top_method_cpuinfo;
3379#if KMP_GROUP_AFFINITY
3382 __kmp_affinity_top_method = affinity_top_method_group;
3386 __kmp_affinity_top_method = affinity_top_method_flat;
3392static void __kmp_stg_print_topology_method(
kmp_str_buf_t *buffer,
3394 char const *
value = NULL;
3396 switch (__kmp_affinity_top_method) {
3397 case affinity_top_method_default:
3401 case affinity_top_method_all:
3405#if KMP_ARCH_X86 || KMP_ARCH_X86_64
3406 case affinity_top_method_x2apicid_1f:
3407 value =
"x2APIC id leaf 0x1f";
3410 case affinity_top_method_x2apicid:
3411 value =
"x2APIC id leaf 0xb";
3414 case affinity_top_method_apicid:
3419#if KMP_HWLOC_ENABLED
3420 case affinity_top_method_hwloc:
3425 case affinity_top_method_cpuinfo:
3429#if KMP_GROUP_AFFINITY
3430 case affinity_top_method_group:
3435 case affinity_top_method_flat:
3440 if (
value != NULL) {
3446struct kmp_proc_bind_info_t {
3450static kmp_proc_bind_info_t proc_bind_table[] = {
3457static void __kmp_stg_parse_teams_proc_bind(
char const *
name,
char const *
value,
3462 for (
size_t i = 0;
i <
sizeof(proc_bind_table) /
sizeof(proc_bind_table[0]);
3474static void __kmp_stg_print_teams_proc_bind(
kmp_str_buf_t *buffer,
3477 for (
size_t i = 0;
i <
sizeof(proc_bind_table) /
sizeof(proc_bind_table[0]);
3480 value = proc_bind_table[
i].name;
3513#if KMP_AFFINITY_SUPPORTED
3514 __kmp_affinity.type = affinity_disabled;
3521#if KMP_AFFINITY_SUPPORTED
3522 __kmp_affinity.type = affinity_none;
3535 for (scan =
buf; *scan !=
'\0'; scan++) {
3614 for (
i = 0;
i < nelem;
i++) {
3644 if (
i < nelem - 1) {
3698 const char *next, *scan, *start;
3702 bool is_memspace =
false;
3703 int ntraits = 0,
count = 0;
3707 const char *delim = strchr(
buf,
':');
3708 const char *predef_mem_space = strstr(
buf,
"mem_space");
3710 bool is_memalloc = (!predef_mem_space && !delim) ?
true :
false;
3715 for (scan =
buf; *scan !=
'\0'; scan++) {
3724#define IS_POWER_OF_TWO(n) (((n) & ((n)-1)) == 0)
3726#define GET_NEXT(sentinel) \
3729 if (*next == sentinel) \
3735#define SKIP_PAIR(key) \
3737 char const str_delimiter[] = {',', 0}; \
3738 char *value = __kmp_str_token(CCAST(char *, scan), str_delimiter, \
3739 CCAST(char **, &next)); \
3740 KMP_WARNING(StgInvalidValue, key, value); \
3748 char const str_delimiter[] = {'=', 0}; \
3749 key = __kmp_str_token(CCAST(char *, start), str_delimiter, \
3750 CCAST(char **, &next)); \
3755 while (*next !=
'\0') {
3768 KMP_WARNING(OmpNoAllocator,
"omp_high_bw_mem_alloc");
3781 KMP_WARNING(OmpNoAllocator,
"omp_large_cap_mem_alloc");
3797 KMP_WARNING(OmpNoAllocator,
"omp_const_mem_alloc");
3805 KMP_WARNING(OmpNoAllocator,
"omp_low_lat_mem_alloc");
3813 KMP_WARNING(OmpNoAllocator,
"omp_cgroup_mem_alloc");
3821 KMP_WARNING(OmpNoAllocator,
"omp_pteam_mem_alloc");
3829 KMP_WARNING(OmpNoAllocator,
"omp_thread_mem_alloc");
3843 if (next ==
buf || *next !=
'\0') {
3850 if (
count == ntraits)
3873 if (next ==
buf || *next !=
'\0') {
3902 if (!isdigit(*next)) {
3934 if (!isdigit(*next)) {
3999 if (
count == ntraits)
4050#ifdef USE_LOAD_BALANCE
4078#ifdef USE_LOAD_BALANCE
4079 else if (
__kmp_global.g.g_dynamic_mode == dynamic_load_balance) {
4093#ifdef USE_LOAD_BALANCE
4098static void __kmp_stg_parse_ld_balance_interval(
char const *
name,
4100 double interval = __kmp_convert_to_double(
value);
4101 if (interval >= 0) {
4102 __kmp_load_balance_interval = interval;
4108static void __kmp_stg_print_ld_balance_interval(
kmp_str_buf_t *buffer,
4112 __kmp_load_balance_interval);
4140 if (
value != NULL) {
4145 const char *semicolon;
4151 semicolon = strchr(
value,
';');
4153 const char *comma = strchr(
value,
',');
4184 }
while ((
value = semicolon ? semicolon + 1 : NULL));
4213#if KMP_USE_HIER_SCHED
4226 bool parse_hier =
false) {
4228 const char *ptr =
value;
4235 while (*delim !=
',' && *delim !=
':' && *delim !=
'\0')
4237#if KMP_USE_HIER_SCHED
4240 if (*delim ==
',') {
4258 while (*delim !=
',' && *delim !=
':' && *delim !=
'\0')
4265 if (*delim ==
':') {
4269 while (*delim !=
',' && *delim !=
':' && *delim !=
'\0')
4274 while (*delim !=
',' && *delim !=
':' && *delim !=
'\0')
4276 }
else if (!parse_hier) {
4295#if KMP_STATIC_STEAL_ENABLED
4310 if (*delim ==
',') {
4313 if (!isdigit(*ptr)) {
4354#if KMP_USE_HIER_SCHED
4369 const char *ptr =
value;
4377#if KMP_USE_HIER_SCHED
4382 while (*ptr ==
' ' || *ptr ==
'\t' || *ptr ==
':')
4393#if KMP_USE_HIER_SCHED
4440 KMP_ASSERT2(
false,
"Unhandled sched_type enumeration");
4469 KMP_ASSERT2(
false,
"Unhandled sched_type enumeration");
4476#if KMP_USE_HIER_SCHED
4479static void __kmp_stg_parse_kmp_hand_thread(
char const *
name,
char const *
value,
4484static void __kmp_stg_print_kmp_hand_thread(
kmp_str_buf_t *buffer,
4511#ifdef KMP_GOMP_COMPAT
4554 const char *
value = NULL;
4562 if (
value != NULL) {
4574static void __kmp_stg_parse_itt_prepare_delay(
char const *
name,
4580 __kmp_itt_prepare_delay =
delay;
4583static void __kmp_stg_print_itt_prepare_delay(
kmp_str_buf_t *buffer,
4613static void __kmp_stg_parse_par_range_env(
char const *
name,
char const *
value,
4615 __kmp_stg_parse_par_range(
name,
value, &__kmp_par_range,
4616 __kmp_par_range_routine, __kmp_par_range_filename,
4617 &__kmp_par_range_lb, &__kmp_par_range_ub);
4620static void __kmp_stg_print_par_range_env(
kmp_str_buf_t *buffer,
4622 if (__kmp_par_range != 0) {
4642#ifdef KMP_TDATA_GTID
4681#if KMP_USE_DYNAMIC_LOCK
4682#define KMP_STORE_LOCK_SEQ(a) (__kmp_user_lock_seq = lockseq_##a)
4684#define KMP_STORE_LOCK_SEQ(a)
4710 if (__kmp_futex_determine_capable()) {
4733#if KMP_USE_ADAPTIVE_LOCKS
4735 if (__kmp_cpuinfo.flags.rtm) {
4745#if KMP_USE_DYNAMIC_LOCK && KMP_USE_TSX
4747 if (__kmp_cpuinfo.flags.rtm) {
4756 if (__kmp_cpuinfo.flags.rtm) {
4776 const char *
value = NULL;
4793#if KMP_USE_DYNAMIC_LOCK && KMP_USE_TSX
4794 case lk_rtm_queuing:
4795 value =
"rtm_queuing";
4818#if KMP_USE_ADAPTIVE_LOCKS
4825 if (
value != NULL) {
4837 const char *next =
value;
4840 int prev_comma =
FALSE;
4848 for (
i = 0;
i < 3;
i++) {
4851 if (*next ==
'\0') {
4856 if (((*next <
'0' || *next >
'9') && *next !=
',') || total > 2) {
4863 if (total == 0 || prev_comma) {
4871 if (*next >=
'0' && *next <=
'9') {
4873 const char *
buf = next;
4874 char const *msg = NULL;
4879 const char *tmp = next;
4881 if ((*next ==
' ' || *next ==
'\t') && (*tmp >=
'0' && *tmp <=
'9')) {
4898 }
else if (total == 2) {
4922#if KMP_USE_ADAPTIVE_LOCKS
4929static void __kmp_stg_parse_adaptive_lock_props(
const char *
name,
4931 int max_retries = 0;
4932 int max_badness = 0;
4934 const char *next =
value;
4937 int prev_comma =
FALSE;
4943 for (
i = 0;
i < 3;
i++) {
4946 if (*next ==
'\0') {
4951 if (((*next <
'0' || *next >
'9') && *next !=
',') || total > 2) {
4958 if (total == 0 || prev_comma) {
4966 if (*next >=
'0' && *next <=
'9') {
4968 const char *
buf = next;
4969 char const *msg = NULL;
4974 const char *tmp = next;
4976 if ((*next ==
' ' || *next ==
'\t') && (*tmp >=
'0' && *tmp <=
'9')) {
4993 }
else if (total == 2) {
5002 __kmp_adaptive_backoff_params.max_soft_retries = max_retries;
5003 __kmp_adaptive_backoff_params.max_badness = max_badness;
5006static void __kmp_stg_print_adaptive_lock_props(
kmp_str_buf_t *buffer,
5014 __kmp_adaptive_backoff_params.max_soft_retries,
5015 __kmp_adaptive_backoff_params.max_badness);
5018#if KMP_DEBUG_ADAPTIVE_LOCKS
5020static void __kmp_stg_parse_speculative_statsfile(
char const *
name,
5024 CCAST(
char **, &__kmp_speculative_statsfile));
5027static void __kmp_stg_print_speculative_statsfile(
kmp_str_buf_t *buffer,
5050 size_t num_possible) {
5051 for (
size_t i = 0;
i < num_possible; ++
i) {
5067 size_t index, num_possible, token_length;
5074 while (isalnum(*
end) || *
end ==
'_') {
5088 while (num_possible > 1 && index < token_length) {
5089 size_t n = num_possible;
5090 char token_char = (
char)toupper(token[index]);
5091 for (
size_t i = 0;
i < n; ++
i) {
5096 char c = (
char)toupper(
s[index]);
5098 if (c != token_char) {
5106 for (
size_t i = 0;
i < n; ++
i) {
5109 possible[
i] = possible[start];
5110 possible[start] = temp;
5120 if (num_possible > 1)
5122 if (num_possible == 1)
5129#define MAX_T_LEVEL KMP_HW_LAST
5130#define MAX_STR_LEN 512
5136 if (strcmp(
name,
"KMP_PLACE_THREADS") == 0) {
5144 char const *digits =
"0123456789";
5148 bool absolute =
false;
5151 while (*pos && mlen) {
5153 if (len == 0 && *pos ==
':') {
5156 input[len] = (
char)(toupper(*pos));
5157 if (input[len] ==
'X')
5159 if (input[len] ==
'O' && strchr(digits, *(pos + 1)))
5167 if (len == 0 || mlen == 0) {
5173 components[
level++] = pos;
5174 while ((pos = strchr(pos,
','))) {
5178 components[
level++] = ++pos;
5190 pos = components[
i];
5191 core_components[core_level++] = pos;
5192 while ((pos = strchr(pos,
'&'))) {
5196 core_components[core_level++] = ++pos;
5199 for (
int j = 0;
j < core_level; ++
j) {
5206 if (isdigit(*core_components[
j])) {
5207 num = atoi(core_components[
j]);
5211 pos = core_components[
j] + strspn(core_components[
j], digits);
5212 }
else if (*core_components[
j] ==
'*') {
5214 pos = core_components[
j] + 1;
5217 pos = core_components[
j];
5220 offset_ptr = strchr(core_components[
j],
'@');
5221 attr_ptr = strchr(core_components[
j],
':');
5224 offset = atoi(offset_ptr + 1);
5230#if KMP_ARCH_X86 || KMP_ARCH_X86_64
5238 const char *number = attr_ptr + 1;
5240 while (isalpha(*number))
5242 if (!isdigit(*number)) {
5245 int efficiency = atoi(number);
5290 for (
int i = 0;
i < depth; ++
i) {
5294 for (
int j = 0;
j < item.num_attrs; ++
j) {
5297 if (item.attr[
j].is_core_type_valid())
5301 if (item.attr[
j].is_core_eff_valid())
5315static void __kmp_stg_parse_forkjoin_frames(
char const *
name,
char const *
value,
5320static void __kmp_stg_print_forkjoin_frames(
kmp_str_buf_t *buffer,
5328static void __kmp_stg_parse_forkjoin_frames_mode(
char const *
name,
5334static void __kmp_stg_print_forkjoin_frames_mode(
kmp_str_buf_t *buffer,
5353#if KMP_HAVE_MWAIT || KMP_HAVE_UMWAIT
5357static void __kmp_stg_parse_user_level_mwait(
char const *
name,
5362static void __kmp_stg_print_user_level_mwait(
kmp_str_buf_t *buffer,
5370static void __kmp_stg_parse_mwait_hints(
char const *
name,
char const *
value,
5387static void __kmp_stg_parse_tpause(
char const *
name,
char const *
value,
5390 if (__kmp_tpause_state != 0) {
5392 if (__kmp_tpause_state == 2)
5393 __kmp_tpause_hint = 0;
5441static void __kmp_stg_parse_omp_tool(
char const *
name,
char const *
value,
5452 __kmp_tool ?
"enabled" :
"disabled");
5456char *__kmp_tool_libraries = NULL;
5458static void __kmp_stg_parse_omp_tool_libraries(
char const *
name,
5463static void __kmp_stg_print_omp_tool_libraries(
kmp_str_buf_t *buffer,
5465 if (__kmp_tool_libraries)
5477char *__kmp_tool_verbose_init = NULL;
5479static void __kmp_stg_parse_omp_tool_verbose_init(
char const *
name,
5485static void __kmp_stg_print_omp_tool_verbose_init(
kmp_str_buf_t *buffer,
5488 if (__kmp_tool_verbose_init)
5518 {
"KMP_MONITOR_STACKSIZE", __kmp_stg_parse_monitor_stacksize,
5519 __kmp_stg_print_monitor_stacksize, NULL, 0, 0},
5573#if KMP_HANDLE_SIGNALS
5574 {
"KMP_HANDLE_SIGNALS", __kmp_stg_parse_handle_signals,
5575 __kmp_stg_print_handle_signals, NULL, 0, 0},
5578#if KMP_ARCH_X86 || KMP_ARCH_X86_64
5579 {
"KMP_INHERIT_FP_CONTROL", __kmp_stg_parse_inherit_fp_control,
5580 __kmp_stg_print_inherit_fp_control, NULL, 0, 0},
5583#ifdef KMP_GOMP_COMPAT
5588 {
"KMP_A_DEBUG", __kmp_stg_parse_a_debug, __kmp_stg_print_a_debug, NULL, 0,
5590 {
"KMP_B_DEBUG", __kmp_stg_parse_b_debug, __kmp_stg_print_b_debug, NULL, 0,
5592 {
"KMP_C_DEBUG", __kmp_stg_parse_c_debug, __kmp_stg_print_c_debug, NULL, 0,
5594 {
"KMP_D_DEBUG", __kmp_stg_parse_d_debug, __kmp_stg_print_d_debug, NULL, 0,
5596 {
"KMP_E_DEBUG", __kmp_stg_parse_e_debug, __kmp_stg_print_e_debug, NULL, 0,
5598 {
"KMP_F_DEBUG", __kmp_stg_parse_f_debug, __kmp_stg_print_f_debug, NULL, 0,
5600 {
"KMP_DEBUG", __kmp_stg_parse_debug, NULL, NULL, 0, 0},
5601 {
"KMP_DEBUG_BUF", __kmp_stg_parse_debug_buf, __kmp_stg_print_debug_buf,
5603 {
"KMP_DEBUG_BUF_ATOMIC", __kmp_stg_parse_debug_buf_atomic,
5604 __kmp_stg_print_debug_buf_atomic, NULL, 0, 0},
5605 {
"KMP_DEBUG_BUF_CHARS", __kmp_stg_parse_debug_buf_chars,
5606 __kmp_stg_print_debug_buf_chars, NULL, 0, 0},
5607 {
"KMP_DEBUG_BUF_LINES", __kmp_stg_parse_debug_buf_lines,
5608 __kmp_stg_print_debug_buf_lines, NULL, 0, 0},
5609 {
"KMP_DIAG", __kmp_stg_parse_diag, __kmp_stg_print_diag, NULL, 0, 0},
5611 {
"KMP_PAR_RANGE", __kmp_stg_parse_par_range_env,
5612 __kmp_stg_print_par_range_env, NULL, 0, 0},
5626#if KMP_FAST_REDUCTION_BARRIER
5645 {
"KMP_FOREIGN_THREADS_THREADPRIVATE",
5649#if KMP_AFFINITY_SUPPORTED
5650 {
"KMP_AFFINITY", __kmp_stg_parse_affinity, __kmp_stg_print_affinity, NULL,
5652 {
"KMP_HIDDEN_HELPER_AFFINITY", __kmp_stg_parse_hh_affinity,
5653 __kmp_stg_print_hh_affinity, NULL, 0, 0},
5654#ifdef KMP_GOMP_COMPAT
5655 {
"GOMP_CPU_AFFINITY", __kmp_stg_parse_gomp_cpu_affinity, NULL,
5660 {
"KMP_TEAMS_PROC_BIND", __kmp_stg_parse_teams_proc_bind,
5661 __kmp_stg_print_teams_proc_bind, NULL, 0, 0},
5662 {
"OMP_PLACES", __kmp_stg_parse_places, __kmp_stg_print_places, NULL, 0, 0},
5663 {
"KMP_TOPOLOGY_METHOD", __kmp_stg_parse_topology_method,
5664 __kmp_stg_print_topology_method, NULL, 0, 0},
5684#if KMP_USE_HIER_SCHED
5685 {
"KMP_DISP_HAND_THREAD", __kmp_stg_parse_kmp_hand_thread,
5686 __kmp_stg_print_kmp_hand_thread, NULL, 0, 0},
5688 {
"KMP_FORCE_MONOTONIC_DYNAMIC_SCHEDULE",
5696#if USE_ITT_BUILD && USE_ITT_NOTIFY
5697 {
"KMP_ITT_PREPARE_DELAY", __kmp_stg_parse_itt_prepare_delay,
5698 __kmp_stg_print_itt_prepare_delay, NULL, 0, 0},
5709#ifdef USE_LOAD_BALANCE
5710 {
"KMP_LOAD_BALANCE_INTERVAL", __kmp_stg_parse_ld_balance_interval,
5711 __kmp_stg_print_ld_balance_interval, NULL, 0, 0},
5720#if KMP_USE_ADAPTIVE_LOCKS
5721 {
"KMP_ADAPTIVE_LOCK_PROPS", __kmp_stg_parse_adaptive_lock_props,
5722 __kmp_stg_print_adaptive_lock_props, NULL, 0, 0},
5723#if KMP_DEBUG_ADAPTIVE_LOCKS
5724 {
"KMP_SPECULATIVE_STATSFILE", __kmp_stg_parse_speculative_statsfile,
5725 __kmp_stg_print_speculative_statsfile, NULL, 0, 0},
5733 {
"KMP_FORKJOIN_FRAMES", __kmp_stg_parse_forkjoin_frames,
5734 __kmp_stg_print_forkjoin_frames, NULL, 0, 0},
5735 {
"KMP_FORKJOIN_FRAMES_MODE", __kmp_stg_parse_forkjoin_frames_mode,
5736 __kmp_stg_print_forkjoin_frames_mode, NULL, 0, 0},
5749 {
"LIBOMP_NUM_HIDDEN_HELPER_THREADS",
5752#if OMP_TASKGRAPH_EXPERIMENTAL
5753 {
"KMP_MAX_TDGS", __kmp_stg_parse_max_tdgs, __kmp_std_print_max_tdgs, NULL,
5755 {
"KMP_TDG_DOT", __kmp_stg_parse_tdg_dot, __kmp_stg_print_tdg_dot, NULL, 0,
5760 {
"OMP_TOOL", __kmp_stg_parse_omp_tool, __kmp_stg_print_omp_tool, NULL, 0,
5762 {
"OMP_TOOL_LIBRARIES", __kmp_stg_parse_omp_tool_libraries,
5763 __kmp_stg_print_omp_tool_libraries, NULL, 0, 0},
5764 {
"OMP_TOOL_VERBOSE_INIT", __kmp_stg_parse_omp_tool_verbose_init,
5765 __kmp_stg_print_omp_tool_verbose_init, NULL, 0, 0},
5768#if KMP_HAVE_MWAIT || KMP_HAVE_UMWAIT
5769 {
"KMP_USER_LEVEL_MWAIT", __kmp_stg_parse_user_level_mwait,
5770 __kmp_stg_print_user_level_mwait, NULL, 0, 0},
5771 {
"KMP_MWAIT_HINTS", __kmp_stg_parse_mwait_hints,
5772 __kmp_stg_print_mwait_hints, NULL, 0, 0},
5776 {
"KMP_TPAUSE", __kmp_stg_parse_tpause, __kmp_stg_print_tpause, NULL, 0, 0},
5778 {
"", NULL, NULL, NULL, 0, 0}};
5803 if (strcmp(
a->name,
"KMP_AFFINITY") == 0) {
5804 if (strcmp(
b->name,
"KMP_AFFINITY") == 0) {
5808 }
else if (strcmp(
b->name,
"KMP_AFFINITY") == 0) {
5811 return strcmp(
a->name,
b->name);
5827#ifdef KMP_GOMP_COMPAT
5840#ifdef KMP_GOMP_COMPAT
5848 rivals[
i++] = kmp_stacksize;
5849#ifdef KMP_GOMP_COMPAT
5850 if (gomp_stacksize != NULL) {
5851 rivals[
i++] = gomp_stacksize;
5854 rivals[
i++] = omp_stacksize;
5857 kmp_stacksize->
data = &kmp_data;
5858#ifdef KMP_GOMP_COMPAT
5859 if (gomp_stacksize != NULL) {
5860 gomp_stacksize->
data = &gomp_data;
5863 omp_stacksize->
data = &omp_data;
5878 rivals[
i++] = kmp_library;
5879 if (omp_wait_policy != NULL) {
5880 rivals[
i++] = omp_wait_policy;
5884 kmp_library->
data = &kmp_data;
5885 if (omp_wait_policy != NULL) {
5886 omp_wait_policy->
data = &omp_data;
5900 rivals[
i++] = kmp_device_thread_limit;
5901 rivals[
i++] = kmp_all_threads;
5918 rivals[
i++] = kmp_hw_subset;
5919 rivals[
i++] = kmp_place_threads;
5926#if KMP_AFFINITY_SUPPORTED
5932#ifdef KMP_GOMP_COMPAT
5946 rivals[
i++] = kmp_affinity;
5948#ifdef KMP_GOMP_COMPAT
5949 rivals[
i++] = gomp_cpu_affinity;
5953 rivals[
i++] = omp_proc_bind;
5963 places_rivals[
i++] = kmp_affinity;
5964#ifdef KMP_GOMP_COMPAT
5965 places_rivals[
i++] = gomp_cpu_affinity;
5967 places_rivals[
i++] = omp_places;
5969 places_rivals[
i++] = NULL;
5990 rivals[
i++] = kmp_force_red;
5991 if (kmp_determ_red != NULL) {
5992 rivals[
i++] = kmp_determ_red;
5996 kmp_force_red->
data = &force_data;
5997 if (kmp_determ_red != NULL) {
5998 kmp_determ_red->
data = &determ_data;
6021 if (
value != NULL) {
6023 if (setting != NULL) {
6037 if (rivals == NULL) {
6043 for (; strcmp(rivals[
i]->
name,
name) != 0;
i++) {
6046#if KMP_AFFINITY_SUPPORTED
6047 if (rivals[
i] == __kmp_affinity_notype) {
6054 if (rivals[
i]->set) {
6068 if (setting != NULL) {
6077#if defined(KMP_DEBUG) && KMP_AFFINITY_SUPPORTED
6078static void __kmp_print_affinity_settings(
const kmp_affinity_t *affinity) {
6079 K_DIAG(1, (
"%s:\n", affinity->env_var));
6080 K_DIAG(1, (
" type : %d\n", affinity->type));
6081 K_DIAG(1, (
" compact : %d\n", affinity->compact));
6082 K_DIAG(1, (
" offset : %d\n", affinity->offset));
6083 K_DIAG(1, (
" verbose : %u\n", affinity->flags.verbose));
6084 K_DIAG(1, (
" warnings : %u\n", affinity->flags.warnings));
6085 K_DIAG(1, (
" respect : %u\n", affinity->flags.respect));
6086 K_DIAG(1, (
" reset : %u\n", affinity->flags.reset));
6087 K_DIAG(1, (
" dups : %u\n", affinity->flags.dups));
6088 K_DIAG(1, (
" gran : %d\n", (
int)affinity->gran));
6097 char const *base_name) {
6098 for (
int e = 0;; ++e) {
6102 if (strcmp(base, base_name) != 0)
6156 if (
string == NULL) {
6170 if (
string == NULL) {
6171 char const *
name =
"KMP_WARNINGS";
6176#if KMP_AFFINITY_SUPPORTED
6182 __kmp_affinity_notype = NULL;
6184 if (aff_str != NULL) {
6195#if KMP_OS_WINDOWS || KMP_OS_AIX
6198#define FIND strcasestr
6201 if ((FIND(aff_str,
"none") == NULL) &&
6202 (FIND(aff_str,
"physical") == NULL) &&
6203 (FIND(aff_str,
"logical") == NULL) &&
6204 (FIND(aff_str,
"compact") == NULL) &&
6205 (FIND(aff_str,
"scatter") == NULL) &&
6206 (FIND(aff_str,
"explicit") == NULL) &&
6207 (FIND(aff_str,
"balanced") == NULL) &&
6208 (FIND(aff_str,
"disabled") == NULL)) {
6214 __kmp_affinity.type = affinity_default;
6216 __kmp_affinity_top_method = affinity_top_method_default;
6217 __kmp_affinity.flags.respect = affinity_respect_mask_default;
6223 if (aff_str != NULL) {
6224 __kmp_affinity.type = affinity_default;
6226 __kmp_affinity_top_method = affinity_top_method_default;
6227 __kmp_affinity.flags.respect = affinity_respect_mask_default;
6236 for (
i = 0;
i < block.
count; ++
i) {
6247 if (setting != NULL) {
6261#if KMP_AFFINITY_SUPPORTED
6283 for (
i = 0;
i < block.
count; ++
i) {
6291 for (
int e = 0;; ++e) {
6309#if KMP_USE_DYNAMIC_LOCK
6310 __kmp_init_dynamic_user_locks();
6321#if KMP_USE_DYNAMIC_LOCK
6322 __kmp_init_dynamic_user_locks();
6328#if KMP_AFFINITY_SUPPORTED
6331#if KMP_HWLOC_ENABLED
6336 __kmp_affinity_top_method == affinity_top_method_default)
6341 __kmp_affinity_top_method = affinity_top_method_hwloc;
6345 __kmp_affinity_top_method = affinity_top_method_hwloc;
6349 const char *var =
"KMP_AFFINITY";
6350 KMPAffinity::pick_api();
6351#if KMP_HWLOC_ENABLED
6355 if (__kmp_affinity_top_method == affinity_top_method_hwloc &&
6356 __kmp_affinity_dispatch->get_api_type() != KMPAffinity::HWLOC) {
6358 __kmp_affinity_top_method = affinity_top_method_all;
6361 if (__kmp_affinity.type == affinity_disabled) {
6362 KMP_AFFINITY_DISABLE();
6363 }
else if (!KMP_AFFINITY_CAPABLE()) {
6364 __kmp_affinity_dispatch->determine_capable(var);
6365 if (!KMP_AFFINITY_CAPABLE()) {
6366 if (__kmp_affinity.flags.verbose ||
6367 (__kmp_affinity.flags.warnings &&
6368 (__kmp_affinity.type != affinity_default) &&
6369 (__kmp_affinity.type != affinity_none) &&
6370 (__kmp_affinity.type != affinity_disabled))) {
6373 __kmp_affinity.type = affinity_disabled;
6374 __kmp_affinity.flags.respect =
FALSE;
6379 if (__kmp_affinity.type == affinity_disabled) {
6386 if (KMP_AFFINITY_CAPABLE()) {
6388#if KMP_GROUP_AFFINITY
6393 bool exactly_one_group =
false;
6394 if (__kmp_num_proc_groups > 1) {
6396 bool within_one_group;
6399 kmp_affin_mask_t *init_mask;
6400 KMP_CPU_ALLOC(init_mask);
6401 __kmp_get_system_affinity(init_mask,
TRUE);
6402 group = __kmp_get_proc_group(init_mask);
6403 within_one_group = (group >= 0);
6406 if (within_one_group) {
6407 DWORD num_bits_in_group = __kmp_GetActiveProcessorCount(group);
6408 DWORD num_bits_in_mask = 0;
6409 for (
int bit = init_mask->begin(); bit != init_mask->end();
6410 bit = init_mask->next(bit))
6412 exactly_one_group = (num_bits_in_group == num_bits_in_mask);
6414 KMP_CPU_FREE(init_mask);
6420 if (__kmp_num_proc_groups > 1 &&
6421 __kmp_affinity.type == affinity_default &&
6427 if (__kmp_affinity.flags.respect == affinity_respect_mask_default &&
6428 exactly_one_group) {
6429 __kmp_affinity.flags.respect =
FALSE;
6433 if (__kmp_affinity.type == affinity_default) {
6434 __kmp_affinity.type = affinity_compact;
6437 if (__kmp_hh_affinity.type == affinity_default)
6438 __kmp_hh_affinity.type = affinity_compact;
6439 if (__kmp_affinity_top_method == affinity_top_method_default)
6440 __kmp_affinity_top_method = affinity_top_method_all;
6450 if (__kmp_affinity.flags.respect == affinity_respect_mask_default) {
6451#if KMP_GROUP_AFFINITY
6452 if (__kmp_num_proc_groups > 1 && exactly_one_group) {
6453 __kmp_affinity.flags.respect =
FALSE;
6457 __kmp_affinity.flags.respect =
TRUE;
6463 __kmp_affinity.type = affinity_none;
6464 if (__kmp_affinity.type == affinity_default) {
6465 __kmp_affinity.type = affinity_compact;
6466 __kmp_affinity.flags.dups =
FALSE;
6468 }
else if (__kmp_affinity.type == affinity_default) {
6469#if KMP_MIC_SUPPORTED
6470 if (__kmp_mic_type != non_mic) {
6477#if KMP_MIC_SUPPORTED
6478 if (__kmp_mic_type != non_mic) {
6479 __kmp_affinity.type = affinity_scatter;
6483 __kmp_affinity.type = affinity_none;
6486 if (__kmp_hh_affinity.type == affinity_default)
6487 __kmp_hh_affinity.type = affinity_none;
6489 (__kmp_affinity.gran_levels < 0)) {
6490#if KMP_MIC_SUPPORTED
6491 if (__kmp_mic_type != non_mic) {
6500 (__kmp_hh_affinity.gran_levels < 0)) {
6501#if KMP_MIC_SUPPORTED
6502 if (__kmp_mic_type != non_mic) {
6510 if (__kmp_affinity_top_method == affinity_top_method_default) {
6511 __kmp_affinity_top_method = affinity_top_method_all;
6517 if (__kmp_affinity_top_method == affinity_top_method_default)
6518 __kmp_affinity_top_method = affinity_top_method_all;
6519 if (__kmp_affinity.type == affinity_default)
6520 __kmp_affinity.type = affinity_disabled;
6521 if (__kmp_hh_affinity.type == affinity_default)
6522 __kmp_hh_affinity.type = affinity_disabled;
6526 for (
const kmp_affinity_t *affinity : __kmp_affinities)
6527 __kmp_print_affinity_settings(affinity);
6529 K_DIAG(1, (
"__kmp_nested_proc_bind.bind_types[0] == %d\n",
6538 if (
string != NULL) {
6562 for (
i = 0;
i < block.
count; ++
i) {
6566 strncmp(
name,
"OMP_", 4) == 0
6567#ifdef KMP_GOMP_COMPAT
6568 || strncmp(
name,
"GOMP_", 5) == 0
6616 display_env_verbose)) {
6635void __kmp_env_dump() {
6658 if (strstr(env.
str, notdefined.
str))
6667 ompd_env_block_size = (ompd_size_t)
KMP_STRLEN(ompd_env_block);
static kmp_hw_subset_t * allocate()
static void deallocate(kmp_hw_subset_t *subset)
static int parse_single_device(kmp_str_ref spec, int device_num_min, int device_num_max, const char *dbg_name=nullptr)
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
char const * __kmp_device_env_eligible_name(int index)
int __kmp_device_env_record(char const *full_name, char const *value)
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)
struct __kmp_env_blk kmp_env_blk_t
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)
struct __kmp_stg_wp_data kmp_stg_wp_data_t
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 char const * __kmp_aux_env_blk_all_fallback(kmp_env_blk_t *block, char const *base_name)
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)
struct __kmp_stg_ss_data kmp_stg_ss_data_t
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)
struct __kmp_stg_fr_data kmp_stg_fr_data_t
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)
struct __kmp_setting kmp_setting_t
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 char const * use_yield_str
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)
int __kmp_basic_str_to_int(char const *str, size_t maxlen)
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_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)
struct kmp_str_buf kmp_str_buf_t
#define __kmp_str_buf_init(b)
int const __kmp_openmp_version
kmp_stg_print_func_t print
kmp_stg_parse_func_t parse
void set_core_type(kmp_hw_core_type_t type)
void set_core_eff(int eff)
kmp_trimmed_str_t(const char *str)