我之前通过MPI(和Fortran :)使用了并行计算。我想现在使用IPython的并行功能。
我的问题与以下代码的糟糕表现有关,受http://ipython.org/ipython-doc/dev/parallel/asyncresult.html启发:
from IPython.parallel import Client
import numpy as np
_procs = Client()
print 'engines #', len(_procs)
dv = _procs.direct_view()
X = np.linspace(0,100)
add = lambda a,b: a+b
sq = lambda x: x*x
%timeit reduce(add, map(sq, X))
%timeit reduce(add, dv.map(sq, X))
一个处理器的结果是:
10000 loops, best of 3: 43 µs per loop
100 loops, best of 3: 4.77 ms per loop
你能否告诉我你的结果是否正常,如果是的话,为什么计算时间会有这么大的差异呢?
祝你好运, Flavien。
答案 0 :(得分:1)
并行处理不是免费的。将作业项发送到客户端并在之后接收称为开销的结果会产生相关成本。您的原始工作需要43μs,这太短了。在并行处理变得有益之前,您需要拥有更大的工作项。一个简单的经验法则是,每个工人应该至少花费10倍的开销来处理其工作项。尝试使用100万个元素的矢量,甚至更大的元素。