Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
параллельное программирование.ответы.doc
Скачиваний:
5
Добавлен:
01.03.2025
Размер:
378 Кб
Скачать
☆

19.Mpi: Групповые (коллективные) взаимодействия: Рассылка частей сообщения процессам. Сборка частей сообщения с процессов.

Рассылка частей сообщения процессам

 int MPI_Scatter ( void *sbuf, int scount, MPI_Datatype stype, void *rbuf, int rcount, MPI_Datatype rtype, int root, MPI_Comm comm )

Аргументы функции:

sbuf – адрес начала буфера передачи

scount – число элементов в посылаемом сообщении

stype – тип элементов отсылаемого сообщения

OUT rbuf – адрес начала буфера сборки данных

rcount – число элементов в принимаемом сообщении

rtype – тип элементов принимаемого сообщения

root – номер процесса, который рассылает данные

comm – идентификатор группы

 Процедура MPI_Scatter по своему действию является обратной к MPI_Gather. Она осуществляет рассылку по scount элементов данных типа stype из буфера sbuf процесса root в буферы rbuf всех процессов коммуникатора comm, включая сам процесс root. Можно считать, что массив sbuf делится на равные части по числу процессов, каждая из которых состоит из scount элементов типа stype, после чего I-я часть посылается (I-1)-му процессу (процессы нумеруются с 0).

 int MPI_Allgather ( void *sbuf, int scount, MPI_Datatype stype, void *rbuf, int rcount, MPI_Datatype rtype, MPI_Comm comm )

Аргументы функции:

sbuf – адрес начала буфера передачи

scount – число элементов в посылаемом сообщении

stype – тип элементов отсылаемого сообщения

OUT rbuf – адрес начала буфера сборки данных

rcount – число элементов в принимаемом сообщении

rtype – тип элементов принимаемого сообщения

comm – идентификатор группы

 Сборка данных из массивов sbuf со всех процессов коммуникатора comm в буфере rbuf каждого процесса. Данные сохраняются в порядке возрастания номеров процессов. Блок данных, посланный процессом I-1, размещается в I-ом блоке буфера rbuf принимающего процесса. Операцию можно рассматривать как MPI_Gather, при которой результат получается на всех процессах коммуникатора comm.

20.Mpi: Функции поддержки распределенных операций: Выполнение глобальных операций с возвратом результатов в главный процесс. Выполнение глобальных операций с возвратом результатов во все процессы.

Выполнение глобальных операций с возвратом результатов в главный процесс

int MPI_Reduce ( void *sbuf, void *rbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm )

Аргументы функции:

sbuf – адрес начала буфера для аргументов

OUT rbuf – адрес начала буфера для результата

count – число аргументов у каждого процесса

datatype – тип аргументов

op – идентификатор глобальной операции

root – процесс-получатель результата

comm – идентификатор группы

 Выполнение count глобальных операций op с возвратом count результатов в в буфер rbuf главного процесса root. Операция выполняется независимо над соответствующими аргументами всех процессов. Значения параметров count и datatype у всех процессов должны быть одинаковыми. Из соображений эффективности реализации предполагается, что операция op обладает свойствами ассоциативности и коммутативности.

 Идентификаторы глобальных операций:

MPI_MAX – поэлементный максимум;

MPI_MIN – поэлементный минимум;

MPI_SUM – поэлементная сумма;

MPI_PROD – поэлементное произведение;

MPI_LAND, MPI_BAND – логическая и двоичная операции И;

MPI_LOR, MPI_BOR – логическая и двоичная операции ИЛИ;

MPI_LXOR, MPI_BXOR – логическая и двоичная операции исключающее ИЛИ;

MPI_MAXLOC, MPI_MINLOC – поиск индексированного минимума/максимума.

Выполнение глобальных операций с возвратом результатов во все процессы.

int MPI_Allreduce ( void *sbuf, void *rbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm )

Аргументы функции:

sbuf – адрес начала буфера для аргументов

OUT rbuf – адрес начала буфера для результата

count – число аргументов у каждого процесса

datatype – тип аргументов

op – идентификатор глобальной операции

comm – идентификатор группы

Функция аналогична предыдущей, но результат будет записан в буферы rbuf всех процессов.