Как я могу минимизировать стоимость или есть ли какой-либо алгоритм для передачи массивных данных между процессами с помощью 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