首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# parallel.for循环完全使用CPU1的核心,但不使用CPU2。

C# parallel.for循环完全使用CPU1的核心,但不使用CPU2。
EN

Stack Overflow用户
提问于 2016-04-18 14:44:48
回答 1查看 2.1K关注 0票数 3

一种使用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位

EN

回答 1

Stack Overflow用户

发布于 2016-04-18 14:56:56

我在这里猜-你的两个CPU是在两个不同的处理器组。默认情况下,.NET只使用一个处理器组。

扩展这种支持所需的最小配置如下:

代码语言:javascript
复制
<configuration>
   <runtime>
      <Thread_UseAllCpuGroups enabled="true"/>
      <GCCpuGroup enabled="true"/>
      <gcServer enabled="true"/>
   </runtime>
</configuration>

有关参考,请参见UseAllCpuGroups处理器组

这在Environment.ProcessorCount的MSDN文档中也有描述。

如果当前计算机包含多个处理器组,则此属性返回可供公共语言运行库(CLR)使用的逻辑处理器数量。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36697267

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档