Между MPI-процессами

Рассмотрим задачу умножения матрицы на вектор. Один из вариантов решения данной задачи предполагает:

  1. Разбиение матрицы на ленты (блоки лент)
  2. Рассылку всем процессам соответствующих лент и вектора.
  3. Обработка частей матрицы
  4. Сбор результатов на одном из процессоров

При выполнении рассмотренного параллельного алгоритма есть необходимость передачи значений векторавсем процессам параллельной программы. Такая рассылка называется широковещательной рассылкой данных (one-to-all broadcast) и обеспечивается при помощи функции MPI:

int MPI_Bcast (void *buf,int count,MPI_Datatype type,int root,MPI_Comm comm),

где

- buf, count, type – буфер памяти с отправляемым сообщением (для процесса с рангом 0), и для приема сообщений для всех остальных процессов,

- root - ранг процесса, выполняющего рассылку данных,

- comm - коммуникатор, в рамках которого выполняется передача данных.

Функция MPI_Bcast осуществляет рассылку данных из буфера buf, содержащего count элементов типа type с процесса, имеющего номер root, всем процессам, входящим в коммуникатор comm.

Следует отметить:

1. Функция MPI_Bcast определяет коллективную операцию и, тем самым, при выполнении необходимых рассылок данных вызов функции MPI_Bcast должен быть осуществлен всеми процессами указываемого коммуникатора,

2. Указываемый в функции MPI_Bcast буфер памяти имеет различное назначение в разных процессах. Для процесса с рангом root, с которого осуществляется рассылка данных, в этом буфере должно находиться рассылаемое сообщение.Для всех остальных процессов указываемый буфер предназначен для приема передаваемых данных.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: