MPI_Bsend и MPI_Isend. Как они работают? - PullRequest
1 голос
/ 10 марта 2011

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

Только когда мне нужно будет отправить новые данные, я проверяю, могу ли я повторно использовать буфер. Это введет новый уровень параллелизма в моем приложении между процессором и связью. Кто-нибудь знает, как это делается в MPI? Генерирует ли MPI новый поток для обработки Bsend или Isend? Спасибо.

1 Ответ

4 голосов
/ 10 марта 2011

Требуется неблокирующая отправка с использованием собственного буфера (MPI_Isend). Не нужно беспокоиться о многопоточности - ISend должен немедленно вернуться, чтобы позволить вам продолжить собственный код. Затем вы продолжите свою работу и отправите запрос MPI_Wait на MPI_Request, который вы передали Isend. Затем он будет блокироваться, пока буфер не будет свободен для использования снова. Если у вас есть место для нескольких буферов, вы можете улучшить параллелизм, выделив несколько буферов и используя тот, который станет доступным через MPI_Waitany.

...