Jus*_*tin 5 .net c# cpu multicore
好吧,所以我发布在In C#GetEnvironmentVariable("NUMBER_OF_PROCESSORS")中返回错误的数字,询问如何在C#中获取正确数量的内核.一些乐于助人的人向我提出了几个问题类似的问题,但我已经尝试过这些解决方案.然后我的问题被关闭,因为它与另一个问题是一样的,这是真的,但是,那里给出的解决方案没有用.所以我打开另一个希望有人能够帮助实现其他解决方案无法正常工作.
那个问题是如何通过.NET/C#找到CPU内核的数量?它使用WMI来尝试获取正确数量的内核.好吧,这是给出的代码的输出:
Number Of Cores: 32
Number Of Logical Processors: 32
Number Of Physical Processors: 4
Run Code Online (Sandbox Code Playgroud)
根据我的上一个问题,该机器是运行Windows Server 2008 R2 HPC版本的64核AMD Opteron 6276(4x16核心).
无论我做什么,Windows似乎总是返回32个核心,即使64个可用.我已经确认机器只使用32,如果我硬编码64个核心,那么机器会使用所有这些.我想知道AMD CPU的检测方式是否存在问题.
仅供参考,如果您还没有阅读上一个问题,如果我在命令行输入echo%NUMBER_OF_PROCESSORS,它将返回64.它只是不会在编程环境中执行.
谢谢,贾斯汀
更新:输出PROCESSOR_ARCHITECTURE从命令行返回AMD64,但从程序返回x86.该程序在64位硬件上运行32位.我被要求将其编译为64位,但它仍然显示32个核心.
谢谢你的帮助,但我发现了问题.正如我所料,这是由于AMD的设计.他们正在使用一种名为MCM(我认为是多芯片模块)的新架构,导致Windows无法正确识别核心数量.我发布这个作为解决方案,万一其他人遇到它.一位工作伙伴指导我访问http://support.microsoft.com/kb/2711085上提供的修补程序