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, built-in 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 built-in MPI operation. See is_mpi_op in the operations.hpp header for more details on this mapping. For any non-built-in 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. Non-root 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. |
|