Обмен сообщениями в MPI презентация

Содержание

Варианты обмена 1) Двухточечный обмен (point – to - point): участвуют два процесса процесс-отправитель (источник) и процесс-получатель (адресат). 2) Коллективный обмен: участвуют все процессы коммуникатора.

Слайд 1Обмен сообщениями в MPI
Двухточечный блокирующий обмен сообщениями


Слайд 2Варианты обмена
1) Двухточечный обмен (point – to - point): участвуют два

процесса процесс-отправитель (источник) и процесс-получатель (адресат).
2) Коллективный обмен: участвуют все процессы коммуникатора.

Слайд 3Виды функций обмена
функции с блокировкой (с синхронизацией):
вызывающий процесс блокируется, пока операция

не будет завершена.
Для функции посылки сообщения блокируется, пока все посылаемые данные не будут помещены в буфер (какой – то промежуточный буфер или непосредственно буфер приема).
Для функции приема сообщения блокируется выполнение других операций, пока все данные не будут помещены в буфер приема.
функции без блокировки (асинхронные):

Слайд 4
подразумевают совмещение операций об-
мена с другими операциями, т.е. только инициируют выполнение

соответ-
ствующих операций обмена. Для опроса завершенности операции (и за-
вершения) вводятся дополнительные операции.

Слайд 5Режимы передачи сообщения
В MPI существует четыре режима обмена, различающиеся условия ми

инициализации и завершения передачи сообщения.
Каждый из этих режимов передачи сообщения имеется в блокирующей и неблокирующей формах:

Стандартная передача считается выполненной и завершается, как только сообщение отправлено, независимо от того, дошло оно до адресата или нет. Передача сообщения может начаться, даже если еще не начат его прием.
MPI_Send блокирующая стандартная,
MPI_Isend неблокирующая стандартная.


Слайд 6Синхронная передача считается выполненной и завершается только тогда, когда будет завершен

прием сообщения. Процесс – получатель после приема посылает уведомление процессу – отправителю (адресату), что сообщение получено.
MPI_Issend неблокирующая синхронная,
MPI_Ssend блокирующая синхронная.

Буферизованная передача завершается сразу же, сообщение копируется в системный буфер, где и ожидает своей очереди на пересылку. Завершается буферизованная передача независимо от того, выполнен прием сообщения или нет.
MPI_Bsend блокирующая буферизованная,
MPI_Ibsend неблокирующая буферизованная.




Слайд 7Передача «по готовности» начинается только в том случае, когда адресат инициировал

прием сообщения, а завершается сразу, независимо от того, принято сообщение или нет. Если прием не зарегистрирован, ре-зультат этой операции не определен.
MPI_Rsend блокирующая «по готовности»,
MPI_Irsend неблокирующая «по готовности».

Прием сообщения от всех перечисленных выше функций передачи можно осуществить с помощью двух функций:
MPI_Recv блокирующий стандартный;
MPI_Irecv неблокирующий стандартный.

(буква I в имени от immediately – немедленно)

Слайд 8Блокирующая стандартная передача сообщения
int MPI_Send(void *buf, int count, MPI_Datatype datatype, int

dest, int tag, MPI_Comm comm)

Входные параметры:
buf – начальный адрес буфера передачи
count – количество элементов в буфере передачи
datatype – тип элементов в буфере передачи (тип MPI)
dest – номер (ранг) процесса – получателя
tag – номер (тег) передаваемого сообщения
comm – идентификатор коммуникатора
Выходной параметр:
error – код ошибки

Слайд 9Блокирующие функции обмена
Блокирующая синхронная передача сообщения:
int MPI_Ssend(void *buf, int count, MPI_Datatype

datatype, int dest, int tag, MPI_Comm comm)

Блокирующая передача сообщения «по готовности»:
int MPI_Rsend(void *buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm)

Передача «по готовности» должна начинаться, если уже зарегистрирован соответствующий прием. Если прием не зарегистрирован, результат выполнения операции не определен.





Слайд 10«Безопасная» структура программы с использованием обмена «по готовности»


Слайд 11Буфферизованная блокирующая передача сообщения
int MPI_Bsend(void *buf, int count, MPI_Datatype datatype, int

dest, int tag, MPI_Comm comm)
Для выполнения буферизованного обмена необходимо заранее создать буфер достаточного размера с помощью вызова функции MPI_Buffer_attach:
int MPI_Buffer_attach(void *buf, int bufsize)
Входной параметр:
bufsize – размер создаваемого буфера
Выходные параметры:
buf – создаваемый буфер
error – код ошибки

Слайд 12Размер буфера должен превосходить размер сообщения на величину MPI_BSEND_OVERHEAD-дополнительное пространство, которое

используется функцией MPI_Bsend.
После завершения работы с буфером его необходимо отключить с помощью вызова функции MPI_Buffer_detach:
int MPI_Buffer_detach(void* buf, int bufsize)
В результате выполнения вызова возвращается адрес buf и размер отключаемого буфера bufsize.

Функции MPI_Send, MPI_Ssend, MPI_Bsend и MPI_Rsend имеют одинаковые параметры.

Слайд 13Блокирующий прием сообщения
int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source,

