#python #mpi #mpi4py
#python #mpi #mpi4py
Вопрос:
В настоящее время я использую mpi4py, и у меня есть куча процессов, которые генерируют списки кортежей (или массивы кортежей numpy). В конце каждого процесса я хочу вызвать allgather, чтобы каждый процесс получал каждый список (в идеале, они объединяются).
К сожалению, документация на странице mpi4py не охватывает allgather() , поэтому мне было интересно, может ли кто-нибудь мне помочь. Я не понимаю, нужно ли мне использовать allgather() или allgatherv() или Allgather(), и, по сути, как это будет работать, поскольку я не разбрасываю какие-либо данные заранее.
Комментарии:
1. Хотя scatter и gather являются взаимодополняющими операциями и часто используются в тандеме, ничто не мешает вам использовать каждую из них по отдельности для достижения распределения или сбора данных. (All)gather просто берет меньшие фрагменты данных, хранящиеся локально в каждом ранге, и объединяет их в большую часть. Для фрагментов разного размера вам нужно
Allgatherv()
. Поскольку ему необходимо знать размер данных в каждом ранге, вам нужно сначалаAllgather()
указать длину массива.2. GitHub — хороший способ найти примеры того, как все работает. Поиск
comm.Allgatherv
в коде Python дает большой результат. Вот один из них .