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
viewis taken asconstbecause, 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
viewis accessible
Parameters and Requirements¶
view: must be a rank-1 view withLayoutLeft,LayoutRight, orLayoutStride
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
firsttolast.
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