为什么我的应用程序的性能不会随着CPU的增加而扩展?

时间:2012-11-06 22:40:51

标签: shell parallel-processing multiprocessing

我正在运行一个非常平行的软件。我需要运行大约400个命令,它们根本不相互依赖,因此我只是将它们分开并希望并且拥有更多CPU意味着每单位时间执行更多进程。

代码:

foreach cmd ($CMD_LIST)
    $cmd &    #fork it off
end

很简单。以下是我的测试结果:

在1个CPU上,这需要1006秒,或16分46秒。

有10个CPU,这需要600s,或10分钟!

为什么时间不会(大致)除以10?我觉得这里被骗=(

编辑 - 当然我愿意提供您想要了解的其他详细信息,但不确定哪些是相关的,因为最简单的说法就是我正在做的事情。

1 个答案:

答案 0 :(得分:3)

您假设您的进程100%受CPU限制。

如果您的进程执行任何磁盘或网络I / O,则瓶颈将出现在那些无法并行化的操作上(例如,一个进程将以100k / s的速度下载文件,2个进程以50k / s的速度下载,因此您可以没有看到任何改进,此外,由于开销,您可能会遇到性能下降。

请参阅:Amdahl's_law - 这可以让您在并行化任务时估算性能的提升,了解并行化部分与非并行化部分之间的比例)