我正在运行一个非常平行的软件。我需要运行大约400个命令,它们根本不相互依赖,因此我只是将它们分开并希望并且拥有更多CPU意味着每单位时间执行更多进程。
代码:
foreach cmd ($CMD_LIST)
$cmd & #fork it off
end
很简单。以下是我的测试结果:
在1个CPU上,这需要1006秒,或16分46秒。
有10个CPU,这需要600s,或10分钟!
为什么时间不会(大致)除以10?我觉得这里被骗=(
编辑 - 当然我愿意提供您想要了解的其他详细信息,但不确定哪些是相关的,因为最简单的说法就是我正在做的事情。
答案 0 :(得分:3)
您假设您的进程100%受CPU限制。
如果您的进程执行任何磁盘或网络I / O,则瓶颈将出现在那些无法并行化的操作上(例如,一个进程将以100k / s的速度下载文件,2个进程以50k / s的速度下载,因此您可以没有看到任何改进,此外,由于开销,您可能会遇到性能下降。
请参阅:Amdahl's_law - 这可以让您在并行化任务时估算性能的提升,了解并行化部分与非并行化部分之间的比例)