thrust::inclusive_scan
Defined in thrust/scan.h
-
template<typename InputIterator, typename OutputIterator>
OutputIterator thrust::inclusive_scan(InputIterator first, InputIterator last, OutputIterator result) inclusive_scan
computes an inclusive prefix sum operation. The term ‘inclusive’ means that each result includes the corresponding input operand in the partial sum. More precisely,*first
is assigned to*result
and the sum of*first
and*(first + 1)
is assigned to*(result + 1)
, and so on. This version ofinclusive_scan
assumes plus as the associative operator. When the input and output sequences are the same, the scan is performed in-place.inclusive_scan
is similar tostd::partial_sum
in the STL. The primary difference between the two functions is thatstd::partial_sum
guarantees a serial summation order, whileinclusive_scan
requires associativity of the binary operation to parallelize the prefix sum.Results are not deterministic for pseudo-associative operators (e.g., addition of floating-point types). Results for pseudo-associative operators may vary from run to run.
The following code snippet demonstrates how to use
inclusive_scan
#include <thrust/scan.h> int data[6] = {1, 0, 2, 2, 1, 3}; thrust::inclusive_scan(data, data + 6, data); // in-place scan // data is now {1, 1, 3, 5, 6, 9}
- Parameters
first – The beginning of the input sequence.
last – The end of the input sequence.
result – The beginning of the output sequence.
- Template Parameters
InputIterator – is a model of Input Iterator and
InputIterator's
value_type
is convertible toOutputIterator's
value_type
.OutputIterator – is a model of Output Iterator, and if
x
andy
are objects ofOutputIterator's
value_type
, thenx + y
is defined. IfT
isOutputIterator's
value_type
, thenT(0)
is defined.
- Returns
The end of the output sequence.
- Pre
first
may equalresult
but the range[first, last)
and the range[result, result + (last - first))
shall not overlap otherwise.