20 #ifndef RAJA_MultiPolicy_HPP
21 #define RAJA_MultiPolicy_HPP
23 #include "RAJA/config.hpp"
40 template<
size_t index,
size_t size,
typename Policy,
typename... rest>
41 struct policy_invoker;
54 template<
typename Selector,
typename... Policies>
70 : _selector(p._selector),
74 template<
typename Iterable,
typename Body>
77 size_t index = _selector(i);
83 policy_invoker<
sizeof...(Policies) - 1,
sizeof...(Policies), Policies...>
92 template<
typename Iterable,
103 template<
typename Res,
107 typename... Policies>
115 return resources::EventProxy<Res>(r);
121 using policy::multi::MultiPolicy;
126 template<camp::idx_t... Indices,
typename... Policies,
typename Selector>
129 std::tuple<Policies...> policies)
132 return MultiPolicy<Selector, Policies...>(s, std::get<Indices>(policies)...);
144 template<
typename... Policies,
typename Selector>
145 RAJA_DEPRECATE(
"In the next RAJA Release, MultiPolicy will be deprecated.")
148 return MultiPolicy<Selector, Policies...>(s, Policies {}...);
160 template<
typename... Policies,
typename Selector>
161 RAJA_DEPRECATE(
"In the next RAJA Release, MultiPolicy will be deprecated.")
172 template<
size_t index,
size_t size,
typename Policy,
typename... rest>
175 static_assert(index < size,
"index must be in the range of possibilities");
181 template<
typename Iterable,
typename LoopBody>
182 void invoke(
int offset, Iterable&&
iter, LoopBody&& loop_body)
184 if (offset == size - index - 1)
198 RAJA_FORCEINLINE_RECURSIVE
207 std::forward<LoopBody>(loop_body));
212 template<
size_t size,
typename Policy,
typename... rest>
219 template<
typename Iterable,
typename LoopBody>
220 void invoke(
int offset, Iterable&&
iter, LoopBody&& loop_body)
222 if (offset == size - 1)
237 RAJA_FORCEINLINE_RECURSIVE
245 throw std::runtime_error(
"unknown offset invoked");
252 namespace type_traits
257 : ::RAJA::type_traits::SpecializationOf<RAJA::MultiPolicy,
258 typename std::decay<T>::type>
Header file for basic RAJA policy mechanics.
Definition: MultiPolicy.hpp:56
detail::policy_invoker< sizeof...(Policies) - 1, sizeof...(Policies), Policies... > _policies
Definition: MultiPolicy.hpp:84
MultiPolicy(Selector s)
Definition: MultiPolicy.hpp:62
int invoke(Iterable &&i, Body &&b)
Definition: MultiPolicy.hpp:75
MultiPolicy(const MultiPolicy &p)
Definition: MultiPolicy.hpp:69
MultiPolicy(Selector s, Policies... policies)
Definition: MultiPolicy.hpp:64
Header file for RAJA concept definitions.
#define RAJA_DEPRECATE(Msg)
Macros for marking deprecated features in RAJA.
Definition: macros.hpp:222
Args args
Definition: WorkRunner.hpp:212
auto make_multi_policy(camp::idx_seq< Indices... >, Selector s, std::tuple< Policies... > policies) -> MultiPolicy< Selector, Policies... >
Definition: MultiPolicy.hpp:127
value_type::device_call &[i_loop] iter
Definition: WorkRunner.hpp:216
RAJA_INLINE resources::EventProxy< Res > forall_impl(Res r, MultiPolicy< Selector, Policies... > p, Iterable &&iter, Body &&body)
Definition: MultiPolicy.hpp:108
RAJA_INLINE void forall_impl(MultiPolicy< Selector, Policies... > p, Iterable &&iter, Body &&body)
Definition: MultiPolicy.hpp:96
RAJA_INLINE void callPreLaunchPlugins(const PluginContext &p)
Definition: plugins.hpp:56
RAJA_INLINE void callPostCapturePlugins(const PluginContext &p)
Definition: plugins.hpp:46
RAJA_INLINE auto trigger_updates_before(T &&item) -> typename std::remove_reference< T >::type
Definition: plugins.hpp:29
RAJA_INLINE void callPostLaunchPlugins(const PluginContext &p)
Definition: plugins.hpp:66
RAJA_INLINE void callPreCapturePlugins(const PluginContext &p)
Definition: plugins.hpp:36
Definition: AlignedRangeIndexSetBuilders.cpp:35
Policy
Definition: PolicyBase.hpp:32
auto & body
Definition: launch.hpp:177
auto make_multi_policy(Selector s) -> MultiPolicy< Selector, Policies... >
Definition: MultiPolicy.hpp:146
Definition: ListSegment.hpp:416
Header file for RAJA resource definitions.
Policy _p
Definition: MultiPolicy.hpp:215
policy_invoker(Policy p, rest...)
Definition: MultiPolicy.hpp:217
void invoke(int offset, Iterable &&iter, LoopBody &&loop_body)
Definition: MultiPolicy.hpp:220
Definition: MultiPolicy.hpp:174
policy_invoker(Policy p, rest... args)
Definition: MultiPolicy.hpp:179
void invoke(int offset, Iterable &&iter, LoopBody &&loop_body)
Definition: MultiPolicy.hpp:182
Policy _p
Definition: MultiPolicy.hpp:175
Definition: resource.hpp:48
Definition: MultiPolicy.hpp:259
Definition: PluginContext.hpp:26