CPU密集型线程智慧

bob*_*obo 4 windows cpu multithreading

我想在一台机器上运行一批20个CPU密集型comps(基本上很长时间嵌套for循环).

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

如果机器有N个核心,那么我应该将这些工作中的N-1分开吗?还是N?或者我应该只启动所有20,并让Windows弄清楚如何安排它们?

Ree*_*sey 5

不幸的是,没有简单的答案.确切知道的唯一方法是实现然后分析您的应用程序.

通常,为了获得最大吞吐量,如果作业是纯CPU,则每个核心需要一个.根据工作类型,这将包括每个超线程代码一个或每个"真正的物理核心"一个.(如果所有20个工作的工作相同,那么超线程通常会减慢整体工作......)

如果作业具有任何非CPU功能(例如读取文件,等待任何事情等),那么每个核心> 1个工作项往往要好得多.在许多情况下,这将会改善.