В чем разница между коммуникатором и группой в MPI?
Я прочитал определения этих терминов, и моя интерпретация заключается в том, что между группой и коммуникатором существует взаимно однозначное отношение. Группа представляет собой набор процессов, которые хотят общаться друг с другом, а коммуникатор - это реализация для группы.
Это правильно? Почему существуют два разных термина, если это так?
Ответы
Ответ 1
A group - упорядоченный набор идентификаторов процессов (спецификация MPI 2.2, с. 6.2.1).
Заказ задается путем сопоставления с каждым идентификатором процесса уникального ранга от 0 до group.size - 1.
A коммуникатор инкапсулирует всю связь между набором процессов. Внутренний коммуникатор связан с группой, а также с контекстами коммуникации как для двухточечной, так и для коллективной коммуникации и, возможно, для другой контекстной информации, такой как виртуальные топологии (spec, 6.1.2). Коммуникатор связан с двумя неперекрывающимися группами.
Я (возможно, очень слабо) считаю группу коммуникаторов своей таблицей символов.
Группа может содержать идентификаторы процессов от нескольких коммуникаторов.
Наконец, построение и операции над группами являются локальными для процесса и не требуют межпроцессного взаимодействия. В общем, это не так для коммуникаторов (по самой своей природе).
Ответ 2
Есть много различий между коммуникаторами и группами, как я узнал после прочтения спецификации MPI.
Изменить:
Группы - это объекты, представляющие группы процессов.
Communicator - это набор процессов, которые могут взаимодействовать друг с другом и могут состоять из процессов из одной группы или из нескольких групп.
Таким образом, они совершенно разные сущности. Их не следует путать друг с другом.
Ответ 3
Коммуникатор содержит группы (группы), а группа - всего лишь совокупность процессов.
Если коммуникатор содержит только одну группу, он называется внутрикоммуникатором (коммуникатор, MPI_COMM_WORLD - один из таких, который относится к одной группе, которая включает в себя все ранги).
Если он содержит две группы, он вызывается в intercommunicator (для вас нет созданных по умолчанию).
Взгляните на https://computing.llnl.gov/tutorials/mpi_advanced/DavidCronkSlides.pdf, где он дает очень хорошее иллюстрированное объяснение того, как коммуникатор является контейнером для одной или двух групп.