MPI_IRECV(buf, count, datatype, source, tag, comm, request)

buf начальный адрес буфера посылки (альтернатива)
count число элементов в буфере посылки (целое)
source тип каждого элемента в буфере посылки (дескриптор)
dest номер процесса-получателя (целое)
tag тэг сообщения (целое)
comm коммуникатор (дескриптор)
request запрос обмена (дескриптор)

Эти вызовы создают объект коммуникационного запроса и связывают его с дескриптором запроса (аргумент request). Запрос может быть использован позже, чтобы узнать статус обмена или чтобы ждать его завершения.

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

Завершение обмена

Чтобы завершить неблокирующий обмен, используются функции MPI_WAIT и MPI_TEST. Завершение операции посылки указывает, что отправитель теперь может изменять содержимое ячеек буфера посылки (операция посылки сама не меняет содержание буфера). Операция завершения не извещает, что сообщение было получено, но дает сведения, что оно было буферизовано коммуникационной подсистемой. Однако, если был использован синхронный режим, завершение операции посылки указывает, что соответствующий прием был инициирован и что это сообщение будет в конечном итоге принято этим соответствующим получателем.

Завершение операции приема указывает, что приемный буфер содержит принятое сообщение, что процесс-получатель теперь может обращаться к нему и что статусный объект установлен. Это не означает, что операция посылки завершена.

Нулевой дескриптор имеет значение MPI_REQUEST_NULL. Дескриптор является активным, если он не является нулевым или неактивным. Состояние empty (пусто) возвращает tag = MPI_ANY_TAG, error = MPI_SUCCESS, source = MPI_ANY_SOURCE, вызов MPI_GET_ELEMENTS и MPI_TEST_CANCELLED возвращают false, а вызов MPI_GET_COUNT возвращает count = 0. Переменная состояния устанавливается на empty, когда возвращаемое ею значение несущественно. Состояние устанавливается таким образом, чтобы предупредить ошибки из-за устаревшей информации.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: