Beispiel #1
0
inline void dispatch_reduce(InputIterator first,
                            InputIterator last,
                            const buffer_iterator<T> result,
                            const plus<T> &function,
                            command_queue &queue)
{
    reduce_on_gpu(first, last, result, function, queue);
}
inline void dispatch_reduce(InputIterator first,
                            InputIterator last,
                            OutputIterator result,
                            const plus<T> &function,
                            command_queue &queue)
{
    const context &context = queue.get_context();
    const device &device = queue.get_device();

    // reduce to temporary buffer on device
    array<T, 1> value(context);
    if(device.type() & device::cpu){
        detail::reduce_on_cpu(first, last, value.begin(), function, queue);
    }
    else {
        reduce_on_gpu(first, last, value.begin(), function, queue);
    }

    // copy to result iterator
    copy_n(value.begin(), 1, result, queue);
}