一种使用C#的parallel.for方法完全使用10核cpu中的所有内核(在双Xeon64GRAM windows 10工作站上),但在第二个cpu上不使用任何其他可用的10个物理核。尽管流程的亲和力(在任务管理器中)表示所有的核心都是可用的。有什么想法/方法可以让流程使用所有可用的核心吗?在这种情况下,我确实看到了从标准编码到parallel.for的巨大性能改进;放弃另外100%的速度改进似乎很遗憾。谢谢。
重要的注意事项:在任务管理器中,很明显,流程使用的核心分布在两个Xeon之间。IOW,它使用的核心大约一半的每个CPU。
附加信息: Environment.ProcessorCount = 32。即使系统有20个物理核,因此有40个逻辑核。很明显,这个过程并没有使用所有这32个核心。它最多使用20. FWIW,在一个单独的核心i7-3770上,该过程按预期工作,使用了几乎100%的8个可用逻辑核。
附加2: Luaan建议的配置更改不影响可用处理器的数量:仍然是32个。
附加3: Windows 10 Pro 64位
发布于 2016-04-18 14:56:56
我在这里猜-你的两个CPU是在两个不同的处理器组。默认情况下,.NET只使用一个处理器组。
扩展这种支持所需的最小配置如下:
<configuration>
<runtime>
<Thread_UseAllCpuGroups enabled="true"/>
<GCCpuGroup enabled="true"/>
<gcServer enabled="true"/>
</runtime>
</configuration>有关参考,请参见UseAllCpuGroups和处理器组。
这在Environment.ProcessorCount的MSDN文档中也有描述。
如果当前计算机包含多个处理器组,则此属性返回可供公共语言运行库(CLR)使用的逻辑处理器数量。
https://stackoverflow.com/questions/36697267
复制相似问题