int tag, MPI_Comm comm, MPI_Status *status)
Входные параметры:
count – количество элементов в буфере приема
datatype – тип элементов в буфере приема
source – номер (ранг) процесса - отправителя
tag – номер (тег) принимаемого сообщения
comm – идентификатор коммуникатора
status – статус (информация о полученном
сообщении)
Выходные параметры:
buf – начальный адрес буфера приема
error – код ошибки

Слайд 14Замечание
Прием может выполняться от произвольного процесса (MPI_ANY_SOURCE), а в операции передачи

должен быть указан определенный процесс – получатель.
Приемник может принимать сообщение с любым идентификатором (тегом) - MPI_ANY_TAG. При одновременном использовании этих двух констант будет принят
о любое сообщение от любого процесса.

Слайд 16Функция определения размера сообщения:
Int MPI_Get_count(MPI_Status *status, MPI_Datatype datatype, int *count)
Входные

параметры:
status – статус (информация о полученном сообщении)
datatype – тип данных, в единицах которого требуется
получить размер сообщения
Выходные параметры:
count – количество полученных элементов
error – код ошибки

Слайд 17Блокирующая проверка доставки сообщения
int MPI_Probe(int source, int tag, MPI_Comm comm, MPI_Status

*status)
Входные параметры:
source – номер (ранг) процесса - отправителя
tag – номер (тег) принимаемого сообщения
comm – идентификатор коммуникатора
Выходные параметры:
status – статус, который содержит необходимую информацию
error – код ошибки.

Слайд 18Неблокирующая проверка доставки сообщения
int MPI_Iprobe(int source, int tag, MPI_Comm comm, int

*flag, MPI_Status *status)
Входные параметры:
source – номер (ранг) процесса – отправителя
tag – номер (тег) принимаемого сообщения
comm – идентификатор коммуникатора
Выходные параметры:
flag = true, если сообщение уже поступило и может быть
принято
status – статус, который содержит необходимую информацию
error – код ошибки.

Слайд 19Функция совмещенного приема – передачи сообщения с блокировкой:
Данная функция объединяет посылку

и прием сообщений. Буферы передачи и приема должны быть различны, типы пересылаемых и принимаемых данных могут быть различны. Прием и передача используют один и тот же коммуникатор.

int MPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype, int dest, int sendtag, void *recvbuf, int recvcount, MPI_Datatype recvtype, int source, int recvtag, MPI_Comm comm,MPI_Status *status)

Слайд 20Входные параметры:
sendbuf – начальный адрес буфера передачи
sendcount – количество элементов в

буфере передачи
sendtype – тип элементов в буфере передачи
dest – номер (ранг) процесса – получателя
sendtag – номер (тег) передаваемого сообщения
recvcount – количество элементов в буфере приема
recvtype – тип элементов в буфере приема
source – номер (ранг) процесса - отправителя
recvtag – номер (тег) принимаемого сообщения
comm – идентификатор коммуникатора
Выходные параметры:
recvbuf – начальный адрес буфера приема
status – статус (информация о полученном сообщении)
error – код ошибки.

Слайд 21Функция замещающего приема – передачи сообщения:
int MPI_Sendrecv_replace(void *buf, int count,
MPI_Datatype datatype,

int dest, int sendtag, int source, int recvtag, MPI_Comm comm, MPI_Status *status)

Слайд 22Входные параметры:
count – количество передаваемых и принимаемых элементов
datatype – тип данных
dest

– номер (ранг) процесса - получателя
sendtag – номер (тег) передаваемого сообщения
source – номер (ранг) процесса - отправителя
recvtag – номер (тег) принимаемого сообщения
comm – идентификатор коммуникатора
Выходные параметры:
status – статус (информация о полученном сообщении)
error – код ошибки
buf – (входной и выходной) начальный адрес буфера приема и передачи

Слайд 23Вопросы для обсуждения
Какие группы функций обмена сообщениями существуют в MPI?
Какими атрибутами

обладает в MPI каждое посылаемое сообщение?
Как, не принимая сообщение, определить атрибуты сообщения?
Что означает блокирующий обмен сообщениями?
Что означает асинхронный обмен сообщениями?
Можно ли сообщение, отправленное с помощью блокирующей операции посылки, принять неблокирующей операцией приема?
Что гарантирует блокировка при передаче/приеме сообщений?

Слайд 24Что означает завершение операции для различных режимах передачи сообщения?
Можно ли в

качестве тегов при посылке различных сообщений в программе использовать одно и тоже число?
Как можно принять любое сообщение от любого процесса?
Как принимающий процесс может определить длину полученного сообщения?
Можно ли при посылке сообщения использовать константы MPI_ANY_TAG, MPI_ANY_SOURCE?
Может ли размер буфера приема быть меньше буфера посылки?
Как избежать тупиковые ситуации при использовании функций обмена?

Обратная связь

Если не удалось найти и скачать презентацию, Вы можете заказать его на нашем сайте. Мы постараемся найти нужный Вам материал и отправим по электронной почте. Не стесняйтесь обращаться к нам, если у вас возникли вопросы или пожелания:

Email: Нажмите что бы посмотреть 

Что такое ThePresentation.ru?

Это сайт презентаций, докладов, проектов, шаблонов в формате PowerPoint. Мы помогаем школьникам, студентам, учителям, преподавателям хранить и обмениваться учебными материалами с другими пользователями.


Для правообладателей

Яндекс.Метрика