python - 使用 Python Joblib 的双并行循环

标签 python parallel-processing joblib

美好的一天

我正在尝试加快涉及许多独立集成的计算速度。为此,我使用 python Joblib 和多处理。到目前为止,我已经成功地并行化了计算的内部循环,但我想对外部循环做同样的事情。由于并行编程扰乱了我的思维,我想知道是否有人可以帮助我。到目前为止我已经:

 from joblib import Parallel, delayed
import multiprocessing

N = 10 # Some number
inputs = range(1,N,2)
num_cores = multiprocessing.cpu_count()

def processInput(n):
    u_1 = lambda x,y: f(x,y)g(n,m) # Some function
    Cn = scintegrate.nquad(u_1, [[A,B],[C,D]]) # A number
    return Cn*F(x,y)*G(n,m)

resultsN = []

for m in range(1,N,2):  # How can this be parallelized? 
    add = Parallel(n_jobs=num_cores)(delayed(processInput)(n) for n in inputs)
    resultsN = add + resultsN

resultsN = sum(resultsN)

到目前为止,这已经产生了正确的结果。现在我想对外循环做同样的事情。有谁知道我该怎么做?

我还想知道 u_1 声明是否可以在 processInput 之外完成,并且任何其他改进建议将不胜感激。

感谢您的回复。

最佳答案

如果我理解正确的话,您可以针对一系列 n 值运行函数 processInput(n),并且您需要执行该操作 m 次并将所有内容加在一起。在这里,索引m仅记录您想要运行处理函数的次数并将结果加在一起,而没有其他内容。这使您只需一层并行性即可完成所有操作,即创建已包含重复值的输入列表,并将该工作负载分配给您的核心。快速的直觉是,您可以并行运行输入 [1,1,1,而不是并行处理输入 [1,2,3,4] 然后多次执行该操作,2,2,2,3,3,3,4,4,4]。它可能如下所示(我已将您的函数更改为可以运行的更简单的函数)。

import numpy as np
from joblib import Parallel, delayed
import multiprocessing
from math import ceil

N = 10 # Some number
inputs = range(1,N,2)
num_cores = multiprocessing.cpu_count()

def processInput(n): # toy function
    return n

resultsN = []
# your original solution with an additional loop that needs
# to be parallelized
for m in range(1,N,2):  
    add = Parallel(n_jobs=num_cores)(delayed(processInput)(n) for n in inputs)
    resultsN = add + resultsN
resultsN = sum(resultsN)
print resultsN

# solution with only one layer of parallelization
ext_inputs = np.repeat(inputs,ceil(m/2.0)).tolist()
add = Parallel(n_jobs=num_cores)(delayed(processInput)(n) for n in ext_inputs)
resultsN = sum(add)
print resultsN 

ceil 是必需的,因为在原始循环中 m 会跳过每个第二个值。

关于python - 使用 Python Joblib 的双并行循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41137712/

相关文章:

python - Tensorflow:如何在调用 tf.reduce_sum 时忽略数组的一部分

python - Python 中的并行 SSH

c# - 并行查询 OrderBy 和 ForAll 放置

c - 私有(private)寄存器变量|开放MP

Python 中的 C# BitConverter.ToSingle 等价物

python - 在 C 中访问另一个程序的变量

r - Create_Matrix 'RTextTools' 包的并行计算

scikit-learn - 多处理支持的并行循环不能嵌套在线程下

flask - python : Erratic joblib behaviour on Flask

python - 使用 python joblib 访问和更改全局数组