【发布时间】:2016-05-11 10:28:58
【问题描述】:
我想使用 mpi4py 来并行化优化问题。为了最小化我的功能,我使用了 scipy 中的最小化例程
from scipy.optimize import minimize
def f(x, data) :
#returns f(x)
x = minimize(f, x0, args=(data))
现在,如果我想使用 mpi4py 并行化我的函数。最小化算法的实现是顺序的,只能在一个进程上运行,所以只有我的函数是并行化的,这不是问题,因为函数调用是最耗时的步骤。但我不知道如何使用并行和顺序部分来实现这个问题。
这是我的尝试:
from scipy.optimize import minimize
from mpi4py import MPI
comm = MPI.COMM_WORLD
size = comm.Get_size()
rank = comm.Get_rank()
N = 100 # for testing
step = N//size # say that N is divisible by size
def mpi_f(x, data) :
x0 = x[rank*step:(rank+1)*step]
res = f(x0, data)
res = comm.gather(res, root=0)
if rank == 0 :
return res
if rank == 0 :
x = np.zeros(N)
xs = minimize(mpi_f, x, args=(data))
这显然是行不通的,因为 mpi_f 只在进程 0 上运行。所以我问我应该如何进行?
谢谢。
【问题讨论】:
标签: python multiprocessing mpi4py