Iterators#

Kokkos::Experimental::{begin, cbegin, end, cend}#

Header File: <Kokkos_StdAlgorithms.hpp>

template<class DataType, class ...Properties>
KOKKOS_INLINE_FUNCTION auto begin(const Kokkos::View<DataType, Properties...> &view);#

Returns a Kokkos random access iterator to the beginning of view

template<class DataType, class ...Properties>
KOKKOS_INLINE_FUNCTION auto cbegin(const Kokkos::View<DataType, Properties...> &view);#

Returns a Kokkos const-qualified random access iterator to the beginning of view

template<class DataType, class ...Properties>
KOKKOS_INLINE_FUNCTION auto end(const Kokkos::View<DataType, Properties...> &view);#

Returns a Kokkos random access iterator to the element past the end of view

template<class DataType, class ...Properties>
KOKKOS_INLINE_FUNCTION auto cend(const Kokkos::View<DataType, Properties...> &view);#

Returns a const-qualified Kokkos random access iterator to the element past the end of view

Notes#

  • the returned iterator is a random access for performance reasons

  • view is taken as const because, within each function, we are not changing the view itself: the returned iterator operates on the view without changing its structure.

  • dereferencing an iterator must be done within an execution space where view is accessible

Parameters and Requirements#

  • view: must be a rank-1 view with LayoutLeft, LayoutRight, or LayoutStride

Example#

namespace KE = Kokkos::Experimental;
using view_type = Kokkos::View<int*>;
view_type a("a", 15);

auto it = KE::begin(a);
// if dereferenced (within a proper execution space), can modify the content of `a`

auto itc = KE::cbegin(a);
// if dereferenced (within a proper execution space), can only read the content of `a`

Kokkos::Experimental::distance#

template<class IteratorType>
KOKKOS_INLINE_FUNCTION constexpr typename IteratorType::difference_type distance(IteratorType first, IteratorType last);#

Returns the number of steps needed to go from first to last.

Parameters and Requirements#

  • first, last: range to calculate the distance of

Return#

The number of steps needed to go from first to last. The value may be negative if random-access iterators are used.

Example#

namespace KE = Kokkos::Experimental;
Kokkos::View<double*> a("a", 13);

auto it1 = KE::begin(a);
auto it2 = it1 + 4;
const auto stepsA = KE::distance(it1, it2);
// stepsA should be equal to 4

const auto stepsB = KE::distance(it2, it1);
// stepsB should be equal to -4

Kokkos::Experimental::iter_swap#

template<class IteratorType>
void iter_swap(IteratorType first, IteratorType last);#

Swaps the values of the elements the given iterators are pointing to.

Parameters and Requirements#

  • first, last: iterators to swap

Notes#

Currently, the API does not have an execution space parameter because the operation is performed in the default execution space. The operation fences the default execution space.

Return#

None

Example#

namespace KE = Kokkos::Experimental;
Kokkos::View<double*> a("a", 13);

auto it1 = KE::begin(a);
auto it2 = it1 + 4;
KE::swap(it1, it2);