我正在尝试在 mpi4py 中实现父/子配置。我的目标是
父级:将在 1 个核心上运行
child : 将在 N 个内核上运行
我正在尝试将数据从父母发送到孩子的 rank=0。
试过这个:
掌握:
从 mpi4py 导入 MPI 导入系统
def main():
datafileopls='MEDIUM2_opls.lmp'
lammpscomm = MPI.COMM_SELF.Spawn(sys.executable,
args=['/storage/home/duy42/Developer/MLReax/Src3/lammps_driver.py'
],maxprocs=9)
lammpscomm.send(datafileopls,0,0)
current_step = lammpscomm.recv(None,0,0)
print(current_step)
lammpscomm.Disconnect()
if __name__ =='__main__':
main()
孩子:
def main():
parent = MPI.Comm.Get_parent()
comm = MPI.COMM_WORLD
assert parent != MPI.COMM_NULL
try:
status = MPI.Status()
any_src , any_tag = MPI.ANY_SOURCE, MPI.ANY_TAG
print(parent.Get_rank(),comm.Get_rank(),status.source)
if comm.Get_rank() == 0:
print('LAMMPS DRIVER CONNECTED')
datafileopls = parent.recv(None,any_src, any_tag, status)
current_step = 123
parent.send(current_step,status.source,0)
finally:
parent.Disconnect()
print('All done')
return
if __name__ == "__main__":
main()
代码在向父级发送数据之前挂起。我在这里缺少什么?
提前致谢。