Теория и практика параллельных вычислений

       

Дополнительные операции редукции данных


Рассмотренная в п. 5.2.3.2 функция MPI_Reduce обеспечивает получение результатов редукции данных только на одном процессе. Для получения результатов редукции данных на каждом из процессов коммуникатора необходимо использовать функцию редукции и рассылки:

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

где

  • sendbuf — буфер памяти с отправляемым сообщением;
  • recvbuf — буфер памяти для результирующего сообщения;
  • count — количество элементов в сообщениях;
  • type — тип элементов сообщений;
  • op — операция, которая должна быть выполнена над данными;
  • comm — коммуникатор, в рамках которого выполняется операция.

Функция MPI_Allreduce выполняет рассылку между процессами всех результатов операции редукции. Возможность управления распределением этих данных между процессами предоставляется функций MPI_Reduce_scatter.

И еще один вариант операции сбора и обработки данных, при котором обеспечивается получение всех частичных результатов редуцирования, может быть реализован при помощи функции:

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

где

  • sendbuf — буфер памяти с отправляемым сообщением;
  • recvbuf — буфер памяти для результирующего сообщения;
  • count — количество элементов в сообщениях;
  • type — тип элементов сообщений;
  • op — операция, которая должна быть выполнена над данными;
  • comm — коммуникатор, в рамках которого выполняется операция.

Общая схема выполнения функции MPI_Scan показана на рис. 5.7. Элементы получаемых сообщений представляют собой результаты обработки соответствующих элементов передаваемых процессами сообщений, при этом для получения результатов на процессе с рангом i, 0i<n, используются данные от процессов, ранг которых меньше или равен i, т.е.

где есть операция, задаваемая при вызове функции MPI_Scan.


Рис. 5.7.  Общая схема операции редукции с получением частичных результатов обработки данных



Содержание раздела