我在集群计算设备上尝试了以下python程序,包括顺序和并行版本。我可以清楚地看到(使用top命令)启动并行程序的更多进程。但是,当我计时时,似乎并行版本需要更多时间。可能是什么原因?我附上了代码和时间信息。
#parallel.py
from multiprocessing import Pool
import numpy
def sqrt(x):
return numpy.sqrt(x)
pool = Pool()
results = pool.map(sqrt, range(100000), chunksize=10)
#seq.py
import numpy
def sqrt(x):
return numpy.sqrt(x)
results = [sqrt(x) for x in range(100000)]
user@domain$ time python parallel.py > parallel.txt
real 0m1.323s
user 0m2.238s
sys 0m0.243s
user@domain$ time python seq.py > seq.txt
real 0m0.348s
user 0m0.324s
sys 0m0.024s
答案 0 :(得分:1)
每项任务的工作量远远不足以弥补工作分配开销。首先,您应该增加chunksize
,但仍然只有一个平方根操作太短,无法弥补在进程之间发送数据的成本。您可以从以下内容中看到有效的加速:
def sqrt(x):
for _ in range(100):
x = numpy.sqrt(x)
return x
results = pool.map(sqrt, range(10000), chunksize=100)