Подтвердить что ты не робот

В чем разница между коммуникатором и группой в MPI?

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

Это правильно? Почему существуют два разных термина, если это так?

4b9b3361

Ответ 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, где он дает очень хорошее иллюстрированное объяснение того, как коммуникатор является контейнером для одной или двух групп.