Iterators

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

Header File: <Kokkos_StdAlgorithms.hpp> (until Kokkos 5.2), <Kokkos_Core.hpp> (since Kokkos 5.2)

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

Header File: <Kokkos_StdAlgorithms.hpp> (until Kokkos 5.2), <Kokkos_Core.hpp> (since Kokkos 5.2)

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