diff --git a/src/inference/dev_api/openvino/runtime/system_conf.hpp b/src/inference/dev_api/openvino/runtime/system_conf.hpp index 36cbdcdd2fe..c2e0cc37fd9 100644 --- a/src/inference/dev_api/openvino/runtime/system_conf.hpp +++ b/src/inference/dev_api/openvino/runtime/system_conf.hpp @@ -228,8 +228,9 @@ enum ColumnOfProcessorTypeTable { * @brief Definition of CPU_MAP_USED_FLAG column in CPU mapping table. */ enum ProcessorUseStatus { - NOT_USED = -1, //!< Processor is not bound to thread - CPU_USED = 1, //!< CPU is in using + CPU_BLOCKED = -100, //!< Processor is blocked to use + NOT_USED = -1, //!< Processor is not bound to thread + CPU_USED = 1, //!< CPU is in using }; /** diff --git a/src/inference/src/os/win/win_system_conf.cpp b/src/inference/src/os/win/win_system_conf.cpp index 11b172ba5c2..01460db7cc8 100644 --- a/src/inference/src/os/win/win_system_conf.cpp +++ b/src/inference/src/os/win/win_system_conf.cpp @@ -63,6 +63,7 @@ void parse_processor_info_win(const char* base_ptr, int group_end = 0; int group_id = 0; int group_type = 0; + int num_blocked = 0; int num_package = 0; @@ -141,14 +142,18 @@ void parse_processor_info_win(const char* base_ptr, if ((_processors > group_start) && (_processors <= group_end)) { proc_info[CPU_MAP_CORE_TYPE] = group_type; proc_info[CPU_MAP_GROUP_ID] = group_id; - _proc_type_table[0][group_type]++; + if (group_id == CPU_BLOCKED) { + proc_info[CPU_MAP_USED_FLAG] = CPU_BLOCKED; + num_blocked++; + } else { + _proc_type_table[0][group_type]++; + } } _cpu_mapping_table.push_back(proc_info); } _proc_type_table[0][ALL_PROC] += list_len; _processors += list_len; _cores++; - } else if ((info->Relationship == RelationCache) && (info->Cache.Level == 2)) { MaskToList(info->Cache.GroupMask.Mask); @@ -170,15 +175,15 @@ void parse_processor_info_win(const char* base_ptr, if (_processors <= list[list_len - 1] + base_proc) { group_start = list[0]; group_end = list[list_len - 1]; - group_id = group; + group_id = CPU_BLOCKED; group_type = EFFICIENT_CORE_PROC; } for (int m = 0; m < _processors - list[0]; m++) { _cpu_mapping_table[list[m] + base_proc][CPU_MAP_CORE_TYPE] = EFFICIENT_CORE_PROC; - _cpu_mapping_table[list[m] + base_proc][CPU_MAP_GROUP_ID] = group; - _proc_type_table[0][EFFICIENT_CORE_PROC]++; + _cpu_mapping_table[list[m] + base_proc][CPU_MAP_GROUP_ID] = group_id; + _cpu_mapping_table[list[m] + base_proc][CPU_MAP_USED_FLAG] = CPU_BLOCKED; } - group++; + num_blocked++; } else if (1 == list_len) { _cpu_mapping_table[list[0] + base_proc][CPU_MAP_CORE_TYPE] = MAIN_CORE_PROC; _cpu_mapping_table[list[0] + base_proc][CPU_MAP_GROUP_ID] = group; @@ -188,6 +193,9 @@ void parse_processor_info_win(const char* base_ptr, } } _sockets++; + _processors -= num_blocked; + _cores -= num_blocked; + _proc_type_table[0][ALL_PROC] -= num_blocked; if (_sockets > 1) { _proc_type_table.push_back(_proc_type_table[0]); _proc_type_table[0] = proc_init_line; diff --git a/src/inference/tests/unit/cpu_map_parser/parser_windows.cpp b/src/inference/tests/unit/cpu_map_parser/parser_windows.cpp index 58d8e0441c0..1e0da72b681 100644 --- a/src/inference/tests/unit/cpu_map_parser/parser_windows.cpp +++ b/src/inference/tests/unit/cpu_map_parser/parser_windows.cpp @@ -1672,23 +1672,23 @@ WinCpuMapTestCase _1sockets_24cores_hyperthreading_set2 = { }; WinCpuMapTestCase _1sockets_22cores_hyperthreading = { - 22, + 20, 1, 1, - 16, - {{22, 6, 10, 6, 0, 0}}, + 14, + {{20, 6, 8, 6, 0, 0}}, { - {0, 0, 0, 0, HYPER_THREADING_PROC, 0, -1}, {1, 0, 0, 0, MAIN_CORE_PROC, 0, -1}, - {2, 0, 0, 1, EFFICIENT_CORE_PROC, 1, -1}, {3, 0, 0, 2, EFFICIENT_CORE_PROC, 1, -1}, - {4, 0, 0, 3, EFFICIENT_CORE_PROC, 1, -1}, {5, 0, 0, 4, EFFICIENT_CORE_PROC, 1, -1}, - {6, 0, 0, 5, EFFICIENT_CORE_PROC, 2, -1}, {7, 0, 0, 6, EFFICIENT_CORE_PROC, 2, -1}, - {8, 0, 0, 7, EFFICIENT_CORE_PROC, 2, -1}, {9, 0, 0, 8, EFFICIENT_CORE_PROC, 2, -1}, - {10, 0, 0, 9, HYPER_THREADING_PROC, 3, -1}, {11, 0, 0, 9, MAIN_CORE_PROC, 3, -1}, - {12, 0, 0, 10, HYPER_THREADING_PROC, 4, -1}, {13, 0, 0, 10, MAIN_CORE_PROC, 4, -1}, - {14, 0, 0, 11, HYPER_THREADING_PROC, 5, -1}, {15, 0, 0, 11, MAIN_CORE_PROC, 5, -1}, - {16, 0, 0, 12, HYPER_THREADING_PROC, 6, -1}, {17, 0, 0, 12, MAIN_CORE_PROC, 6, -1}, - {18, 0, 0, 13, HYPER_THREADING_PROC, 7, -1}, {19, 0, 0, 13, MAIN_CORE_PROC, 7, -1}, - {20, 0, 0, 14, EFFICIENT_CORE_PROC, 8, -1}, {21, 0, 0, 15, EFFICIENT_CORE_PROC, 8, -1}, + {0, 0, 0, 0, HYPER_THREADING_PROC, 0, -1}, {1, 0, 0, 0, MAIN_CORE_PROC, 0, -1}, + {2, 0, 0, 1, EFFICIENT_CORE_PROC, 1, -1}, {3, 0, 0, 2, EFFICIENT_CORE_PROC, 1, -1}, + {4, 0, 0, 3, EFFICIENT_CORE_PROC, 1, -1}, {5, 0, 0, 4, EFFICIENT_CORE_PROC, 1, -1}, + {6, 0, 0, 5, EFFICIENT_CORE_PROC, 2, -1}, {7, 0, 0, 6, EFFICIENT_CORE_PROC, 2, -1}, + {8, 0, 0, 7, EFFICIENT_CORE_PROC, 2, -1}, {9, 0, 0, 8, EFFICIENT_CORE_PROC, 2, -1}, + {10, 0, 0, 9, HYPER_THREADING_PROC, 3, -1}, {11, 0, 0, 9, MAIN_CORE_PROC, 3, -1}, + {12, 0, 0, 10, HYPER_THREADING_PROC, 4, -1}, {13, 0, 0, 10, MAIN_CORE_PROC, 4, -1}, + {14, 0, 0, 11, HYPER_THREADING_PROC, 5, -1}, {15, 0, 0, 11, MAIN_CORE_PROC, 5, -1}, + {16, 0, 0, 12, HYPER_THREADING_PROC, 6, -1}, {17, 0, 0, 12, MAIN_CORE_PROC, 6, -1}, + {18, 0, 0, 13, HYPER_THREADING_PROC, 7, -1}, {19, 0, 0, 13, MAIN_CORE_PROC, 7, -1}, + {20, 0, 0, 14, EFFICIENT_CORE_PROC, -100, -100}, {21, 0, 0, 15, EFFICIENT_CORE_PROC, -100, -100}, }, {"0300000030000000000000000000000000000000000000000000000000000100ffff3f0000000000000000000000000000000000300000000" "10100000000000000000000000000000000000000000100030000000000000000000000000000000700000030000000000000000000000000"