MPI_Type_commit неявно вызывает барьер для всех процессов в MPI_COMM_WORLD? - PullRequest
2 голосов
/ 18 марта 2012

В моем коде я определяю новый пользовательский тип данных MPI.Мне было интересно, должна ли функция MPI_Barrier следовать за MPI_Commit или должна быть размещена в какой-то момент, когда появляется первое использование нового типа данных, чтобы все процессы подтверждали и соглашались с определением нового типа данных.

Спасибо.

Ответы [ 2 ]

4 голосов
/ 18 марта 2012

Нет - в командах MPI_Type нет связи, они полностью локальны. В частности, процессы не обязательно должны согласовывать определение нового типа.

Если ранг 1 отправляет новый тип данных на ранг 0, все, с чем они должны согласиться, это объем данных, а не макет типа. Например, представьте, что ранг 1 отправляет весь свой (скажем, 2d) локальный массив на ранг 0 - он может просто выбрать отправку MPI_Type_contiguous из NX * NY-чисел. Но ранг 0 может принимать это в больший глобальный массив; он может принять его в тип Subarray глобального типа. Даже если эти типы данных имеют одинаковые имена, они могут описывать различные конечные макеты в памяти, если общий объем данных одинаков.

3 голосов
/ 18 марта 2012

Типы данных MPI являются частным бизнесом процесса, который их создает.Они не должны совпадать, фактически для процесса получения возможно и совершенно законно использовать карту типов, которая отличается от карты процесса отправки (если, конечно, это не приводит к повреждению памяти).Таким образом, при использовании Define или Commit.

синхронизация отсутствует.
...