Как распечатать распределенные данные в процессе, который не является узлом root? - PullRequest
0 голосов
/ 08 апреля 2020

Я очень новичок в программировании MPI, а также немного новичок в Python.

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

Однако сбор, похоже, не работает, и когда я попытался распечатать распределенные данные на каждом узле, консоль напечатала только данные узла root (у меня есть 4 узла для обработки, включая узел root) )

вот краткая структура и код программы:

from mpi4py import MPI

comm = MPI.COMM_WORLD # communicator object containing all processes
size = comm.Get_size()
rank = comm.Get_rank() 
dest = size
buffer = []

#read data file and extract data to send  
....
#distribute parsed data one by one to other node
if rank == 0: #root node

##for each data to send 
    if dest != 0:
        comm.send(data, dest)
        dest -=1
    else: 
        dest = size
        # add data to buffer 
        buffer.append(data)

#broadcast end of file to other nodes


else: #not root node

  while True:
    receive = comm.recv(source=0)

    #add received data to prepared buffer until end_flag is received 
    ....

comm.gather(buffer,root = 0)
print(rank,">",len(buffer))

Но когда я запускаю эту программу в консоли с помощью команды mpi, программа заклинивает, когда я запускаю эту и только она выведите root длину буфера узла, если я комментирую часть "comm.gather (buffer, root -0)". Как я могу заставить метод сбора работать должным образом и как распечатать распределенные данные на других узлах?

...