HOT FIX: update cpu map calculation for Windows to avoid incorrect total number of processors (#16763)

* update cpu map calculation for Windows

* update typo

* update typo

* update for hybrid CPU

* update for hybrid CPU

* update for typo
This commit is contained in:
Shen, Wanglei
2023-04-06 15:08:42 +08:00
committed by GitHub
parent 70ef0b5316
commit 9f0e557744
3 changed files with 246 additions and 40 deletions

View File

@@ -29,8 +29,6 @@ void CPU::init_cpu(CPU& cpu) {
return;
}
cpu._processors = GetMaximumProcessorCount(ALL_PROCESSOR_GROUPS);
parse_processor_info_win(base_ptr,
len,
cpu._processors,
@@ -42,21 +40,30 @@ void CPU::init_cpu(CPU& cpu) {
void parse_processor_info_win(const char* base_ptr,
const unsigned long len,
const int _processors,
int& _processors,
int& _sockets,
int& _cores,
std::vector<std::vector<int>>& _proc_type_table,
std::vector<std::vector<int>>& _cpu_mapping_table) {
_cpu_mapping_table.resize(_processors, std::vector<int>(CPU_MAP_TABLE_SIZE, -1));
std::vector<int> list;
std::vector<int> proc_info;
std::vector<int> proc_init_line(PROC_TYPE_TABLE_SIZE, 0);
std::vector<int> cpu_init_line(CPU_MAP_TABLE_SIZE, -1);
char* info_ptr = (char*)base_ptr;
int list_len = 0;
int base_proc = 0;
int proc_count = 0;
int group = 0;
int group_start = 0;
int group_end = 0;
int group_id = 0;
int group_type = 0;
_processors = 0;
_sockets = -1;
_cores = 0;
PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX info = NULL;
@@ -77,8 +84,6 @@ void parse_processor_info_win(const char* base_ptr,
return;
};
std::vector<int> line_value_0(PROC_TYPE_TABLE_SIZE, 0);
for (; info_ptr < base_ptr + len; info_ptr += (DWORD)info->Size) {
info = (PSYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX)info_ptr;
@@ -86,56 +91,66 @@ void parse_processor_info_win(const char* base_ptr,
_sockets++;
MaskToList(info->Processor.GroupMask->Mask);
if (0 == _sockets) {
_proc_type_table.push_back(line_value_0);
_proc_type_table.push_back(proc_init_line);
} else {
_proc_type_table.push_back(_proc_type_table[0]);
_proc_type_table[0] = line_value_0;
_proc_type_table[0] = proc_init_line;
}
} else if (info->Relationship == RelationProcessorCore) {
MaskToList(info->Processor.GroupMask->Mask);
if (proc_count >= _processors) {
break;
}
if (0 == list[0]) {
base_proc = proc_count;
base_proc = _processors;
}
if (2 == list_len) {
_cpu_mapping_table[list[0] + base_proc][CPU_MAP_PROCESSOR_ID] = list[0] + base_proc;
_cpu_mapping_table[list[1] + base_proc][CPU_MAP_PROCESSOR_ID] = list[1] + base_proc;
proc_info = cpu_init_line;
proc_info[CPU_MAP_PROCESSOR_ID] = list[0] + base_proc;
proc_info[CPU_MAP_SOCKET_ID] = _sockets;
proc_info[CPU_MAP_CORE_ID] = _cores;
proc_info[CPU_MAP_CORE_TYPE] = HYPER_THREADING_PROC;
proc_info[CPU_MAP_GROUP_ID] = group;
_cpu_mapping_table.push_back(proc_info);
_cpu_mapping_table[list[0] + base_proc][CPU_MAP_SOCKET_ID] = _sockets;
_cpu_mapping_table[list[1] + base_proc][CPU_MAP_SOCKET_ID] = _sockets;
_cpu_mapping_table[list[0] + base_proc][CPU_MAP_CORE_ID] = _cores;
_cpu_mapping_table[list[1] + base_proc][CPU_MAP_CORE_ID] = _cores;
_cpu_mapping_table[list[0] + base_proc][CPU_MAP_CORE_TYPE] = HYPER_THREADING_PROC;
_cpu_mapping_table[list[1] + base_proc][CPU_MAP_CORE_TYPE] = MAIN_CORE_PROC;
_cpu_mapping_table[list[0] + base_proc][CPU_MAP_GROUP_ID] = group;
_cpu_mapping_table[list[1] + base_proc][CPU_MAP_GROUP_ID] = group;
proc_info = cpu_init_line;
proc_info[CPU_MAP_PROCESSOR_ID] = list[1] + base_proc;
proc_info[CPU_MAP_SOCKET_ID] = _sockets;
proc_info[CPU_MAP_CORE_ID] = _cores;
proc_info[CPU_MAP_CORE_TYPE] = MAIN_CORE_PROC;
proc_info[CPU_MAP_GROUP_ID] = group;
_cpu_mapping_table.push_back(proc_info);
_proc_type_table[0][MAIN_CORE_PROC]++;
_proc_type_table[0][HYPER_THREADING_PROC]++;
group++;
} else {
_cpu_mapping_table[list[0] + base_proc][CPU_MAP_PROCESSOR_ID] = list[0] + base_proc;
_cpu_mapping_table[list[0] + base_proc][CPU_MAP_SOCKET_ID] = _sockets;
_cpu_mapping_table[list[0] + base_proc][CPU_MAP_CORE_ID] = _cores;
proc_info = cpu_init_line;
proc_info[CPU_MAP_PROCESSOR_ID] = list[0] + base_proc;
proc_info[CPU_MAP_SOCKET_ID] = _sockets;
proc_info[CPU_MAP_CORE_ID] = _cores;
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]++;
}
_cpu_mapping_table.push_back(proc_info);
}
_proc_type_table[0][ALL_PROC] += list_len;
proc_count += list_len;
_processors += list_len;
_cores++;
} else if ((info->Relationship == RelationCache) && (info->Cache.Level == 2)) {
MaskToList(info->Cache.GroupMask.Mask);
if (4 == list_len) {
for (int m = 0; m < list_len; m++) {
if (_processors < list[list_len - 1] + base_proc) {
group_start = list[0];
group_end = list[list_len - 1];
group_id = group;
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]++;
@@ -153,7 +168,7 @@ void parse_processor_info_win(const char* base_ptr,
_sockets++;
if (_sockets > 1) {
_proc_type_table.push_back(_proc_type_table[0]);
_proc_type_table[0] = line_value_0;
_proc_type_table[0] = proc_init_line;
for (int m = 1; m <= _sockets; m++) {
for (int n = 0; n < PROC_TYPE_TABLE_SIZE; n++) {

View File

@@ -38,7 +38,6 @@ struct CPU {
#ifdef __linux__
/**
* @brief Parse processors infomation on Linux
* @ingroup ie_dev_api_system_conf
* @param[in] _processors total number for processors in system.
* @param[in] _system_info_table system information for this platform.
* @param[out] _sockets total number for sockets in system
@@ -53,16 +52,14 @@ void parse_processor_info_linux(const int _processors,
int& _cores,
std::vector<std::vector<int>>& _proc_type_table,
std::vector<std::vector<int>>& _cpu_mapping_table);
#endif
#if (defined(_WIN32) || defined(_WIN64))
/**
* @brief Parse processors infomation on Windows
* @ingroup ie_dev_api_system_conf
* @param[in] base_ptr buffer object pointer of Windows system infomation
* @param[in] len buffer object length of Windows system infomation
* @param[in] _processors total number for processors in system.
* @param[out] _processors total number for processors in system.
* @param[out] _sockets total number for sockets in system
* @param[out] _cores total number for physical CPU cores in system
* @param[out] _proc_type_table summary table of number of processors per type
@@ -71,7 +68,7 @@ void parse_processor_info_linux(const int _processors,
*/
void parse_processor_info_win(const char* base_ptr,
const unsigned long len,
const int _processors,
int& _processors,
int& _sockets,
int& _cores,
std::vector<std::vector<int>>& _proc_type_table,

View File

@@ -623,6 +623,7 @@ public:
Hex2Bin(test_ptr, test_len, test_info_ptr);
int test_processors = 0;
int test_sockets = 0;
int test_cores = 0;
unsigned long len = unsigned long(test_len / 2);
@@ -631,12 +632,13 @@ public:
ov::parse_processor_info_win(test_info_ptr,
len,
test_data._processors,
test_processors,
test_sockets,
test_cores,
test_proc_type_table,
test_cpu_mapping_table);
ASSERT_EQ(test_data._processors, test_processors);
ASSERT_EQ(test_data._sockets, test_sockets);
ASSERT_EQ(test_data._cores, test_cores);
ASSERT_EQ(test_data._proc_type_table, test_proc_type_table);
@@ -1544,6 +1546,197 @@ WinCpuMapTestCase _2sockets_48cores_hyperthreading = {
"fffff000030300000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffff0000"},
};
WinCpuMapTestCase _2sockets_36cores_hyperthreading = {
72,
2,
36,
{{72, 36, 0, 36}, {36, 18, 0, 18}, {36, 18, 0, 18}},
{
{0, 0, 0, HYPER_THREADING_PROC, 0, -1}, {1, 0, 0, MAIN_CORE_PROC, 0, -1},
{2, 0, 1, HYPER_THREADING_PROC, 1, -1}, {3, 0, 1, MAIN_CORE_PROC, 1, -1},
{4, 0, 2, HYPER_THREADING_PROC, 2, -1}, {5, 0, 2, MAIN_CORE_PROC, 2, -1},
{6, 0, 3, HYPER_THREADING_PROC, 3, -1}, {7, 0, 3, MAIN_CORE_PROC, 3, -1},
{8, 0, 4, HYPER_THREADING_PROC, 4, -1}, {9, 0, 4, MAIN_CORE_PROC, 4, -1},
{10, 0, 5, HYPER_THREADING_PROC, 5, -1}, {11, 0, 5, MAIN_CORE_PROC, 5, -1},
{12, 0, 6, HYPER_THREADING_PROC, 6, -1}, {13, 0, 6, MAIN_CORE_PROC, 6, -1},
{14, 0, 7, HYPER_THREADING_PROC, 7, -1}, {15, 0, 7, MAIN_CORE_PROC, 7, -1},
{16, 0, 8, HYPER_THREADING_PROC, 8, -1}, {17, 0, 8, MAIN_CORE_PROC, 8, -1},
{18, 0, 9, HYPER_THREADING_PROC, 9, -1}, {19, 0, 9, MAIN_CORE_PROC, 9, -1},
{20, 0, 10, HYPER_THREADING_PROC, 10, -1}, {21, 0, 10, MAIN_CORE_PROC, 10, -1},
{22, 0, 11, HYPER_THREADING_PROC, 11, -1}, {23, 0, 11, MAIN_CORE_PROC, 11, -1},
{24, 0, 12, HYPER_THREADING_PROC, 12, -1}, {25, 0, 12, MAIN_CORE_PROC, 12, -1},
{26, 0, 13, HYPER_THREADING_PROC, 13, -1}, {27, 0, 13, MAIN_CORE_PROC, 13, -1},
{28, 0, 14, HYPER_THREADING_PROC, 14, -1}, {29, 0, 14, MAIN_CORE_PROC, 14, -1},
{30, 0, 15, HYPER_THREADING_PROC, 15, -1}, {31, 0, 15, MAIN_CORE_PROC, 15, -1},
{32, 0, 16, HYPER_THREADING_PROC, 16, -1}, {33, 0, 16, MAIN_CORE_PROC, 16, -1},
{34, 0, 17, HYPER_THREADING_PROC, 17, -1}, {35, 0, 17, MAIN_CORE_PROC, 17, -1},
{36, 1, 18, HYPER_THREADING_PROC, 18, -1}, {37, 1, 18, MAIN_CORE_PROC, 18, -1},
{38, 1, 19, HYPER_THREADING_PROC, 19, -1}, {39, 1, 19, MAIN_CORE_PROC, 19, -1},
{40, 1, 20, HYPER_THREADING_PROC, 20, -1}, {41, 1, 20, MAIN_CORE_PROC, 20, -1},
{42, 1, 21, HYPER_THREADING_PROC, 21, -1}, {43, 1, 21, MAIN_CORE_PROC, 21, -1},
{44, 1, 22, HYPER_THREADING_PROC, 22, -1}, {45, 1, 22, MAIN_CORE_PROC, 22, -1},
{46, 1, 23, HYPER_THREADING_PROC, 23, -1}, {47, 1, 23, MAIN_CORE_PROC, 23, -1},
{48, 1, 24, HYPER_THREADING_PROC, 24, -1}, {49, 1, 24, MAIN_CORE_PROC, 24, -1},
{50, 1, 25, HYPER_THREADING_PROC, 25, -1}, {51, 1, 25, MAIN_CORE_PROC, 25, -1},
{52, 1, 26, HYPER_THREADING_PROC, 26, -1}, {53, 1, 26, MAIN_CORE_PROC, 26, -1},
{54, 1, 27, HYPER_THREADING_PROC, 27, -1}, {55, 1, 27, MAIN_CORE_PROC, 27, -1},
{56, 1, 28, HYPER_THREADING_PROC, 28, -1}, {57, 1, 28, MAIN_CORE_PROC, 28, -1},
{58, 1, 29, HYPER_THREADING_PROC, 29, -1}, {59, 1, 29, MAIN_CORE_PROC, 29, -1},
{60, 1, 30, HYPER_THREADING_PROC, 30, -1}, {61, 1, 30, MAIN_CORE_PROC, 30, -1},
{62, 1, 31, HYPER_THREADING_PROC, 31, -1}, {63, 1, 31, MAIN_CORE_PROC, 31, -1},
{64, 1, 32, HYPER_THREADING_PROC, 32, -1}, {65, 1, 32, MAIN_CORE_PROC, 32, -1},
{66, 1, 33, HYPER_THREADING_PROC, 33, -1}, {67, 1, 33, MAIN_CORE_PROC, 33, -1},
{68, 1, 34, HYPER_THREADING_PROC, 34, -1}, {69, 1, 34, MAIN_CORE_PROC, 34, -1},
{70, 1, 35, HYPER_THREADING_PROC, 35, -1}, {71, 1, 35, MAIN_CORE_PROC, 35, -1},
},
{"0300000030000000000000000000000000000000000000000000000000000100ffffffff0f000000000000000000000000000000300000000"
"10000000000000000000000000000000000000000000100030000000000000000000000000000000200000038000000010c400000c0000002"
"00000000000000000000000000000000000000000000000300000000000000000000000000000002000000380000000108400000800000010"
"00000000000000000000000000000000000000000000003000000000000000000000000000000020000003800000002144000000014000000"
"00000000000000000000000000000000000000000000030000000000000000000000000000000200000038000000030c40000000700200000"
"0000000000000000000000000000000000000000000ffffffff0f000000000000000000000000000000300000000100000000000000000000"
"000000000000000000000001000c0000000000000000000000000000000200000038000000010c400000c0000002000000000000000000000"
"00000000000000000000000000c00000000000000000000000000000002000000380000000108400000800000010000000000000000000000"
"0000000000000000000000000c000000000000000000000000000000020000003800000002144000000014000000000000000000000000000"
"000000000000000000000000c0000000000000000000000000000000000000030000000010000000000000000000000000000000000000000"
"000100300000000000000000000000000000000200000038000000010c400000c000000200000000000000000000000000000000000000000"
"00000300000000000000000000000000000000200000038000000010840000080000001000000000000000000000000000000000000000000"
"00003000000000000000000000000000000002000000380000000214400000001400000000000000000000000000000000000000000000000"
"000300000000000000000000000000000000000000030000000010000000000000000000000000000000000000000000100c0000000000000"
"0000000000000000000200000038000000010c400000c00000020000000000000000000000000000000000000000000000c00000000000000"
"0000000000000000002000000380000000108400000800000010000000000000000000000000000000000000000000000c000000000000000"
"000000000000000002000000380000000214400000001400000000000000000000000000000000000000000000000000c0000000000000000"
"00000000000000000000000300000000100000000000000000000000000000000000000000001000003000000000000000000000000000002"
"00000038000000010c400000c0000002000000000000000000000000000000000000000000000000030000000000000000000000000000020"
"00000380000000108400000800000010000000000000000000000000000000000000000000000000300000000000000000000000000000200"
"00003800000002144000000014000000000000000000000000000000000000000000000000000003000000000000000000000000000000000"
"00030000000010000000000000000000000000000000000000000000100000c00000000000000000000000000000200000038000000010c40"
"0000c00000020000000000000000000000000000000000000000000000000c000000000000000000000000000002000000380000000108400"
"000800000010000000000000000000000000000000000000000000000000c0000000000000000000000000000020000003800000002144000"
"00001400000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000030000000010000000"
"000000000000000000000000000000000000100003000000000000000000000000000000200000038000000010c400000c000000200000000"
"00000000000000000000000000000000000000003000000000000000000000000000000200000038000000010840000080000001000000000"
"00000000000000000000000000000000000000030000000000000000000000000000002000000380000000214400000001400000000000000"
"00000000000000000000000000000000000000300000000000000000000000000000000000003000000001000000000000000000000000000"
"000000000000000010000c000000000000000000000000000000200000038000000010c400000c00000020000000000000000000000000000"
"00000000000000000000c00000000000000000000000000000020000003800000001084000008000000100000000000000000000000000000"
"0000000000000000000c000000000000000000000000000000200000038000000021440000000140000000000000000000000000000000000"
"000000000000000000c0000000000000000000000000000000000000300000000100000000000000000000000000000000000000000001000"
"00003000000000000000000000000000200000038000000010c400000c0000002000000000000000000000000000000000000000000000000"
"00030000000000000000000000000002000000380000000108400000800000010000000000000000000000000000000000000000000000000"
"00300000000000000000000000000020000003800000002144000000014000000000000000000000000000000000000000000000000000000"
"0300000000000000000000000000000000003000000001000000000000000000000000000000000000000000010000000c000000000000000"
"000000000000200000038000000010c400000c0000002000000000000000000000000000000000000000000000000000c0000000000000000"
"00000000000200000038000000010840000080000001000000000000000000000000000000000000000000000000000c00000000000000000"
"0000000000200000038000000021440000000140000000000000000000000000000000000000000000000000000000c000000000000000000"
"00000000000000003000000001000000000000000000000000000000000000000000010000003000000000000000000000000000020000003"
"8000000010c400000c00000020000000000000000000000000000000000000000000000000030000000000000000000000000000200000038"
"00000001084000008000000100000000000000000000000000000000000000000000000000300000000000000000000000000002000000380"
"00000021440000000140000000000000000000000000000000000000000000000000000003000000000000000000000000000000000003000"
"00000100000000000000000000000000000000000000000001000000c0000000000000000000000000000200000038000000010c400000c00"
"0000200000000000000000000000000000000000000000000000000c000000000000000000000000000020000003800000001084000008000"
"000100000000000000000000000000000000000000000000000000c0000000000000000000000000000200000038000000021440000000140"
"00000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000300000000100000000000000"
"00000000000000000000000000000100000000030000000000000000000000000200000038000000010c400000c0000002000000000000000"
"00000000000000000000000000000000000000300000000000000000000000002000000380000000108400000800000010000000000000000"
"00000000000000000000000000000000000003000000000000000000000000020000003800000002144000000014000000000000000000000"
"00000000000000000000000000000000000030000000000000000000000000000000030000000010000000000000000000000000000000000"
"0000000001000000000c0000000000000000000000000200000038000000010c400000c000000200000000000000000000000000000000000"
"000000000000000000c0000000000000000000000000200000038000000010840000080000001000000000000000000000000000000000000"
"00000000000000000c00000000000000000000000002000000380000000214400000001400000000000000000000000000000000000000000"
"0000000000000000c000000000000000000000000000000003000000001000000000000000000000000000000000000000000010000000030"
"0000000000000000000000000200000038000000010c400000c00000020000000000000000000000000000000000000000000000000000300"
"00000000000000000000000020000003800000001084000008000000100000000000000000000000000000000000000000000000000003000"
"00000000000000000000000200000038000000021440000000140000000000000000000000000000000000000000000000000000000030000"
"0000000000000000000000000000030000000010000000000000000000000000000000000000000000100000000c000000000000000000000"
"00000200000038000000010c400000c00000020000000000000000000000000000000000000000000000000000c0000000000000000000000"
"00002000000380000000108400000800000010000000000000000000000000000000000000000000000000000c00000000000000000000000"
"0002000000380000000214400000001400000000000000000000000000000000000000000000000000000000c000000000000000000000000"
"00000000030000000010000000000000000000000000000000000000000000100000000000300000000000000000000000200000038000000"
"010c400000c000000200000000000000000000000000000000000000000000000000000003000000000000000000000002000000380000000"
"10840000080000001000000000000000000000000000000000000000000000000000000030000000000000000000000020000003800000002"
"14400000001400000000000000000000000000000000000000000000000000000000000300000000000000000000000000000030000000010"
"000000000000000000000000000000000000000000100000000000c00000000000000000000000200000038000000010c400000c000000200"
"00000000000000000000000000000000000000000000000000000c00000000000000000000000200000038000000010840000080000001000"
"0000000000000000000000000000000000000000000000000000c000000000000000000000002000000380000000214400000001400000000"
"000000000000000000000000000000000000000000000000000c0000000000000000000000030000003000000000000000000000000000000"
"0000000000000000000000100ffffffff0f000000010000000000000000000000300000000100000000000000000000000000000000000000"
"00000100030000000000000001000000000000000200000038000000010c400000c0000002000000000000000000000000000000000000000"
"00000000300000000000000010000000000000002000000380000000108400000800000010000000000000000000000000000000000000000"
"00000003000000000000000100000000000000020000003800000002144000000014000000000000000000000000000000000000000000000"
"00000030000000000000001000000000000000200000038000000030c40000000700200000000000000000000000000000000000000000000"
"0000ffffffff0f000000010000000000000000000000300000000100000000000000000000000000000000000000000001000c00000000000"
"00001000000000000000200000038000000010c400000c000000200000000000000000000000000000000000000000000000c000000000000"
"000100000000000000020000003800000001084000008000000100000000000000000000000000000000000000000000000c0000000000000"
"00100000000000000020000003800000002144000000014000000000000000000000000000000000000000000000000000c00000000000000"
"01000000000000000000000030000000010000000000000000000000000000000000000000000100300000000000000001000000000000000"
"200000038000000010c400000c000000200000000000000000000000000000000000000000000003000000000000000010000000000000002"
"00000038000000010840000080000001000000000000000000000000000000000000000000000030000000000000000100000000000000020"
"00000380000000214400000001400000000000000000000000000000000000000000000000000300000000000000001000000000000000000"
"000030000000010000000000000000000000000000000000000000000100c00000000000000001000000000000000200000038000000010c4"
"00000c00000020000000000000000000000000000000000000000000000c00000000000000001000000000000000200000038000000010840"
"0000800000010000000000000000000000000000000000000000000000c000000000000000010000000000000002000000380000000214400"
"000001400000000000000000000000000000000000000000000000000c0000000000000000100000000000000000000003000000001000000"
"0000000000000000000000000000000000000100000300000000000001000000000000000200000038000000010c400000c00000020000000"
"00000000000000000000000000000000000000000030000000000000100000000000000020000003800000001084000008000000100000000"
"00000000000000000000000000000000000000000300000000000001000000000000000200000038000000021440000000140000000000000"
"00000000000000000000000000000000000000003000000000000010000000000000000000000300000000100000000000000000000000000"
"00000000000000000100000c00000000000001000000000000000200000038000000010c400000c0000002000000000000000000000000000"
"0000000000000000000000c000000000000010000000000000002000000380000000108400000800000010000000000000000000000000000"
"000000000000000000000c0000000000000100000000000000020000003800000002144000000014000000000000000000000000000000000"
"00000000000000000000c00000000000001000000000000000000000030000000010000000000000000000000000000000000000000000100"
"003000000000000001000000000000000200000038000000010c400000c000000200000000000000000000000000000000000000000000000"
"03000000000000001000000000000000200000038000000010840000080000001000000000000000000000000000000000000000000000000"
"30000000000000010000000000000002000000380000000214400000001400000000000000000000000000000000000000000000000000003"
"00000000000000100000000000000000000003000000001000000000000000000000000000000000000000000010000c00000000000000100"
"0000000000000200000038000000010c400000c0000002000000000000000000000000000000000000000000000000c000000000000001000"
"000000000000200000038000000010840000080000001000000000000000000000000000000000000000000000000c0000000000000010000"
"00000000000200000038000000021440000000140000000000000000000000000000000000000000000000000000c00000000000000100000"
"00000000000000000300000000100000000000000000000000000000000000000000001000000030000000000010000000000000002000000"
"38000000010c400000c0000002000000000000000000000000000000000000000000000000000300000000000100000000000000020000003"
"80000000108400000800000010000000000000000000000000000000000000000000000000003000000000001000000000000000200000038"
"00000002144000000014000000000000000000000000000000000000000000000000000000030000000000010000000000000000000000300"
"0000001000000000000000000000000000000000000000000010000000c000000000001000000000000000200000038000000010c400000c0"
"000002000000000000000000000000000000000000000000000000000c0000000000010000000000000002000000380000000108400000800"
"00001000000000000000000000000000000000000000000000000000c00000000000100000000000000020000003800000002144000000014"
"0000000000000000000000000000000000000000000000000000000c000000000001000000000000000000000030000000010000000000000"
"000000000000000000000000000000100000030000000000001000000000000000200000038000000010c400000c000000200000000000000"
"00000000000000000000000000000000000030000000000001000000000000000200000038000000010840000080000001000000000000000"
"00000000000000000000000000000000000300000000000010000000000000002000000380000000214400000001400000000000000000000"
"00000000000000000000000000000000003000000000000100000000000000000000003000000001000000000000000000000000000000000"
"00000000001000000c0000000000001000000000000000200000038000000010c400000c00000020000000000000000000000000000000000"
"0000000000000000c000000000000100000000000000020000003800000001084000008000000100000000000000000000000000000000000"
"000000000000000c0000000000001000000000000000200000038000000021440000000140000000000000000000000000000000000000000"
"00000000000000c00000000000010000000000000000000000300000000100000000000000000000000000000000000000000001000000000"
"30000000001000000000000000200000038000000010c400000c0000002000000000000000000000000000000000000000000000000000003"
"00000000010000000000000002000000380000000108400000800000010000000000000000000000000000000000000000000000000000030"
"00000000100000000000000020000003800000002144000000014000000000000000000000000000000000000000000000000000000000300"
"000000010000000000000000000000300000000100000000000000000000000000000000000000000001000000000c0000000001000000000"
"000000200000038000000010c400000c000000200000000000000000000000000000000000000000000000000000c00000000010000000000"
"0000020000003800000001084000008000000100000000000000000000000000000000000000000000000000000c000000000100000000000"
"000020000003800000002144000000014000000000000000000000000000000000000000000000000000000000c0000000001000000000000"
"00000000003000000001000000000000000000000000000000000000000000010000000030000000000100000000000000020000003800000"
"0010c400000c00000020000000000000000000000000000000000000000000000000000300000000001000000000000000200000038000000"
"01084000008000000100000000000000000000000000000000000000000000000000003000000000010000000000000002000000380000000"
"21440000000140000000000000000000000000000000000000000000000000000000030000000000100000000000000000000003000000001"
"0000000000000000000000000000000000000000000100000000c00000000001000000000000000200000038000000010c400000c00000020"
"000000000000000000000000000000000000000000000000000c0000000000100000000000000020000003800000001084000008000000100"
"00000000000000000000000000000000000000000000000000c00000000001000000000000000200000038000000021440000000140000000"
"0000000000000000000000000000000000000000000000000c000000000010000000000000000000000300000000100000000000000000000"
"00000000000000000000000100000000000300000001000000000000000200000038000000010c400000c0000002000000000000000000000"
"00000000000000000000000000000000003000000010000000000000002000000380000000108400000800000010000000000000000000000"
"00000000000000000000000000000000030000000100000000000000020000003800000002144000000014000000000000000000000000000"
"00000000000000000000000000000000300000001000000000000000000000030000000010000000000000000000000000000000000000000"
"000100000000000c00000001000000000000000200000038000000010c400000c000000200000000000000000000000000000000000000000"
"00000000000000c00000001000000000000000200000038000000010840000080000001000000000000000000000000000000000000000000"
"0000000000000c000000010000000000000002000000380000000214400000001400000000000000000000000000000000000000000000000"
"000000000000c00000001000000000000000100000030000000000000000000000000000000000000000000000000000000ffffffff0f0000"
"0000000000000000000100000030000000010000000000000000000000000000000000000000000000ffffffff0f000000010000000000000"
"00400000080000000020002000000000000000000000000000000000000000000402400000000000000000000000000000000000000000000"
"00000000000000000000000000000000ffffffff0f00000040240000000000000000000000000000000000000000000000000000000000000"
"000000000000000ffffffff0f000000"},
};
WinCpuMapTestCase _2sockets_48cores = {
48,
2,
@@ -2361,6 +2554,7 @@ INSTANTIATE_TEST_SUITE_P(CPUMap,
WinCpuMapParserTests,
testing::Values(_2sockets_104cores_hyperthreading,
_2sockets_48cores_hyperthreading,
_2sockets_36cores_hyperthreading,
_2sockets_48cores,
_1sockets_24cores_hyperthreading_set1,
_1sockets_24cores_hyperthreading_set2,