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

Параметр запроса MPI_Isend

При использовании MPI_Isend может ли параметр MPI_Request быть нулевым указателем (когда отправитель не заботится о сообщении после его отправки)?

4b9b3361

Ответ 1

Короткий ответ - нет - параметр дескриптора запроса не может быть NULL.

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

  • и дождитесь завершения операции с помощью MPI_Wait() и друзей
  • проверить завершение операции с помощью MPI_Test() и друзей, пока тест не окажется положительным.
  • освободите дескриптор с помощью MPI_Request_free()

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

Если вам не нужен результат асинхронной операции (например, статус завершения, статус приема сообщения, код ошибки и т.д.), нужно сделать следующее:

MPI_Request req;
...
MPI_Isend(..., &req);
MPI_Request_free(&req);
...

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