Подтвердить что ты не робот

В чем разница между isend и issend в OpenMPI?

Нужно пояснить мое понимание isend и issend как указано в Отправить типы

Я понимаю, что isend вернется после того, как буфер отправки будет бесплатным, т.е. когда все данные будут выпущены. Выдача, с другой стороны, возвращается только тогда, когда она получает ответ от получения получения/не получения всех данных. Это все для этого?

4b9b3361

Ответ 1

Оба MPI_Isend() и MPI_Issend() возвращаются немедленно, но в обоих случаях вы не можете сразу использовать буфер отправки.

Подумайте о различии между MPI_Send() и MPI_Ssend():

  • MPI_Send() может быть буферизирован или может быть синхронным, если буфер тоже для буферизации локально, и в этом случае он ждет завершения отправки данных в соответствующую операцию приема.

  • MPI_Ssend() всегда синхронно: он всегда ждет завершения отправки данных к соответствующей операции приема.

Внутренняя работа соответствующих "I" -операций очень похожа, за исключением того факта, что они оба не блокируют (немедленно возвращаются): разница заключается только в том, что библиотека MPI сигнализирует программе пользователя, что вы можете используйте send-buffer (то есть: MPI_Wait() возвращает или MPI_Test() возвращает true - так называемую операцию send-complete неблокирующей отправки):

  • с MPI_Isend() это может произойти, когда данные были скопированы локально в буфере, принадлежащем библиотеке MPI, если ниже "синхронного порога" или когда данные были фактически перенесены в задачу сестры: операция отправки-завершения может быть локальной, в случае буферизации базовой операции отправки.

  • С MPI_Issend() MPI никогда не хранит данные локально, и условие "без буфера" возвращается только после того, как данные были фактически переданы (и, вероятно, были найдены на низком уровне): send -полная операция нелокальная.

стандартный документ MPI довольно педантичен по этим аспектам. См. Раздел 3.7 "Неблокирующая связь".

Ответ 2

Правильно. Очевидно, что оба из них будут действительны только тогда, когда запрос, который вы получите от вызова MPI_ISEND или MPI_ISSEND, будет завершен с помощью функции MPI_WAIT* или MPI_TEST*.