Код:Почему Gather() терпит неудачу, если корень каждого процесса сам по себе?
#mpiexec -n 2 python3 gather.py
from mpi4py import MPI
comm = MPI.COMM_WORLD
rank = comm.Get_rank()
a = 1
comm.barrier()
b = comm.gather(a, root=rank)
print("b:", b, rank)
comm.barrier()
Выход должен быть:
б: [1, 1], 0
б: [1, 1], 1
Однако , программа ничего не печатает и не заканчивается. В чем причина этого и как я могу достичь желаемого результата?
Я _think_, что _every_ процесс должен указывать один и тот же корень (чтобы все знали, куда отправлять данные). Прямо сейчас, каждый процесс определяет себя как корень, поэтому все они думают, что они приемники и просто сидят там, ожидая, когда кто-то еще отправит их данные. – mgilson
@mgilson Это звучит логично. Знаете ли вы, как еще я могу достичь желаемого результата? Я не хочу использовать AllGather() btw. – SpiderRico
Я думаю, что это зависит от желаемого результата _is_. Обычно идея состоит в том, чтобы собрать все данные о других процессах в указанный процесс. Вы знаете, какой процесс вы хотите собрать? – mgilson