Введение в практику разработки параллельных программ в стандарте MPI. Баканов В.М - 27 стр.

UptoLike

Составители: 

- 27 -
не нет готовности (не вызвана MPI_Recv), не станет дожидаться ее вызова, а
скопирует данные во временный буфер и немедленно вернет управление ос-
новной программе. Вызванный далее
MPI_Recv данные получит не напрямую
из пользовательского буфера, а из промежуточного системного буфера (т.о.
используемый в MPI способ буферизации повышает надежность - делает
программу более устойчивой к возможным ошибкам программиста). Т.о. на-
ряду с полезными качествами (см. выше) свойство блокировки может слу-
жить причиной возникновения (трудно локализуемых и избегаемых для не-
профессионалов) тупиковых ситуаций при обмене сообщениями между про-
цессами.
Очень часто функции
MPI_Send/MPI_Recv используются совместно и имен-
но в таком порядке, поэтому в MPI специально введены две функции, осуще-
ствляющие одновременно посылку одних данных и прием других. Первая из
них -
MPI_Sendrecv (у нее первые 5 формальных параметров такие же, как у
MPI_Send, остальные 7 параметров аналогичны MPI_Recv). Следует учесть,
что:
как при приеме, так и при передаче используется один и тот же коммуни-
катор,
порядок приема и передачи данных MPI_Sendrecv выбирает автоматически;
при этом гарантировано отсутствие deadlock’а,
MPI_Sendrecv совместима с MPI_Send и MPI_Recv
Функция
MPI_Sendrecv_replace помимо общего коммуникатора использует
еще и общий для приема-передачи буфер. Применять
MPI_Sendrecv_replace
удобно с учетом:
принимаемые данные должны быть заведомо не длиннее отправляемых
принимаемые и отправляемые данные должны иметь одинаковый тип
принимаемые данные записываются на место отправляемых
MPI_Sendrecv_replace так же гарантированно не вызывает deadlock’а
В MPI предусмотрен набор процедур для осуществления асинхронной
передачи данных. В отличие от блокирующих процедур, возврат из процедур
данной группы происходит сразу после вызова без какой-либо остановки ра-
боты процессов; на фоне дальнейшего выполнения программы одновре-
менно происходит и обработка асинхронно запущенной операции.
Обычно эта возможность исключительно полезна для создания эф-
фективных программ - во многих случаях совершенно не обязательно дожи-
даться окончания посылки сообщения для выполнения последующих вычис-
лений.
Асинхронным аналогом процедуры MPI_Send является MPI_Isend (для
MPI_Recv, естественно, MPI_Irecv). Аналогично трем модификациям процеду-
ры MPI_Send предусмотрены три дополнительных варианта процедуры
не нет готовности (не вызвана MPI_Recv), не станет дожидаться ее вызова, а
скопирует данные во временный буфер и немедленно вернет управление ос-
новной программе. Вызванный далее MPI_Recv данные получит не напрямую
из пользовательского буфера, а из промежуточного системного буфера (т.о.
используемый в MPI способ буферизации повышает надежность - делает
программу более устойчивой к возможным ошибкам программиста). Т.о. на-
ряду с полезными качествами (см. выше) свойство блокировки может слу-
жить причиной возникновения (трудно локализуемых и избегаемых для не-
профессионалов) тупиковых ситуаций при обмене сообщениями между про-
цессами.
  Очень часто функции MPI_Send/MPI_Recv используются совместно и имен-
но в таком порядке, поэтому в MPI специально введены две функции, осуще-
ствляющие одновременно посылку одних данных и прием других. Первая из
них - MPI_Sendrecv (у нее первые 5 формальных параметров такие же, как у
MPI_Send, остальные 7 параметров аналогичны MPI_Recv). Следует учесть,
что:

•   как при приеме, так и при передаче используется один и тот же коммуни-
    катор,
•   порядок приема и передачи данных MPI_Sendrecv выбирает автоматически;
    при этом гарантировано отсутствие deadlock’а,
•   MPI_Sendrecv совместима с MPI_Send и MPI_Recv

  Функция MPI_Sendrecv_replace помимо общего коммуникатора использует
еще и общий для приема-передачи буфер. Применять MPI_Sendrecv_replace
удобно с учетом:

•   принимаемые данные должны быть заведомо не длиннее отправляемых
•   принимаемые и отправляемые данные должны иметь одинаковый тип
•   принимаемые данные записываются на место отправляемых
•   MPI_Sendrecv_replace так же гарантированно не вызывает deadlock’а

   В MPI предусмотрен набор процедур для осуществления асинхронной
передачи данных. В отличие от блокирующих процедур, возврат из процедур
данной группы происходит сразу после вызова без какой-либо остановки ра-
боты процессов; на фоне дальнейшего выполнения программы одновре-
менно происходит и обработка асинхронно запущенной операции.
   Обычно эта возможность исключительно полезна для создания эф-
фективных программ - во многих случаях совершенно не обязательно дожи-
даться окончания посылки сообщения для выполнения последующих вычис-
лений.
   Асинхронным аналогом процедуры MPI_Send является MPI_Isend (для
MPI_Recv, естественно, MPI_Irecv). Аналогично трем модификациям процеду-
ры MPI_Send предусмотрены три дополнительных варианта процедуры
                                     - 27 -