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 asconst
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 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
#
-
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
tolast
.
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);