4

简单的问题。MaxDegreeOfParallelism决定最佳值

您如何确定MaxDegreeOfParallelism的最佳值适用于任何给定的算法?需要考虑哪些因素以及哪些是取舍?

+1

其具体到每个算法[Amdahl's Law](http://en.wikipedia.org/wiki/Amdahl%27s_law) – 2011-03-23 07:07:21

+0

@Sanjeevakumar Hiremat很明显,这是我的观点,所以如何在不使用强力方法的情况下做出决定?尽管感谢链接。将阅读。 – 2011-03-24 04:12:39

回答

9

我认为这取决于,如果你所有的任务都是“CPU绑定”,它可能会等于你的机器中的CPU数量。不过,如果你的任务是“IO界限”,你可以开始增加数量。

当CPU必须从一个线程切换到另一个线程(上下文切换)时,它会产生成本,所以如果使用太多的线程并且CPU一直在切换,则会降低性能。另一方面,如果你限制了这个参数太多,并且这些操作很长的“IO绑定”操作,并且CPU处于闲置状态等待这些任务完成的时间很长......你没有充分利用你的机器的资源(这是多线程是关于什么)

我认为这取决于每个算法,因为@ Amdahls定律指出,并没有一个主要的经验法则,你可以遵循,你将不得不计划它和tun it:D

干杯。

2

对于本地计算密集型进程,您应该尝试两个值;

  • 数量的物理核心或处理器的
  • 数量的虚拟内核(包括物理超线程)

其中之一就是在我的经验最佳。有时使用超线程会减慢速度,通常这会有所帮助。在C#中使用Environment.ProcessorCount来查找包含超线程伪造内核的内核数量。实际的物理内核更难以确定。检查其他问题。

对于必须等待资源(db查询,文件检索)的进程可以提供帮助。如果必须等待80%的进程繁忙时间,则经验法则是为它启动5个线程,以便一个线程随时处于繁忙状态。最大化5x20%每个过程需要在本地。