Template Function thrust::inclusive_scan(InputIterator, InputIterator, OutputIterator)¶
Function Documentation¶
-
template<typename
InputIterator, typenameOutputIterator>
OutputIteratorthrust::inclusive_scan(InputIterator first, InputIterator last, OutputIterator result) inclusive_scancomputes an inclusive prefix sum operation. The term ‘inclusive’ means that each result includes the corresponding input operand in the partial sum. More precisely,*firstis assigned to*resultand the sum of*firstand*(first + 1)is assigned to*(result + 1), and so on. This version ofinclusive_scanassumes plus as the associative operator. When the input and output sequences are the same, the scan is performed in-place.inclusive_scanis similar tostd::partial_sumin the STL. The primary difference between the two functions is thatstd::partial_sumguarantees a serial summation order, whileinclusive_scanrequires associativity of the binary operation to parallelize the prefix sum.The following code snippet demonstrates how to use
inclusive_scan- Return
The end of the output sequence.
- Pre
firstmay equalresultbut the range[first, last)and the range[result, result + (last - first))shall not overlap otherwise.- 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 andInputIterator'svalue_typeis convertible toOutputIterator'svalue_type.OutputIterator: is a model of Output Iterator, and ifxandyare objects ofOutputIterator'svalue_type, thenx + yis defined. IfTisOutputIterator'svalue_type, thenT(0)is defined.
#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}