并行进程的数量会如何影响CPU的性能?

时间:2011-10-03 17:16:50

标签: fork parallel-processing scheduling cpu

我正在编写一个并行合并排序程序。我使用fork()来执行并行处理。我尝试运行2个并行进程,4个进程,8个进程等。然后我发现运行2个进程的那个需要最少的时间来完成,即最高的性能。我认为这是合理的,因为我的cpu是core 2 duo。对于4,8,16,32个流程,它似乎有稳定的性能下降,但在此之后性能波动(似乎没有一个模式)。有人可以解释一下吗?

另外根据模式,我感觉当程序中使用的进程数等于我的cpu所具有的核心数时,我的程序可以具有最高性能。但我百分百肯定。有人可以验证我吗?或者告诉我实际影响并行程序性能的原因。

提前致谢!!

2 个答案:

答案 0 :(得分:1)

对于2个内核,任何大于2的进程都必须共享处理器时间。您将从流程切换中产生开销,并且您一次不会执行两个以上的流程。最好只在两个核心上不间断地运行两个进程。

一旦你遇到大量进程,为什么你会看到性能波动,我不得不猜测你的操作系统花费了更多时间在进程之间切换任务而不是实际执行排序工作。切换任务所需的时间是操作系统调度程序的工件,各个任务使用的内存量,缓存,交换空间的潜在使用等等。

如果要最大化并行进程的性能,并发运行的进程数应等于处理器数乘以每个处理器上的核心数。在你的情况下,两个。不管怎么说,你的核心处于空闲状态而没有做任何事情,而且,你有进程闲置等待处理器核心的时间。

答案 1 :(得分:1)

3个进程应该从不比Core 2 Duo上的2个进程更快。

此外,只有在执行CPU成本高昂的任务时,分叉才有意义:

分叉打印消息Hello world!两次是无稽之谈。分叉本身将消耗比可能节省的更多的CPU时间。

使用1,000,000个元素对数组进行排序(如果使用正确的排序算法)将大约减少一半的执行时间。