Вызывает ли MPI_Type_commit неявный вызов барьера для всех процессов в MPI_COMM_WORLD?
В моем коде я определяю новый пользовательский тип данных MPI. Мне было интересно, должна ли функция MPI_Barrier следовать за MPI_Commit или должна быть размещена в некоторой точке, где появляется первое использование нового типа данных, чтобы все процессы подтверждали и соглашались с определением нового типа данных.
Благодарю.
2 ответа
Нет - в командах MPI_Type нет связи, они полностью локальны. В частности, процессы не обязательно должны согласовывать определение нового типа.
Если ранг 1 отправляет новый тип данных на ранг 0, все, с чем они должны согласиться - это объем данных, а не макет типа. Например, представьте, что ранг 1 отправляет весь свой (скажем, 2d) локальный массив на ранг 0 - он может просто выбрать отправку MPI_Type_contiguous из NX*NY-чисел. Но ранг 0 может получать это в больший глобальный массив; он может принять его в тип Subarray глобального типа. Даже если эти типы данных имеют одинаковые имена, они могут описывать различные конечные макеты в памяти, если общий объем данных одинаков.
Типы данных MPI являются частным бизнесом процесса, который их создает. Они не должны совпадать, фактически для процесса получения возможно и совершенно законно использовать карту типов, которая отличается от карты процесса отправки (если, конечно, это не приводит к повреждению памяти). Таким образом, при использовании нет никакой синхронизации Define
или же Commit
,