首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单示例并行示例比简单示例慢

简单示例并行示例比简单示例慢
EN

Stack Overflow用户
提问于 2017-05-20 10:01:26
回答 1查看 1.1K关注 0票数 0
代码语言:javascript
复制
from math import sqrt
from joblib import Parallel, delayed
import time

if __name__ == '__main__':

    st= time.time()
    #[sqrt(i ** 2) for i in range(100000)]  #this part in non parellel
    Parallel(n_jobs=2)(delayed(sqrt)(i ** 2) for i in range(100000))
    print time.time()-st

现在,非平行部分运行0.4秒,并行部分运行18秒。我搞不懂为什么会发生这种事

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-20 10:09:15

并行进程( joblib创建的进程)需要复制数据。想象一下:你有两个人每人把一块石头搬到自己的房子里,把它擦亮,然后把它拿回来。这比一个人当场照耀他们的速度要慢。

所有的时间都浪费在运输上,而不是花在实际的计算上。对于更实质性的计算任务,您只会从并行过程中获益。

如果您关心加速这个特定的操作:使用numpy的矢量化数学操作。在我的机器上,并行: 1.13,串行: 54.6 ms,numpy: 3.74 ms。

代码语言:javascript
复制
    a = np.arange(100000, dtype=np.int)
    np.sqrt(a ** 2)

不要担心像Cython或Numba这样的库;它们不会加快这个已经执行的操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44084513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档