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