У меня есть кусок кода, который использует 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
Я считаю, что вам следует отключить межкоммуникатор, но я не совсем уверен, соответствует ли стандарт этому. – Zulan
Я не уверен, почему, но исполняемый файл f90, кажется, виснет после того, как его породили, несмотря на то, что он был, казалось бы, закончен, т. Е. Весь выход был выполнен. Когда я запускаю исполняемый файл f90, не вызывая его из скрипта python, он должен занимать долю секунды, но когда он запускается, будучи порожденным, он висит около нескольких минут. Это то, что вы заметили раньше? – abinitio