python - 用于 Python 的 Parfor

标签 python matlab parallel-processing

我正在寻找 MATLAB parfor for Python(Scipy、Numpy)的明确答案。

有没有类似parfor的解决方案?如果不是,创建一个的复杂性是什么?

更新:这是我需要加速的典型数值计算代码

import numpy as np

N = 2000
output = np.zeros([N,N])
for i in range(N):
    for j in range(N):
        output[i,j] = HeavyComputationThatIsThreadSafe(i,j)

一个重计算函数的例子是:

import scipy.optimize

def HeavyComputationThatIsThreadSafe(i,j):
    n = i * j

    return scipy.optimize.anneal(lambda x: np.sum((x-np.arange(n)**2)), np.random.random((n,1)))[0][0,0]

最佳答案

python 内置的一个是 multiprocessing 文档是 here .我总是使用 multiprocessing.Pool 与处理器一样多的 worker 。然后,每当我需要做一个类似 for 循环的结构时,我都会使用 Pool.imap

只要你的函数体不依赖于任何先前的迭代,那么你应该有接近线性的加速。这还要求您的输入和输出是 pickle 的,但这对于标准类型很容易确保。

更新: 更新函数的一些代码只是为了展示它是多么容易:

from multiprocessing import Pool
from itertools import product

output = np.zeros((N,N))
pool = Pool() #defaults to number of available CPU's
chunksize = 20 #this may take some guessing ... take a look at the docs to decide
for ind, res in enumerate(pool.imap(Fun, product(xrange(N), xrange(N))), chunksize):
    output.flat[ind] = res

关于python - 用于 Python 的 Parfor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4682429/

相关文章:

parallel-processing - 当输入并行计算生成的序列时,为什么 Frame.of Records 的结果会出现乱码?

parallel-processing - PRAM(并行随机存取机)模拟器

python - 如何在 Sklearn 管道中使用 SMOTE 来解决 NLP 分类问题?

python - 如何判断服务器断线(以太网线被切断的情况)

python - 通过 Dataframe 的字符串拆分循环

python - 在 python 中运行 matlab 代码

python - 如何在 Python 的 Flask 中识别通过 AJAX 发出的请求?

matlab - 为什么我不能让卷积在 MATLAB 中正常工作?

matlab - 根据波长为 Matlab 图着色

c - 在 C 中使用 openMP 并行化函数