From 46150305f28b0e5b9e8dbdb6182ed1caac33051c Mon Sep 17 00:00:00 2001 From: sebastian-dev Date: Mon, 8 Feb 2021 10:50:06 +0100 Subject: [PATCH] AMD Ryzen, wrong CPU Core Enumeration (#376) Thanks to @sebastian-dev --- .../Hardware/Cpu/Amd10Cpu.cs | 6 ----- .../Hardware/Cpu/Amd17Cpu.cs | 23 +++++++++---------- 2 files changed, 11 insertions(+), 18 deletions(-) diff --git a/LibreHardwareMonitorLib/Hardware/Cpu/Amd10Cpu.cs b/LibreHardwareMonitorLib/Hardware/Cpu/Amd10Cpu.cs index 5d847b5..dc573be 100644 --- a/LibreHardwareMonitorLib/Hardware/Cpu/Amd10Cpu.cs +++ b/LibreHardwareMonitorLib/Hardware/Cpu/Amd10Cpu.cs @@ -125,11 +125,6 @@ namespace LibreHardwareMonitor.Hardware.CPU } break; } - case 0x17: - { - miscellaneousControlDeviceId = FAMILY_17H_MODEL_00_MISC_CONTROL_DEVICE_ID; - break; - } default: { miscellaneousControlDeviceId = 0; @@ -565,7 +560,6 @@ namespace LibreHardwareMonitor.Hardware.CPU private const ushort FAMILY_15H_MODEL_70_MISC_CONTROL_DEVICE_ID = 0x15B3; private const ushort FAMILY_16H_MODEL_00_MISC_CONTROL_DEVICE_ID = 0x1533; private const ushort FAMILY_16H_MODEL_30_MISC_CONTROL_DEVICE_ID = 0x1583; - private const ushort FAMILY_17H_MODEL_00_MISC_CONTROL_DEVICE_ID = 0x1577; // ReSharper restore InconsistentNaming } diff --git a/LibreHardwareMonitorLib/Hardware/Cpu/Amd17Cpu.cs b/LibreHardwareMonitorLib/Hardware/Cpu/Amd17Cpu.cs index 22e5810..282da54 100644 --- a/LibreHardwareMonitorLib/Hardware/Cpu/Amd17Cpu.cs +++ b/LibreHardwareMonitorLib/Hardware/Cpu/Amd17Cpu.cs @@ -28,10 +28,8 @@ namespace LibreHardwareMonitor.Hardware.CPU _processor = new Processor(this); // add all numa nodes - const int initialCoreId = 1_000_000_000; - - int coreId = 1; - int lastCoreId = initialCoreId; + int coreId = 0; + int lastCoreId = -1; //invalid id // Ryzen 3000's skip some core ids. // So start at 1 and count upwards when the read core changes. @@ -39,22 +37,23 @@ namespace LibreHardwareMonitor.Hardware.CPU { CpuId thread = cpu[0]; - // coreID - // Register ..1E_1, [7:0] + // CPUID_Fn8000001E_EBX, Register ..1E_1, [7:0] + // threads per core = CPUID_Fn8000001E_EBX[15:8] + 1 + // CoreId: core ID = CPUID_Fn8000001E_EBX[7:0] int coreIdRead = (int)(thread.ExtData[0x1e, 1] & 0xff); - // nodeID - // Register ..1E_2, [7:0] + // CPUID_Fn8000001E_ECX, Node Identifiers, Register ..1E_2 + // NodesPerProcessor = CPUID_Fn8000001E_ECX[10:8] + // nodeID = CPUID_Fn8000001E_ECX[7:0] int nodeId = (int)(thread.ExtData[0x1e, 2] & 0xff); - _processor.AppendThread(thread, nodeId, coreId); - - if (lastCoreId != initialCoreId && coreIdRead != lastCoreId) + if (coreIdRead != lastCoreId) { coreId++; } - lastCoreId = coreIdRead; + + _processor.AppendThread(thread, nodeId, coreId); } Update();