__forceinline__ __device__
RandomAccessIterator2 copy_n(const bounded<bound,agent<grainsize> > &b,
                             RandomAccessIterator1 first,
                             Size n,
                             RandomAccessIterator2 result)
{
    typedef typename bounded<bound,agent<grainsize> >::size_type size_type;

    if(bound <= n)
    {
        for(size_type i = 0; i < b.bound(); ++i, ++result, ++first)
        {
            *result = *first;
        } // end for i
    } // end if
    else
    {
        for(size_type i = 0; i < b.bound(); ++i, ++first)
        {
            if(i < n)
            {
                *result = *first;
                ++result;
            } // end if
        } // end for i
    } // end else

    return result;
} // end copy_n()
Exemple #2
0
__forceinline__ __device__
T accumulate(const bounded<bound,bulk::agent<grainsize> > &exec,
             RandomAccessIterator first,
             RandomAccessIterator last,
             T init,
             BinaryFunction binary_op)
{
  typedef typename bounded<bound,bulk::agent<grainsize> >::size_type size_type;

  size_type n = last - first;

  for(size_type i = 0; i < exec.bound(); ++i)
  {
    if(i < n)
    {
      init = binary_op(init, first[i]);
    } // end if
  } // end for i

  return init;
} // end accumulate()