Template Function thrust::reduce(InputIterator, InputIterator, T, BinaryFunction)

Function Documentation

template<typename InputIterator, typename T, typename BinaryFunction>
T thrust::reduce(InputIterator first, InputIterator last, T init, BinaryFunction binary_op)

reduce is a generalization of summation: it computes the sum (or some other binary operation) of all the elements in the range [first, last). This version of reduce uses init as the initial value of the reduction and binary_op as the binary function used for summation. reduce is similar to the C++ Standard Template Library’s std::accumulate. The primary difference between the two functions is that std::accumulate guarantees the order of summation, while reduce requires associativity of binary_op to parallelize the reduction.

Note that reduce also assumes that the binary reduction operator (in this case binary_op) is commutative. If the reduction operator is not commutative then thrust::reduce should not be used. Instead, one could use inclusive_scan (which does not require commutativity) and select the last element of the output array.

The following code snippet demonstrates how to use

reduce to compute the maximum value of a sequence of integers.
Return

The result of the reduction.

Parameters
  • first: The beginning of the input sequence.

  • last: The end of the input sequence.

  • init: The initial value.

  • binary_op: The binary function used to ‘sum’ values.

Template Parameters
  • InputIterator: is a model of Input Iterator and InputIterator's value_type is convertible to T.

  • T: is a model of Assignable, and is convertible to BinaryFunction's first_argument_type and second_argument_type.

  • BinaryFunction: is a model of Binary Function, and BinaryFunction's result_type is convertible to OutputType.

#include <thrust/reduce.h>
#include <thrust/functional.h>
...
int data[6] = {1, 0, 2, 2, 1, 3};
int result = thrust::reduce(data, data + 6,
                            -1,
                            thrust::maximum<int>());
// result == 3

See

http://www.sgi.com/tech/stl/accumulate.html

See

transform_reduce