45 #ifndef KOKKOS_UNIQUE_TOKEN_HPP 46 #define KOKKOS_UNIQUE_TOKEN_HPP 48 #include <Kokkos_Macros.hpp> 49 #include <Kokkos_MemoryTraits.hpp> 50 #include <Kokkos_Core_fwd.hpp> 55 enum class UniqueTokenScope : int { Instance, Global };
62 template <
typename ExecutionSpace,
63 UniqueTokenScope = UniqueTokenScope::Instance>
66 using execution_space = ExecutionSpace;
67 using size_type =
typename execution_space::size_type;
72 UniqueToken(execution_space
const& = execution_space());
75 KOKKOS_INLINE_FUNCTION
76 size_type
size()
const;
79 KOKKOS_INLINE_FUNCTION
83 KOKKOS_INLINE_FUNCTION
92 template <
typename ExecutionSpace>
94 :
public UniqueToken<ExecutionSpace, UniqueTokenScope::Global> {
96 using execution_space = ExecutionSpace;
97 using size_type =
typename execution_space::size_type;
108 UniqueToken(size_type max_size, execution_space
const& = execution_space());
118 template <
typename ExecutionSpace,
119 UniqueTokenScope TokenScope = UniqueTokenScope::Instance>
122 using exec_space = ExecutionSpace;
123 using size_type =
typename exec_space::size_type;
128 size_type my_acquired_val;
132 : my_token(t), my_acquired_val(my_token.
acquire()) {}
136 KOKKOS_FUNCTION size_type value()
const {
return my_acquired_val; }
144 template <
typename TeamPolicy>
147 using exec_space =
typename TeamPolicy::execution_space;
149 using size_type =
typename token_type::size_type;
152 Kokkos::View<size_type,
typename exec_space::scratch_memory_space,
153 Kokkos::MemoryUnmanaged>;
157 size_type my_acquired_val;
159 team_member_type my_team;
172 KOKKOS_FUNCTION size_type value()
const {
return my_acquired_val; }
173 static std::size_t shmem_size() {
return scratch_view::shmem_size(); }
179 #endif // KOKKOS_UNIQUE_TOKEN_HPP
KOKKOS_INLINE_FUNCTION void release(size_type) const
release a value acquired by generate
RAII helper for per-thread unique token values.
class to generate unique ids base on the required amount of concurrency
KOKKOS_INLINE_FUNCTION size_type size() const
upper bound for acquired values, i.e. 0 <= value < size()
UniqueToken(execution_space const &=execution_space())
create object size for concurrency on the given instance
KOKKOS_INLINE_FUNCTION size_type acquire() const
acquire value such that 0 <= value < size()
RAII helper for per-team unique token values.
Parallel execution of a functor calls the functor once with each member of the execution policy...