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);