mpi4pyを使用して最適化問題を並列化したいと考えています。私はmpi4pyを使用して、私の機能を並列化したい場合は、私の機能を最小限に抑えるために、私は、scipyのダウンロードmpi4pyで関数呼び出しを並列化する
今from scipy.optimize import minimize
def f(x, data) :
#returns f(x)
x = minimize(f, x0, args=(data))
から最小化ルーチンを使用します。最小化アルゴリズムの実装は順次であり、1つのプロセスでしか実行できないので、関数呼び出しはほとんどの時間を要するため、問題はない。しかし、この問題を実装する方法を、パラレルとシーケンシャルの部分で把握することはできません。ここで
は私の試みです: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上で実行されますので、これは明らかに動作していませんか?
ありがとうございました。