Синхронный способ взаимодействий
Синхронная блокированная передача данных(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; просмотров: 905;