0

我之前通过 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

你能告诉我结果对你来说是否正常,如果是,为什么计算时间会有如此巨大的差异?

最好的问候,弗拉维恩。

4

1 回答 1

1

并行处理不是免费的。将工作项发送给客户端并随后接收结果会产生成本,称为开销。您的原始工作需要 43 µs,这太短了。在并行处理变得有益之前,您需要拥有更大的工作项目。一个简单的经验法则是,每个工作人员至少应该花费大约 10 倍的开销来处理其工作项。尝试使用包含 100 万个元素甚至更大的向量。

于 2014-10-06T15:57:57.747 回答