Синхронный способ взаимодействий

 

Синхронная блокированная передача данных(MPI_Ssend)

Синхронная неблокированная передача данных(MPI_Issend)

 

Синхронный способ взаимодействий имеет семантику реализации «rendezvous». Синхронная передача может быть начата только после того, как соответствующий приемник готов к приему посылаемых данных, т.е. запустилась соответствующая принимающая функция. Таким образом, завершение синхронных передающих операций не только указывает, что посылающийся буфер может теперь использоваться, но также и то, что приемник достиг некоторого пункта в его выполнении, а именно, что он запустил выполнение соответствующей получающей функции. Синхронный способ обеспечивает семантику синхронной связи: связь не заканчивается с обоих концов перед обоюдным сближением процессов в связи. Синхронный способ передачи имеет не локальную семантику завершения. Для неблокированных операций функции MPI_Wait и MPI_Test проверяют, завершилась операция или нет.

 

Способ взаимодействий «состояние готовности»

«Состояние готовности» блокированная передача(MPI_Rsend) и

«Состояние готовности» неблокированная передача(MPI_Irsend).

 

Эти передачи могут быть успешно реализованы, только если перед запуском этих функций соответствующая получающая функция уже была запущена. Иначе действие ошибочно и его результат неопределён.

 

buf адрес передаваемого или принимаемого буфера. В большинстве случаев это просто переменная, которая будет передана или принята. Этот аргумент передается по ссылке

count количество передаваемых или принимаемых элементов

datatype тип передаваемых или принимаемых элементов

dest ранг принимающего процесса

source ранг передающего процесса

tag тег сообщения, положительное целое, назначаемое программистом для уникальной идентификации сообщения, теги передающей и получающей функций должны соответствовать.

comm коммуникатор

status Для операции приема, показывает источник сообщения и тег сообщения. В С это указатель на предопределенную структуру MPI_Status, к-рая содержит поля MPI_SOURCE и MPI_TAG.

request Используется неблокированными функциями отправки и получения. В С это указатель на предопределенную структуру MPI_Request

 

 

MPI_Send (&buf,count,datatype,dest,tag,comm)

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

 

MPI_Recv (&buf,count,datatype,source,tag,comm,&status)

Функция стандартного блокированного приема данных. Функция возвращает управление после того, как буфер приема данных получит сообщение.

 

MPI_Ssend (&buf,count,datatype,dest,tag,comm)

 

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

 

MPI_Bsend (&buf,count,datatype,dest,tag,comm)

 

Блокированный, буферизированный способ передачи данных

 

 

MPI_Buffer_attach (&buffer,size)

MPI_Buffer_detach (&buffer,size)

 

Используется программистом для выделения/освобождения пространства для буфера сообщения для использования функцией MPI_Bsend. Аргумент size описан в байтах. Только один буфер может быть присоединен к процессу за один вызов процедуры.

 

MPI_Rsend (&buf,count,datatype,dest,tag,comm)

Блокированный, по готовности способ передачи данных.

 

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

sendbuf адрес посылаемого буфера

sendcount количество посылаемых элементов

sendtype тип элементов в посылаемом буфере

dest ранг процесса, к-рому осуществляется передача

sendtag тег посылаемого сообщения

recvbuf адрес буфера для приема данных

recvcount максимальное количество принимаемых элементов

recvtype тип принимаемых элементов

source ранг передающего процесса

recvtag тег принимаемых данных

comm имя переключателя каналов

status статус полученного сообщения

 

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

Имеется совместимость между MPI_Sendrecv и обычными функциями посылки и получения сообщений. Сообщение, посланное MPI_Sendrecv, может быть получено обычной функцией приема сообщений, и, наоборот, MPI_Sendrecv может получать сообщение, посланное обычной функцией передачи сообщений.

 

 

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

 

int MPI_Isend (void* buf, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm, MPI_Request *request)

buf адрес посылаемого буфера

count количество элементов в посылаемом буфере

datatype тип элементов в передаваемом буфере

dest номер принимающего процессора

tag тег передаваемых данных

comm имя коммуникатора связи

request имя (заголовка) запроса

Инициирует в стандартном режиме неблокированную передачу данных.

 

int MPI_Irecv (void* buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Request *request)

 

MPI_Irecv инициирует в стандартном режиме неблокированный прием данных. Эти функции размещают объекты запроса и возвращают заголовок этого запроса в request. Request используется, чтобы запросить состояние связи или ждать ее завершения. Неблокированная посылающая функция указывает, что система может начинать копировать данные вне посылающего буфера. Посылающий процесс не должен иметь доступ к посылаемому буферу после того, как неблокирующее посылающее действие инициировано, до тех пор, пока завершение-send функция не возвратит управление.

Неблокированная получающая функция указывает, что система может начинать писать данные в буфер приема данных. Приемник не должен иметь доступ к буферу приема после того, как неблокированное получающее действие инициировано, до тех пор, пока завершение-recv функция не возвратит управление.

 

MPI_Issend (&buf,count,datatype,dest,tag,comm,&request)

Неблокированный, синхронный способ передачи данных. Если соответствующей принимающей функцией является неблокированная MPI_Irecv, то передающая функция MPI_Issend синхронизируется с переданными в систему параметрами соответствующей неблокированной принимающей функции.

 

MPI_Ibsend (&buf,count,datatype,dest,tag,comm,&request)

 

Неблокированный буферизированный способ передачи данных.

 

MPI_Irsend (&buf,count,datatype,dest,tag,comm,&request)

 

Non-blocking ready send. Similar to MPI_Rsend() except MPI_Wait() or MPI_Test() indicates when the destination process has received the message. Should only be used if the programmer is certain that the matching receive has already been posted.

 








Дата добавления: 2015-02-03; просмотров: 836;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.012 сек.