The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Каталог документации / Раздел "Программирование, языки" / Оглавление документа
next up previous contents
Next: Функция Reduce-Scatter Up: Глобальные операции редукции Previous: Операции, определяемые пользователем   Contents

Функция All-Reduce

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

Синтаксис функции MPI_ALLREDUCE представлен ниже.

MPI_ALLREDUCE(sendbuf, recvbuf, count, datatype, op, comm)

IN sendbuf начальный адрес буфера посылки (альтернатива)
OUT recvbuf начальный адрес буфера приема (альтернатива)
IN count количество элементов в буфере посылки (целое)
IN datatype тип данных элементов буфера посылки ()
IN op операция (дескриптор)
IN comm коммуникатор (дескриптор)

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

MPI_ALLREDUCE(SENDBUF, RECVBUF, COUNT, DATATYPE, OP, COMM, IERROR)
<type> SENDBUF(*), RECVBUF(*)
INTEGER COUNT, DATATYPE, OP, COMM, IERROR

void MPI::Intracomm::Allreduce(const void* sendbuf, void* recvbuf,
int count, const Datatype& datatype, const Op& op) const

Функция MPI_ALLREDUCE отличается от MPI_REDUCE тем, что результат появляется в буфере приема у всех членов группы.

Совет разработчикам: Операции типа all-reduce могут быть реализованы как последовательность операций reduce и bcast. Однако, прямая реализация может быть эффективнее.[]

Пример 4.21 Процедура вычисляет произведение вектора и массива, которые распределены по всем процессам группы, и возвращает ответ всем узлам (см.также пример 4.16).

SUBROUTINE PAR_BLAS2(m, n, a, b, c, comm)
REAL a(m), b(m,n)    ! локальная часть иассива
REAL c(n)            ! результат
REAL sum(n)
INTEGER n, comm, i, j, ierr

! локальная сумма
DO j= 1, n
  sum(j) = 0.0
  DO i = 1, m
    sum(j) = sum(j) + a(i)*b(i,j)
  END DO
END DO

! глобальная сумма
CALL MPI_ALLREDUCE(sum, c, n, MPI_REAL, MPI_SUM, comm, ierr)

! возвращение результата всем узлам
RETURN


next up previous contents
Next: Функция Reduce-Scatter Up: Глобальные операции редукции Previous: Операции, определяемые пользователем   Contents
Alex Otwagin 2002-12-10



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру