好的,所以我在 C# 中发布 GetEnvironmentVariable("NUMBER_OF_PROCESSORS") 返回错误的数字,询问如何在 C# 中获取正确的内核数。一些乐于助人的人向我提出了一些类似问题的问题,但我已经尝试过这些解决方案。然后我的问题被关闭,因为它与另一个问题相同,这是真的,但那里给出的解决方案不起作用。所以我正在打开另一个,希望有人能够帮助意识到其他解决方案不起作用。
那个问题是如何通过 .NET/C# 找到 CPU 核心数?它使用 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 个内核。