Function reduce
boost::mpi::reduce — Combine the values stored by each process into a single value at the root.
Synopsis
template<typename T, typename Op>
void reduce(const communicator & comm, const T & in_value, T & out_value,
Op op, int root);
template<typename T, typename Op>
void reduce(const communicator & comm, const T & in_value, Op op, int root);
template<typename T, typename Op>
void reduce(const communicator & comm, const T * in_values, int n,
T * out_values, Op op, int root);
template<typename T, typename Op>
void reduce(const communicator & comm, const T * in_values, int n, Op op,
int root);
Description
reduce
is a collective algorithm that combines the values stored by each process into a single value at the root
. The values can be combined arbitrarily, specified via a function object. The type T
of the values may be any type that is serializable or has an associated MPI data type. One can think of this operation as a gather
to the root
, followed by an std::accumulate()
over the gathered values and using the operation op
.
When the type T
has an associated MPI data type, this routine invokes MPI_Reduce
to perform the reduction. If possible, builtin MPI operations will be used; otherwise, reduce()
will create a custom MPI_Op for the call to MPI_Reduce.
Parameters: 
comm

The communicator over which the reduction will occur. 
in_value

The local value to be combined with the local values of every other process. For reducing arrays, in_values contains a pointer to the local values. In this case, n is the number of values that will be reduced. Reduction occurs independently for each of the n values referenced by in_values , e.g., calling reduce on an array of n values is like calling reduce n separate times, one for each location in in_values and out_values . 
op

The binary operation that combines two values of type T into a third value of type T . For types T that has ssociated MPI data types, op will either be translated into an MPI_Op (via MPI_Op_create ) or, if possible, mapped directly to a builtin MPI operation. See is_mpi_op in the operations.hpp header for more details on this mapping. For any nonbuiltin operation, commutativity will be determined by the is_commmutative trait (also in operations.hpp ): users are encouraged to mark commutative operations as such, because it gives the implementation additional lattitude to optimize the reduction operation. 
out_value

Will receive the result of the reduction operation, but only for the root process. Nonroot processes may omit if parameter; if they choose to supply the parameter, it will be unchanged. For reducing arrays, out_values contains a pointer to the storage for the output values. 
root

The process ID number that will receive the final, combined value. This value must be the same on all processes. 
