如何解决Joblib 需要比简单循环更长的时间
我正在尝试使用 joblib
并行运行循环。这些循环在一个 3D 数组上运行,其中第四个循环对每个 2D 元素执行操作。我尝试并行运行一个循环比单循环方法花费的时间更长。我做错了什么?
没有joblib
import numpy as np
from joblib import Parallel,delayed
import multiprocessing
t = time.time()
repS=int(20)
arr_ = np.random.rand(3,3,20)
out_2_ = np.full([3,20],np.nan)
for p in range(20):
for trA in range(3):
for trB in range(3):
temp = np.full([repS,1],np.nan)
uAB = np.concatenate((arr_[trA,:,p],arr_[trB,p]))
for rr in range(repS):
rInd = np.random.randint(np.size(uAB,0),size=(np.size(uAB,1))
temp2=np.array([uAB[rInd[0:int(np.size(uAB,0)/2):1]]])
temp[rr] = np.sqrt(np.mean(temp2**2))
out_2_[trA,trB,p] = np.percentile(temp,42)
timeNL = time.time() - t
使用joblib
import numpy as np
from joblib import Parallel,np.nan)
uAB = np.concatenate((arr_[trA,p]))
if __name__ == '__main__':
def segment(rr):
rInd = np.random.randint(np.size(uAB,1))
temp2=np.array([uAB[rInd[0:int(np.size(uAB,0)/2):1]]])
out_ = np.sqrt(np.mean(temp2**2))
return out_
temp = Parallel(n_jobs=-1)(delayed(segment)(rr) for rr in range(repS))
out_2_[trA,42)
timeL = time.time() - t
解决方法
您正在调用多个 (20*3*3
) 作业库并行进程,因此启动和协调这些进程的开销超过了并行处理所节省的时间。
相反,尝试列出要处理的作业(p、trA、trB)并对其进行并行处理。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。