Передача данных от всех процессов одному процессу. Операции редукции

В операции передачи данных от всех процессов одному процессу над собираемыми значениями осуществляется та или иная обработка данных (для подчеркивания последнего момента данная операция еще именуется операцией редукции данных). Как и ранее, реализация операции редукции при помощи обычных парных операций передачи данных является неэффективной и достаточно трудоемкой. Для наилучшего выполнения действий, связанных с редукцией данных, в MPI предусмотрена функция:

int MPI_Reduce (void *sendbuf, void *recvbuf,int count,MPI_Datatype type, MPI_Op op,int root,MPI_Comm comm),

где

- sendbuf - буфер памяти с отправляемым сообщением,

- recvbuf – буфер памяти для результирующего сообщения (только для сса с рангом root),

проце- count - количество элементов в сообщениях,

- type – тип элементов сообщений,

- op - операция, которая должна быть выполнена над данными,

- root - ранг процесса, на котором должен быть получен результат,

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

В качестве операций редукции данных могут быть использованы предопределенные в MPI операции – см. табл. 3.4.5.1.1.

Таблица 3.4.5.1.1. Базовые (пpедопpеделенные) типы операций MPI для функций редукции данных

MPI_MAX максимум

MPI_MIN минимум

MPI_SUM сумма

MPI_PROD произведение

MPI_LAND логическое И

MPI_BAND поразрядное И

MPI_LOR логическое ИЛИ

MPI_BOR поразрядное ИЛИ

MPI_LXOR логическое ИЛИ-НЕ

MPI_BXOR поразрядное ИЛИ-НЕ

MPI_MAXLOC значение максимума и локализация

MPI_MINLOC значение минимума и локализация

Элементы получаемого сообщения на процессе root представляют собой результаты обработки соответствующих элементов передаваемых процессами сообщений.

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

1. Функция MPI_Reduce определяет коллективную операцию и, тем самым, вызов функции должен быть выполнен всеми процессами указываемого коммуникатора, все вызовы функции должны содержать одинаковые значения параметров count, type, op, root, comm,

2. Передача сообщений должна быть выполнена всеми процессами, результат операции будет получен только процессом с рангом root,

3. Выполнение операции редукции осуществляется над отдельными элементами передаваемых сообщений. Так, например, если сообщения содержат по два элемента данных и выполняется операция суммирования MPI_SUM, то результат также будет состоять из двух значений, первое из которых будет содержать сумму первых элементов всех отправленных сообщений, а второе значение будет равно сумме вторых элементов сообщений соответственно.


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



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