Mpi4py - связь между различными коммуникаторами - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь установить связь между двумя коммуникаторами, используя . Эти два коммуникатора возникли в результате разделения родительского коммуникатора.

Я разделил существующий коммуникатор, используя , разделив коммуникатор на группы с равным количеством узлов.

например. Я взял 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)
...