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