微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Joblib 需要比简单循环更长的时间

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?