mpi4pyを使用して、mpi実行可能ファイルの2番目のインスタンスを呼び出そうとしています。mpi4pyでのmpi呼び出しのネスト
私はエラーになっています:
Open MPI does not support recursive calls of mpirun
をしかし、私はスポーンを処理できるようになっている正確に何である印象の下にあった - すなわち、別のMPIコマンドを起動することができ、その中に新しいコミュニケータを設定します。
テストコード:
parent.py:
#!/usr/bin/env python
from mpi4py import MPI
import numpy
import sys
rank = MPI.COMM_WORLD.Get_rank()
new_comm = MPI.COMM_WORLD.Split(color=rank, key=rank)
print(new_comm.Get_rank())
new_comm.Spawn(sys.executable,
args=['test.py'],
maxprocs=4)
test.pyを呼び出します。
#!/usr/bin/env python
from mpi4py import MPI
import numpy
import os
import sys
comm = MPI.Comm.Get_parent()
rank = comm.Get_rank()
cwd=os.getcwd()
directory=os.path.join(cwd,str(rank))
os.chdir(directory)
os.system('{}'.format('mpirun -np 4 SOME_MPI_EXECUTABLE_HERE'))
print("Finished in "+directory)
os.chdir(cwd)
comm.Disconnect()
私が実行している:使用
mpirun --oversubscribe -np 1 parent.py
gccを使ったopenmpi 2.0.0、python/3.4.2
誰でも.....これが起こっている理由として
感謝を任意の鮮やかなアイデアを持っています!
「test.py」ラッパーで何を達成しようとしていますか?私はあなたが 'spawn(SOME_MPI_EXECUTABLE_HERE)、... 'とされていると信じています。 – Zulan
私が呼び出すMPI_EXECUTABLE_HEREはPythonで書かれていないため、sys.executableインタプリタでは実行されないため、ラッパーが必要です。 Fortranで書かれたPythonスクリプト内で呼び出すmpiコードの部分。 – abinitio
私は@ Zulanに同意します。あなたはMPI_Spawnを使って直接実行ファイルを起動する必要があります。 –