0
我有一段代码使用mpi4py来产生mpi exectuable的几个实例。我希望代码在这些进程完成时暂停,然后调用第二组相同的可执行文件。生成mpi4py进程后的屏障
问题是,所有对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.....")
谢谢!
太好了 - 谢谢Zulan。如果我正在循环产卵过程,在进入第二次循环之前是否需要断开/释放产卵返回的互通器? – abinitio
我相信你应该断开intercommunicator,但我不完全确定标准是否指定。 – Zulan
我不知道为什么,但f90可执行文件似乎在产生后挂起,尽管看起来已经完成 - 即所有的输出都完成了。当我运行f90可执行文件而无需从python脚本调用它时,它应该只需要几分之一秒,但是当它通过生成运行时,它会挂起几分钟。这是你之前注意到的吗? – abinitio