Я разделил MPI_COMM_WORLD на два суб-коммуникатора, и я хочу передать массив данных, распределенных по MPI_COMM_WORLD, на два суб-коммуникатора. Каков наилучший способ сделать это в MPI-1.1?
Например, существует массив A = [1 2 3 4 5 6 7 8]
распределенный между четырьмя процессами MPI в MPI_COMM_WORLD следующим образом
rank 0: [1 2]
rank 1: [3 4]
rank 2: [5 6]
rank 3: [7 8]
Я разделил MPI_COMM_WORLD на два суб-коммуникатора, составляющих два процесса MPI, и хочу, чтобы мои данные были такими:
subcommunicator1:
rank 0: [1 2 3 4]
rank 1: [5 6 7 8]
subcommunicator2:
rank 0: [1 2 3 4]
rank 1: [5 6 7 8]
Невозможно отправить данные с одного коммуникатора другому. В MPI коммуникаторы специально предназначены для связи в группах. В вашем случае вам нужно будет распространять свои данные до разделения MPI_COMM_WORLD
. Как вы это сделаете, это зависит от ваших данных и желаемого распространения. Вам, вероятно, потребуется посмотреть MPI_SCATTER
, MPI_GATHER
или и то, и другое.
MPI_COMM_WORLD
чтобы сообщения могли продолжать передаваться между процессами в разных (под) коммуникаторах? Или я что-то пропустил? Я давно не пользовался группами и межкоммуникаторами.