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

苏米亚
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 秒..我很困惑为什么会发生这种情况

艾莉亚·麦卡锡

并行进程(joblib创建)需要复制数据。想象一下:你有两个人,每个人都拿着一块石头到他们家,照亮它,然后把它带回来。这比一个人在现场照耀它们要慢。

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


如果您关心加快此特定操作的速度:请使用numpy的矢量化数学运算。在我的机器上,并行:1.13 秒,串行:54.6 毫秒,numpy:3.74 毫秒。

    a = np.arange(100000, dtype=np.int)
    np.sqrt(a ** 2)

不要担心像 Cython 或 Numba 这样的库;他们不会加速这个已经高性能的操作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章