| Home | Libraries | People | FAQ | More

## Function exclusive_scan

boost::compute::exclusive_scan

## Synopsis

    // In header: <boost/compute/algorithm/exclusive_scan.hpp>

    template<typename InputIterator, typename OutputIterator, typename T,
             typename BinaryOperator>
      OutputIterator
      exclusive_scan(InputIterator first, InputIterator last,
                     OutputIterator result, T init, BinaryOperator binary_op,
                     command_queue & queue = system::default_queue());
    template<typename InputIterator, typename OutputIterator, typename T>
      OutputIterator
      exclusive_scan(InputIterator first, InputIterator last,
                     OutputIterator result, T init,
                     command_queue & queue = system::default_queue());
    template<typename InputIterator, typename OutputIterator>
      OutputIterator
      exclusive_scan(InputIterator first, InputIterator last,
                     OutputIterator result,
                     command_queue & queue = system::default_queue());

## Description

Performs an exclusive scan of the elements in the range [`first`, `last`) and stores the results in the range beginning at `result`.

Each element in the output is assigned to the sum of all the previous values in the input.

The default operation is to add the elements up.

But different associative operation can be specified as `binary_op` instead (e.g., multiplication, maximum, minimum). Also value used to initialized the scan sequence can be specified.

Space complexity on GPUs: \Omega(n)
Space complexity on GPUs when `first` == `result:` \Omega(2n)
Space complexity on CPUs: \Omega(1)

See Also:

inclusive_scan()

Parameters: |
`binary_op` | associative binary operator
`first` | first element in the range to scan
`init` | value used to initialize the scan sequence
`last` | last element in the range to scan
`queue` | command queue to perform the operation
`result` | first element in the result range
Returns: | `OutputIterator` to the end of the result range