Могу ли я повторно использовать объекты запроса? - PullRequest
3 голосов
/ 29 апреля 2019

При использовании нескольких MPI_Isend и MPI_Irecv я должен повторно объявить запрос MPI_Request или просто объявить один раз и повторно использовать объект запроса. Если мне придется повторно заявить, можете ли вы привести пример.

1 Ответ

3 голосов
/ 29 апреля 2019

Да, вы можете повторно использовать MPI_Request переменные. Эти переменные являются только дескрипторами, и их не нужно инициализировать для передачи их в MPI_Isend или MPI_Irecv (они помечены как параметры OUT для этих функций). Конечно, они должны быть действительными при переходе к любой функции, которая завершает их, например, MPI_Wait. Эти функции также установят переменные на MPI_REQUEST_NULL после завершения.

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

...