thrust::exclusive_scan
Defined in thrust/scan.h
-
template<typename DerivedPolicy, typename InputIterator, typename OutputIterator, typename T>
OutputIterator thrust::exclusive_scan(const thrust::detail::execution_policy_base<DerivedPolicy> &exec, InputIterator first, InputIterator last, OutputIterator result, T init) exclusive_scancomputes an exclusive prefix sum operation. The term ‘exclusive’ means that each result does not include the corresponding input operand in the partial sum. More precisely,initis assigned to*resultand the sum ofinitand*firstis assigned to*(result + 1), and so on. This version ofexclusive_scanassumes plus as the associative operator but requires an initial valueinit. When the input and output sequences are the same, the scan is performed in-place.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 algorithm’s execution is parallelized as determined by
exec.The following code snippet demonstrates how to use
exclusive_scanto compute an in-place prefix sum using thethrust::hostexecution policy for parallelization:#include <thrust/scan.h> #include <thrust/execution_policy.h> int data[6] = {1, 0, 2, 2, 1, 3}; thrust::exclusive_scan(thrust::host, data, data + 6, data, 4); // in-place scan // data is now {4, 5, 5, 7, 9, 10}
- Parameters
exec – The execution policy to use for parallelization.
first – The beginning of the input sequence.
last – The end of the input sequence.
result – The beginning of the output sequence.
init – The initial value.
- Template Parameters
DerivedPolicy – The name of the derived execution policy.
InputIterator – is a model of Input Iterator and
InputIterator'svalue_typeis convertible toOutputIterator'svalue_type.OutputIterator – is a model of Output Iterator, and if
xandyare objects ofOutputIterator'svalue_type, thenx + yis defined.T – is convertible to
OutputIterator'svalue_type.
- Returns
The end of the output sequence.
- Pre
firstmay equalresultbut the range[first, last)and the range[result, result + (last - first))shall not overlap otherwise.