Минимизация широковещательной передачи MPI для массивных данных

Я делаю большой блок данных в каждом процессе, и мне нужно делиться этими данными между процессами с помощью широковещательной рассылки MPI,

Как я могу минимизировать стоимость или есть ли какой-либо алгоритм для передачи массивных данных между процессами с помощью MPI?


person Fazeleh    schedule 21.02.2021    source источник


Ответы (2)


Как я могу минимизировать стоимость или есть ли какой-либо алгоритм для передачи массивных данных между процессами с помощью MPI?

Имейте в виду, что MPI_Bcast:

Во время трансляции один процесс отправляет одни и те же данные всем процессам в коммуникаторе.

Если это то, что вы хотите, вам придется полагаться на подчиненное оборудование и на то, что реализация стандарта MPI, который вы используете, реализует MPI_Bcast работает эффективно. Может даже случиться так, что (в зависимости от вашей реализации) MPI_Reduce на самом деле быстрее, чем MPI_Bcast. Тем не менее, в некоторых реализациях, например Open MPI, вы можете дополнительно настроить алгоритм, используемый MPI_Bcast, с помощью флага

--mca coll_tuned_use_dynamic_rules 1 --mca coll_tuned_bcast_algorithm 4

Другой вариант — попробовать использовать неблокирующую версию широковещательной передачи MPI, а именно MPI_Ibcast:

Рассылает сообщение от процесса с рангом root всем остальным процессам коммуникатора неблокирующим образом

Вы можете попытаться совместить вычисления с коммуникацией. Несмотря на это, это вычисление не должно изменять буфер, используемый подпрограммой MPI (дополнительную информацию о том, почему можно увидеть здесь).

person dreamcrash    schedule 21.02.2021

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

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

person Majid Salimi    schedule 22.02.2021