自从我从python3.5升级到3.6后,使用joblib进行并行计算时未能减少计算时间。
以下是安装的库版本:
- python: 3.6.3
- joblib: 0.11
- numpy: 1.14.0
基于一个非常著名的例子,以下是一个可重现该问题的示例代码:
我得到了以下输出:
基于一个非常著名的例子,以下是一个可重现该问题的示例代码:
import time
import numpy as np
from joblib import Parallel, delayed
def square_int(i):
return i * i
ndata = 1000000
ti = time.time()
results = []
for i in range(ndata):
results.append(square_int(i))
duration = np.round(time.time() - ti,4)
print(f"standard computation: {duration} s" )
for njobs in [1,2,3,4] :
ti = time.time()
results = []
results = Parallel(n_jobs=njobs, backend="multiprocessing")\
(delayed(square_int)(i) for i in range(ndata))
duration = np.round(time.time() - ti,4)
print(f"{njobs} jobs computation: {duration} s" )
我得到了以下输出:
- 标准计算:0.2672秒
- 1个作业的计算:352.3113秒
- 2个作业的计算:6.9662秒
- 3个作业的计算:7.2556秒
- 4个作业的计算:7.097秒
当我将ndata的数量增加10倍并删除1个核心计算时,我得到了以下结果:
- 标准计算:2.4739秒
- 2个作业的计算:77.8861秒
- 3个作业的计算:79.9909秒
- 4个作业的计算:83.1523秒
有没有人对我应该探究哪个方向有想法?