My 16-Thread CPU Booted With 8, and Windows Wasn't Lying
A Ryzen 7 9800X3D showing 8 logical processors with SMT "enabled" in the BIOS. I went down to the ACPI tables to prove where the threads went.
My workstation's Ryzen 7 9800X3D should show 16 logical processors. Windows said 8, and the BIOS said SMT was enabled. The usual checklist came up empty: no boot-config processor cap, nothing in msconfig, no tuning utilities, and VBS off.
To settle whether Windows or the firmware was at fault, I read the ACPI MADT table directly with GetSystemFirmwareTable. That table is the firmware's list of CPUs it hands to the OS. It showed 8 enabled and 24 disabled entries. So the firmware was giving Windows 8 CPUs at POST, whatever the setup menu claimed. Two gotchas along the way: the provider signature for that call is byte-reversed, and Win32_Processor.ThreadCount happily reports 16, because it describes what the chip can do, not what's enabled.
The fix was a BIOS update, and even that had a catch. Q-Flash listed the file on my NVMe's EFI partition but couldn't read it, so I made a small FAT32 partition on an external drive and flashed from there. After the flash: 16 enabled entries in the MADT, 16 threads in Windows, and the RAM back at 6000 after re-enabling EXPO.
On an X3D chip, losing SMT barely shows in games. It shows plenty in compiles and encodes. More useful than the fix itself: when the OS and the firmware disagree, read the table the firmware actually hands over and stop arguing with settings screens.