MPI_REDUCE combines the elements provided
in the input buffer of each process in the
group, using the operation op, and returns the combined value in
the output buffer of the process with rank root.
The input buffer is defined by the arguments sendbuf,
count and datatype; the output buffer is defined by
the arguments recvbuf, count and datatype;
both have the same number of elements, with the same type. The arguments
count, op and root must have identical
values at all processes, the datatype arguments should match,
and comm should represent the same
intragroup communication domain.
Thus, all processes provide input buffers and output buffers of the
same length, with elements of the same type.
Each process can provide one element, or a sequence of elements,
in which case the
combine operation is executed element-wise on each entry of the sequence.
For example, if the operation is MPI_MAX and the send buffer
MPI_MAX
contains two elements that are floating point numbers (count = 2 and
datatype = MPI_FLOAT), then recvbuf(0) = globalmax(sendbuf(0)) and recvbuf(1)i = globalmax(sendbuf(1)).

Section lists the set of predefined operations
provided by MPI. That section also enumerates
the allowed datatypes for each operation.
In addition, users may define their own operations that can be
overloaded to operate on several datatypes, either basic or derived.
This is further explained in Section .

The operation op is always assumed to be
associative. All predefined operations are also
commutative. Users may define operations that are assumed to be
associative, but not commutative. The ``canonical'' evaluation order
of a reduction is determined by the ranks of the processes in the
group. However, the implementation can take
advantage of associativity, or associativity and commutativity
in order to change the order of evaluation.
This may change the result of the reduction for operations that are not
strictly associative and commutative, such as floating point addition.

The datatype argument of MPI_REDUCE must be
compatible with op. Predefined operators work only with
the MPI types listed in Section and
Section . User-defined operators may operate
on general, derived datatypes. In this case, each argument that
the reduce operation is applied to is one element described by such a datatype,
which may contain several basic values.
This is further explained in Section .