Я очень новичок в программировании 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)". Как я могу заставить метод сбора работать должным образом и как распечатать распределенные данные на других узлах?