2016-09-21 21 views
1

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

誰でも.....これが起こっている理由として

感謝を任意の鮮やかなアイデアを持っています!

+2

「test.py」ラッパーで何を達成しようとしていますか?私はあなたが 'spawn(SOME_MPI_EXECUTABLE_HERE)、... 'とされていると信じています。 – Zulan

+0

私が呼び出すMPI_EXECUTABLE_HEREはPythonで書かれていないため、sys.executableインタプリタでは実行されないため、ラッパーが必要です。 Fortranで書かれたPythonスクリプト内で呼び出すmpiコードの部分。 – abinitio

+0

私は@ Zulanに同意します。あなたはMPI_Spawnを使って直接実行ファイルを起動する必要があります。 –

答えて

2

次のコードは、私が望むやり方をしているようです。

#!/usr/bin/env python 
from mpi4py import MPI 
import numpy 
import sys 
import os 

rank = MPI.COMM_WORLD.Get_rank() 
new_comm = MPI.COMM_WORLD.Split(color=rank, key=rank) 
print(new_comm.Get_rank()) 

cwd=os.getcwd() 
os.mkdir(str(rank)) 
directory=os.path.join(cwd,str(rank)) 
print(rank,directory) 
os.chdir(directory) 


new_comm.Spawn("SOME_MPI_EXECUTABLE_HERE", 
        args=[""], 
          maxprocs=4) 

実行:

mpirunの--oversubscribe -np 4 parent.py

は、それぞれ4つのコア上で実行されているSOME_MPI_EXECUTABLEの4つのインスタンスを起動するようです。

(Zulanに感謝します)

+0

元の質問の@Hristoのコメントはまだ適用されます。 'new_comm'を作成する代わりに、単に' MPI.COMM_SELF.Spawn'を使うだけです。これはあなたがここに投稿したコードと同じ結果をもたらし、この答えをもっと助けにします(私はこの答えから始めました、おかげさまでbtw。そして、 'Split'、' color '、' key'のように) – Bananach

関連する問題