首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CPU密集型线程智慧

CPU密集型线程智慧
EN

Stack Overflow用户
提问于 2011-06-03 04:13:23
回答 3查看 195关注 0票数 4

我想在一台机器上运行批处理,比如20个CPU密集型比较(基本上是非常长的嵌套for循环)。

这20个作业中的每一个都不与其他19个作业共享数据。

如果机器有N个内核,我是否应该剥离其中的N-1个作业?或者N?或者我应该启动所有的20个,并让Windows找出如何安排它们?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-06-03 04:16:41

不幸的是,没有简单的答案。唯一确定的方法是实现并分析您的应用程序。

通常,为了获得最大吞吐量,如果作业是纯CPU作业,则每个核心需要一个作业。根据工作类型的不同,这将包括每个超线程代码一个或每个“真正的物理核心”一个。(如果所有20个作业的工作都是相同的,那么超线程通常会降低整个工作的速度……)

如果作业具有任何非CPU功能(例如读取文件、等待任何内容等),那么每个内核>1个工作项往往更好。对于许多情况,这将会有所改善。

票数 5
EN

Stack Overflow用户

发布于 2011-06-03 04:16:20

通常,如果您不共享数据,不阻塞IO,并且使用大量CPU而没有在计算机上运行其他任何东西(可能还有更多的警告),那么使用所有CPU(例如N个线程)可能是最好的想法。

最好的选择可能是让它成为可配置的,并分析它,看看会发生什么。

票数 3
EN

Stack Overflow用户

发布于 2011-06-03 04:17:05

您应该使用某种类型的线程池,以便在不影响程序结构的情况下(合理地)轻松地调整线程的数量。

完成这项工作后,就可以通过测试找到与可用处理器数量相关的合理的最佳线程数量。有可能的是,即使它们看起来像是纯粹的CPU限制,当线程数>N时,您也会获得更好的效率,但确定的唯一方法是测试。

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

https://stackoverflow.com/questions/6219830

复制
相关文章

相似问题

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