Копировать данные между коммуникаторами MPI

0

Я разделил 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

1 ответ

3
Лучший ответ

Невозможно отправить данные с одного коммуникатора другому. В MPI коммуникаторы специально предназначены для связи в группах. В вашем случае вам нужно будет распространять свои данные до разделения MPI_COMM_WORLD. Как вы это сделаете, это зависит от ваших данных и желаемого распространения. Вам, вероятно, потребуется посмотреть MPI_SCATTER, MPI_GATHER или и то, и другое.

  • 0
    Есть сайт с некоторыми довольно хорошими учебными пособиями, доступными по адресу: mpitutorial.com (и хотя он написан "Уэсом", он не такой, как у меня)
  • 1
    Нет способа отправить данные с одного коммуникатора на другой. Конечно, каждый процесс сохраняет свое членство (и ранг) в MPI_COMM_WORLD чтобы сообщения могли продолжать передаваться между процессами в разных (под) коммуникаторах? Или я что-то пропустил? Я давно не пользовался группами и межкоммуникаторами.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню