好的,所以我发布了在 C# 中 GetEnvironmentVariable("NUMBER_OF_PROCESSORS") 返回错误的数字 https://stackoverflow.com/questions/11571994/in-c-sharp-getenvironmentvariablenumber-of-processors-returns-the-wrong-numb询问如何在 C# 中获得正确的核心数量。一些乐于助人的人向我提出了几个问题,其中提出了类似的问题,但我已经尝试过这些解决方案。然后我的问题被关闭,因为与另一个问题相同,这是事实,但那里给出的解决方案不起作用。因此,我正在打开另一个解决方案,希望有人能够帮助认识到其他解决方案不起作用。
那个问题是如何通过.NET/C# 查找CPU 核心数? https://stackoverflow.com/questions/1542213/how-to-find-the-number-of-cpu-cores-via-net-c它使用 WMI 来尝试获取正确的核心数量。好吧,这是那里给出的代码的输出:
Number Of Cores: 32
Number Of Logical Processors: 32
Number Of Physical Processors: 4
根据我的最后一个问题,该机器是运行 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 http://support.microsoft.com/kb/2711085
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)