Я пытаюсь установить связь между двумя коммуникаторами, используя mpi4py . Эти два коммуникатора возникли в результате разделения родительского коммуникатора.
Я разделил существующий коммуникатор, используя mpi.comm.split , разделив коммуникатор на группы с равным количеством узлов.
например. Я взял 12 узлов, разделил их на 3 группы по 4 узла в каждой
Каждый узел имеет некоторые данные, инициализированные для него. Затем мне нужно перенести некоторые данные из одной группы в другую (вот куда я иду по невежеству).
Я также посмотрел код здесь
Код, который я пробовал, выглядит следующим образом:
import mpi4py
from mpi4py import MPI
MPI.Init()
comm=MPI.COMM_WORLD
size = comm.Get_size() # Should be 12
rank = comm.Get_rank() # Rank of the process
# Total 12 processors
# Create 3 groups
groupSize = 3
group = comm.Get_group()
subGroup = rank // groupSize
# Split the communicator
subComm = MPI.Comm.Split(comm, subGroup, rank)
subSize, subRank = subComm.Get_size(), subComm.Get_rank()
# Initialize the data at every process
data = {}
data = {0: rank, 1: 'rank', 2: 'size', 3: size}
# Need to exchange the data - at rank 0 of every group
# - between groups
# - take from previous group, send to next group
# - group 0 rank 0 takes from group 2 rank 0
# - group 1 rank 0 takes from group 0 rank 0
# - group 2 rank 0 takes from group 1 rank 0
# - and sends respectively
Когда я пытаюсь использовать приведенный ниже код, это занимает время и ни к чему не приводит
comm01= comm.Create_intercomm(0, subComm, 1, tag=rank)