Template Function thrust::transform_reduce(InputIterator, InputIterator, UnaryFunction, OutputType, BinaryFunction)¶
Function Documentation¶
-
template<typename
InputIterator, typenameUnaryFunction, typenameOutputType, typenameBinaryFunction>
OutputTypethrust::transform_reduce(InputIterator first, InputIterator last, UnaryFunction unary_op, OutputType init, BinaryFunction binary_op) transform_reducefuses thetransformandreduceoperations.transform_reduceis equivalent to performing a transformation defined byunary_opinto a temporary sequence and then performingreduceon the transformed sequence. In most cases, fusing these two operations together is more efficient, since fewer memory reads and writes are required.transform_reduceperforms a reduction on the transformation of the sequence[first, last)according tounary_op. Specifically,unary_opis applied to each element of the sequence and then the result is reduced to a single value withbinary_opusing the initial valueinit. Note that the transformationunary_opis not applied to the initial valueinit. The order of reduction is not specified, sobinary_opmust be both commutative and associative.The following code snippet demonstrates how to use
transform_reduceto compute the maximum value of the absolute value of the elements of a range.- Return
The result of the transformed reduction.
- Parameters
first: The beginning of the sequence.last: The end of the sequence.unary_op: The function to apply to each element of the input sequence.init: The result is initialized to this value.binary_op: The reduction operation.
- Template Parameters
InputIterator: is a model of Input Iterator, andInputIterator'svalue_typeis convertible toUnaryFunction'sargument_type.UnaryFunction: is a model of Unary Function, andUnaryFunction'sresult_typeis convertible toOutputType.OutputType: is a model of Assignable, and is convertible toBinaryFunction'sfirst_argument_typeandsecond_argument_type.BinaryFunction: is a model of Binary Function, andBinaryFunction'sresult_typeis convertible toOutputType.
#include <thrust/transform_reduce.h> #include <thrust/functional.h> template<typename T> struct absolute_value : public unary_function<T,T> { __host__ __device__ T operator()(const T &x) const { return x < T(0) ? -x : x; } }; ... int data[6] = {-1, 0, -2, -2, 1, -3}; int result = thrust::transform_reduce(data, data + 6, absolute_value<int>(), 0, thrust::maximum<int>()); // result == 3
- See
transform- See
reduce