2016-01-16 7 views
0

В настоящее время мы работаем над проектом mpi4py, где мы хотим группировать процессы в разных группах. Затем мы назначаем эти группы своим коммуникаторам. Этапы тезисов выполняются процессом 0.mpi4py - Получить собственный коммуникатор процесса

Теперь вопрос в том, как другие процессы могут узнать, к какому коммуникатору они принадлежат?

Обратите внимание, что группы имеют разные размеры, например. группа 1 содержит 5 процессов, а вторая группа - 3. Итак, как процесс 4 (в первой группе) получает коммуникатор из первой группы.

ответ

0

Мы решили проблему, просто предоставив каждому процессу такую ​​же инициализацию, то есть каждый процесс создает каждую группу и коммуникатор и назначает процессы этим группам в соответствии с той же схемой. Таким образом, процессы знают свои соответствующие коммуникаторы.

Интересно, что мы выяснили, что, хотя каждый процесс создает все группы и коммуникаторы, они знают только коммуникаторы (и группы), к которым они принадлежат. Если, например, процесс 4, который принадлежит коммуникатору 1, но не 2, хочет использовать коммуникатор 2, он будет аварийно завершен. Согласно сообщению об ошибке, это связано с тем, что он не знает коммуникатора, хотя он инициализировал его в начале.

0

MPI делает это за вас. Взгляните на MPI_COMM_SPLIT, или в mpi4py это будет COMM.Split(). Важными параметрами являются «цвет» (в каких групповых процессах будет) и «ключ» (какой порядок будет в этой группе).

Похоже, вы уже знаете, как вы хотите «раскрасить» ваши процессы. COMM.Split() коллективна над родительским коммуникатором, поэтому вы будете вычислять на каждом узле, каков должен быть цвет, а затем разделить коммуникатор. Вы, вероятно, можете оставить ключ один, и в этом случае процессы будут отсортированы в соответствии с их рангом в родительском коммуникаторе.

+0

Спасибо за ваш ответ! Мы также видели команду split, однако мы не смогли ее использовать. Но мы решили проблему, как я описал в нашем ответе. – Migli

 Смежные вопросы

  • Нет связанных вопросов^_^