Toggle table of contents sidebar
for_each
¶
Header File: Kokkos_StdAlgorithms.hpp
namespace Kokkos{ namespace Experimental{ template <class ExecutionSpace, class InputIterator, class UnaryFunctorType> void for_each(const ExecutionSpace& exespace, (1) InputIterator first, InputIterator last, UnaryFunctorType functor); template <class ExecutionSpace, class InputIterator, class UnaryFunctorType> void for_each(const std::string& label, const ExecutionSpace& exespace, (2) InputIterator first, InputIterator last, UnaryFunctorType functor); template <class ExecutionSpace, class DataType, class... Properties, class UnaryFunctorType> void for_each(const ExecutionSpace& exespace, const Kokkos::View<DataType, Properties...>& view, (3) UnaryFunctorType functor); template <class ExecutionSpace, class DataType, class... Properties, class PredicateType> void for_each(const std::string& label, const ExecutionSpace& exespace, const Kokkos::View<DataType, Properties...>& view, (4) UnaryFunctorType func); } //end namespace Experimental } //end namespace KokkosDescription¶
Applies the UnaryFunctorType func
to the result of dereferencing each iterator in [first,last)
for (1,2) and to the view elements in (3,4).
exespace
:
execution space instance
label
:
for 1, the default string is: “Kokkos::for_each_iterator_api_default”
for 3, the default string is: “Kokkos::for_each_view_api_default”
first, last
:
range of elements to operate on
must be random access iterators
must represent a valid range, i.e., last >= first
(this condition is checked in debug mode)
must be accessible from exespace
view
:
must be rank-1, and have LayoutLeft
, LayoutRight
, or LayoutStride
must be accessible from exespace
func
:
function object called on the all the elements;
The signature of the function should be func(v)
.
Must be valid to be called from the execution space passed, and must accept every argument v
of type (possible const) value_type
, where value_type
is the value type of InputIterator
, and must not modify v
.
must conform to:
struct func { KOKKOS_INLINE_FUNCTION void operator()(const /*type needed */ & operand) const { /* ... */; } // or, also valid KOKKOS_INLINE_FUNCTION void operator()(/*type needed */ operand) const { /* ... */; } };
(nothing)
Example¶namespace KE = Kokkos::Experimental; template<class ValueType> struct IncrementValsFunctor { const ValueType m_value; IncrementValsFunctor(ValueType value) : m_value(value){} KOKKOS_INLINE_FUNCTION void operator()(const ValueType & operand) const { operand += m_value; } }; auto exespace = Kokkos::DefaultExecutionSpace; using view_type = Kokkos::View<exespace, int*>; view_type a("a", 15); // fill "a" somehow // create functor IncrementValsFunctor<int> p(5); // Increment each element in "a" by 5. KE::for_each(exespace, KE::begin(a), KE::end(a), p); // assuming OpenMP is enabled, then you can also explicitly call KE::for_each(Kokkos::OpenMP(), KE::begin(a), KE::end(a), p);
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4