I have a client running a system with dual Xeon Platinum 8160 hyperthreaded 24 core CPUs and Windows 10 Pro for Workstations 64 bit. When he runs my app, Environment.ProcessorCount reports there are 32 logical processors available for use by the CLR. The client spent a lot of money on this system and wants my app to utilize all 96 logical processors. No problem! Based on Microsoft's documentation, I've made the following settings to my app.config
<runtime>
<Thread_UseAllCpuGroups enabled="true"/>
<GCCpuGroup enabled="true"/>
<gcServer enabled="true"/>
</runtime>
This should allow the CLR and my app access to all the logical processors present on the client's machine. But sadly, Environment.ProcessorCount still reports 32 instead of 96. What am I missing?
I've checked that his system has 2 processor groups of 48 logical processors each. Two NUMA cores which map to the two physical sockets. So if I wasn't truly given access to both processor groups, I could see Environtment.ProcessorCount giving me a result of 48, but I have no idea where it's getting 32 from.
Update
I had this client run Eric Ouellet's SharpTestProcessorThreading app. These were his results:
Client SharpTestProcessorThreading results
So the big question remaining in my mind is why does WMI report 96 global logical processors and Environment.LogicalProcessorCount report 48 Global logical processors? Is the zero bit processor mask on the second NUMA node a problem that could lead to the mismatch in logical processor count?