ВУЗ:
Составители:
Рубрика:
- 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 -
Страницы
- « первая
- ‹ предыдущая
- …
- 25
- 26
- 27
- 28
- 29
- …
- следующая ›
- последняя »