У меня есть фрагмент кода, который использует mpi4py для создания нескольких экземпляров исполняемого файла mpi. Я хочу, чтобы код останавливался, пока эти процессы завершаются, а затем вызывал вторую группу того же исполняемого файла.
Проблема в том, что все вызовы исполняемого файла mpi запускаются немедленно.
Кажется, что нет никакого способа использовать барьер, чтобы предотвратить это. Кто-нибудь знает, правильно ли это, и если да, то есть ли у кого-нибудь блестящая идея, чтобы получить нужный мне результат.
#!/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()
directory=os.path.join(cwd,str(rank))
print(rank,directory)
os.chdir(directory)
new_comm.Spawn("SOME_F90_MPI_EXECUTABLE",
args=None,
maxprocs=4)
'''I want to pause here until the spawned processes finish running...'''
new_comm.Barrier()
MPI.COMM_WORLD.Barrier()
print(new_comm.Get_rank())
cwd=os.getcwd()
directory=os.path.join(cwd,str(rank))
print(rank,directory)
os.chdir(directory+"_2")
new_comm.Spawn("SOME_F90_MPI_EXECUTABLE",
args=["> output"],
maxprocs=4)
new_comm.Disconnect()
print("All finished here.....")
Спасибо!