MPI_Bsend и MPI_Isend. Как они работают?

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

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


person GBBL    schedule 10.03.2011    source источник


Ответы (1)


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

person phooji    schedule 10.03.2011
comment
Еще одна функция, о которой стоит упомянуть, это MPI_Test, которая сообщает вам, завершена ли передача без блокировки. - person Zulan; 10.03.2011
comment
Спасибо за добрый ответ. На самом деле мой вопрос был о том, как эти функции реализованы, а не о том, как их использовать. Что происходит на системном уровне с Isend? Новая ветка разветвлена? - person GBBL; 10.03.2011
comment
@GBBL: Ах. Ответ на ваш вопрос зависит от реализации (имейте в виду, что существует несколько популярных реализаций MPI). Для mpich, с которым я наиболее знаком, я думаю, что есть постоянно работающий процесс демона, который обрабатывает запросы клиентского процесса локально на узле через IPC. - person phooji; 11.03.2011