Параллельное программирование в стандарте MPI. Баканов В.М - 29 стр.

UptoLike

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

- 29 -
Блокировка гарантирует корректность повторного использования всех па-
раметров после возврата из подпрограммы. Это достигается копированием в
промежуточный буфер или непосредственной передачей процессу
dest
(оп-
ределяется MPI). Важно отметить, что возврат из
MPI_Send
не означает ни то-
го, что сообщение уже передано процессу
dest,
ни того, что сообщение поки-
нуло процессорный элемент, на котором выполняется процесс, выполнивший
MPI_Send
.
Имеются следующие модификации процедуры передачи данных с блоки-
ровкой
MPI_Send
:
MPI_Вsend
- передача сообщения с буферизацией. Если прием по-
сылаемого сообщения еще не был инициализирован процессом-
получателем, то сообщение будет записано в специальный буфер, и
произойдет немедленный возврат из процедуры. Выполнение этой про-
цедуры никоим образом не зависит от соответствующего вызова проце-
дуры приема сообщения. Тем не менее процедура может вернуть
код ошибки, если места под буфер недостаточно (о выделении массива для
буферизации должен озаботиться пользователь).
MPI_Ssend -
передача сообщения с синхронизацией. Выход из этой про-
цедуры произойдет только тогда, когда прием посылаемого сооб-
щения будет инициализирован процессом-получателем. Таким обра-
зом, завершение передачи с синхронизацией говорит не только о возмож-
ности повторного использования буфера посылки, но и о гаранти-
рованном достижении процессом-получателем точки приема сообщения
в программе. Использование передачи сообщений с синхронизацией
может замедлить выполнение программы, но позволяет избежать
наличия в системе большого количества не принятых буферизован-
ных сообщений.
MPI_Rsend
- передача сообщения по готовности. Этой процедурой мож-
но пользоваться только в том случае, если процесс-получатель уже ини-
циировал прием сообщения. В противном случае вызов процедуры являет-
ся ошибочным и результат ее выполнения не определен. Гарантировать
инициализацию приема сообщения перед вызовом процедуры
MPI_Rsend
можно с помощью операций, осуществляющих явную
или неявную синхронизацию процессов (например,
MPI_Barrier
или
MPI_Ssend
). Во многих реализациях процедура
MPI_Rsend
сокращает
протокол взаимодействия между отправителем и получателем,
уменьшая накладные расходы на организацию передачи данных.
В MPI не используются привычные для C типы данных (
int
,
char
и др.),
вместо них удобно применять определенные для данной платформы констан-
ты
MPI_INT
,
MPI_CHAR
и т.д. (см. табл.2.1).
                                   - 29 -

  Блокировка гарантирует корректность повторного использования всех па-
раметров после возврата из подпрограммы. Это достигается копированием в
промежуточный буфер или непосредственной передачей процессу dest (оп-
ределяется MPI). Важно отметить, что возврат из MPI_Send не означает ни то-
го, что сообщение уже передано процессу dest, ни того, что сообщение поки-
нуло процессорный элемент, на котором выполняется процесс, выполнивший
MPI_Send.
   Имеются следующие модификации процедуры передачи данных с блоки-
ровкой MPI_Send:

 • MPI_Вsend - передача сообщения с буферизацией. Если прием по-
  сылаемого сообщения еще не был инициализирован процессом-
  получателем, то сообщение будет записано в специальный буфер, и
  произойдет немедленный возврат из процедуры. Выполнение этой про-
  цедуры никоим образом не зависит от соответствующего вызова проце-
  дуры приема сообщения. Тем не менее процедура может вернуть
  код ошибки, если места под буфер недостаточно (о выделении массива для
  буферизации должен озаботиться пользователь).
 • MPI_Ssend - передача сообщения с синхронизацией. Выход из этой про-
  цедуры произойдет только тогда, когда прием посылаемого сооб-
  щения будет инициализирован процессом-получателем. Таким обра-
  зом, завершение передачи с синхронизацией говорит не только о возмож-
  ности повторного использования буфера посылки, но и о гаранти-
  рованном достижении процессом-получателем точки приема сообщения
  в программе. Использование передачи сообщений с синхронизацией
  может замедлить выполнение программы, но позволяет избежать
  наличия в системе большого количества не принятых буферизован-
  ных сообщений.
 • MPI_Rsend - передача сообщения по готовности. Этой процедурой мож-
  но пользоваться только в том случае, если процесс-получатель уже ини-
  циировал прием сообщения. В противном случае вызов процедуры являет-
  ся ошибочным и результат ее выполнения не определен. Гарантировать
  инициализацию приема сообщения перед вызовом                процедуры
  MPI_Rsend    можно с помощью операций, осуществляющих явную
  или неявную синхронизацию процессов (например, MPI_Barrier или
  MPI_Ssend). Во многих реализациях процедура MPI_Rsend сокращает
  протокол    взаимодействия между отправителем        и   получателем,
  уменьшая накладные расходы на организацию передачи данных.


  В MPI не используются привычные для C типы данных (int, char и др.),
вместо них удобно применять определенные для данной платформы констан-
ты MPI_INT, MPI_CHAR и т.д. (см. табл.2.1).