Между MPI-процессами
Рассмотрим задачу умножения матрицы на вектор. Один из вариантов решения данной задачи предполагает:
- Разбиение матрицы на ленты (блоки лент)
- Рассылку всем процессам соответствующих лент и вектора.
- Обработка частей матрицы
- Сбор результатов на одном из процессоров
При выполнении рассмотренного параллельного алгоритма есть необходимость передачи значений векторавсем процессам параллельной программы. Такая рассылка называется широковещательной рассылкой данных(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, с которого осуществляется рассылка данных, в этом буфере должно находиться рассылаемое сообщение.Для всех остальных процессов указываемый буфер предназначен для приема передаваемых данных.
Дата добавления: 2015-02-03; просмотров: 888;