Неблокированная передача данных.

 

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

Неблокированная функция указывает, что система может начинать копировать данные вне посылающего буфера. После передачи параметров в систему функция возвращает управление. После этого передающий процесс не должен иметь доступ( по записи, а в данном случае и по чтению) к посылающемуся буферу, т.е. система не гарантирует в этом случае сохранность посылаемых данных. Для проверки завершения рассматриваемой операции используются функции MPI_Wait и MPI_Test. Под завершением операции здесь понимается, что данные сообщения были безопасно сохранены в промежуточном буфере системы и посылающийся буфер снова свободен к доступу. Относительно соответсвующей принимающей функции(в принимающей стороне), в данном случае, нет никаких предположений, и завершение посылающей функции не обязательно подразумевает, что соответствующая получающая функция стартовала. И нет никакого предположения в прикладной программе относительно того, буферизируются ли посылаемые данные или нет. (посылаемые данные буферизируются в системном буфере с программными средствами системы.) семантика завершения функции локальная( т.е. не зависима от выполнения других процессов и ее завершение не зависит от вхождения соотв. получающей функции). Имеется несколько версий неблокированных передающих функций:

Стандартная (MPI_Isend), буферизированная(MPI_Ibsend), синхронная(MPI_Issend), и по состоянию готовности(MPI_Irsend).

 

Неблокированный прием данных.

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