20 #ifndef RAJA_pattern_kernel_HPP
21 #define RAJA_pattern_kernel_HPP
23 #include "RAJA/config.hpp"
28 #include "camp/camp.hpp"
29 #include "camp/concepts.hpp"
30 #include "camp/tuple.hpp"
45 template<
typename... Stmts>
52 template<camp::idx_t... ArgumentId>
53 using ArgList = camp::idx_seq<ArgumentId...>;
59 template<
typename... Ts>
63 using type = camp::tuple<RAJA::Span<typename camp::decay<Ts>::iterator,
64 typename camp::decay<Ts>::IndexType>...>;
69 template<
class Tuple, camp::idx_t... I>
74 camp::tuple_element_t<I, camp::decay<Tuple>>>::iterator,
76 camp::tuple_element_t<I, camp::decay<Tuple>>>::IndexType>...>
78 return camp::make_tuple(
80 camp::tuple_element_t<I, camp::decay<Tuple>>>::iterator,
82 camp::tuple_element_t<I, camp::decay<Tuple>>>::IndexType> {
83 camp::get<I>(std::forward<Tuple>(t)).
begin(),
84 camp::get<I>(std::forward<Tuple>(t)).end()}...);
91 std::forward<Tuple>(t),
92 camp::make_idx_seq_t<camp::tuple_size<camp::decay<Tuple>>::value> {}))
95 std::forward<Tuple>(t),
96 camp::make_idx_seq_t<camp::tuple_size<camp::decay<Tuple>>::value> {});
99 template<
typename PolicyType,
100 typename SegmentTuple,
105 SegmentTuple&& segments,
117 using segment_tuple_t =
121 using param_tuple_t = camp::decay<ParamTuple>;
124 Resource, camp::decay<Bodies>...>;
133 loop_data_t loop_data(
135 std::forward<ParamTuple>(params), resource,
136 std::forward<Bodies>(bodies)...);
143 RAJA::expt::detail::init_params<seq_exec>(loop_data.param_tuple);
145 RAJA_FORCEINLINE_RECURSIVE
146 internal::execute_statement_list<PolicyType, loop_types_t>(loop_data);
151 RAJA::expt::detail::resolve_params<seq_exec>(loop_data.param_tuple);
154 return resources::EventProxy<Resource>(resource);
157 template<
typename PolicyType,
158 typename SegmentTuple,
162 SegmentTuple&& segments,
166 return RAJA::kernel_param_resource<PolicyType>(
167 std::forward<SegmentTuple>(segments), RAJA::make_tuple(), resource,
168 std::forward<Bodies>(bodies)...);
171 template<
typename PolicyType,
172 typename SegmentTuple,
175 RAJA_INLINE resources::EventProxy<resources::resource_from_pol_t<PolicyType>>
176 kernel_param(SegmentTuple&& segments, ParamTuple&& params, Bodies&&... bodies)
178 auto res = resources::get_default_resource<PolicyType>();
179 return RAJA::kernel_param_resource<PolicyType>(
180 std::forward<SegmentTuple>(segments), std::forward<ParamTuple>(params),
181 res, std::forward<Bodies>(bodies)...);
184 template<
typename PolicyType,
typename SegmentTuple,
typename... Bodies>
185 RAJA_INLINE resources::EventProxy<resources::resource_from_pol_t<PolicyType>>
186 kernel(SegmentTuple&& segments, Bodies&&... bodies)
188 auto res = resources::get_default_resource<PolicyType>();
189 return RAJA::kernel_param_resource<PolicyType>(
190 std::forward<SegmentTuple>(segments), RAJA::make_tuple(), res,
191 std::forward<Bodies>(bodies)...);
Header file for kernel conditional templates.
Header file for parallel region in kernel.
Header file containing type traits needed by kernel implementation.
Header file for common RAJA internal macro definitions.
camp::list< Stmts... > StatementList
Definition: StatementList.hpp:41
constexpr RAJA_INLINE auto make_wrapped_tuple_impl(Tuple &&t, camp::idx_seq< I... >) -> camp::tuple< RAJA::Span< typename camp::decay< camp::tuple_element_t< I, camp::decay< Tuple >>>::iterator, typename camp::decay< camp::tuple_element_t< I, camp::decay< Tuple >>>::IndexType >... >
Definition: kernel.hpp:70
RAJA_INLINE void callPreLaunchPlugins(const PluginContext &p)
Definition: plugins.hpp:56
RAJA_INLINE void callPostCapturePlugins(const PluginContext &p)
Definition: plugins.hpp:46
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
RAJA_INLINE resources::EventProxy< Resource > kernel_param_resource(SegmentTuple &&segments, ParamTuple &¶ms, Resource resource, Bodies &&... bodies)
Definition: kernel.hpp:104
camp::idx_seq< ArgumentId... > ArgList
Definition: kernel.hpp:53
RAJA_INLINE resources::EventProxy< resources::resource_from_pol_t< PolicyType > > kernel(SegmentTuple &&segments, Bodies &&... bodies)
Definition: kernel.hpp:186
RAJA_INLINE resources::EventProxy< resources::resource_from_pol_t< PolicyType > > kernel_param(SegmentTuple &&segments, ParamTuple &¶ms, Bodies &&... bodies)
Definition: kernel.hpp:176
RAJA_INLINE resources::EventProxy< Resource > kernel_resource(SegmentTuple &&segments, Resource resource, Bodies &&... bodies)
Definition: kernel.hpp:161
constexpr RAJA_INLINE auto make_wrapped_tuple(Tuple &&t) -> decltype(internal::make_wrapped_tuple_impl(std::forward< Tuple >(t), camp::make_idx_seq_t< camp::tuple_size< camp::decay< Tuple >>::value > {}))
Definition: kernel.hpp:89
internal::StatementList< Stmts... > KernelPolicy
Definition: kernel.hpp:46
Header file for kernel statement collapse struct.
Header file for kernel conditional templates.
Header file for statement wrappers and executors.
Header file for statement wrappers and executors.
Header file for hyperplane patern executor.
Header file for shared memory window.
Header file for kernel lambda executor.
Header file for statement wrappers and executors.
Header file for tile wrapper and iterator.
Header file for tile wrapper and iterator.
Header file for loop kernel internals.
camp::tuple< RAJA::Span< typename camp::decay< Ts >::iterator, typename camp::decay< Ts >::IndexType >... > type
Definition: kernel.hpp:64
Definition: kernel.hpp:57
A view to a sequence of objects.
Definition: Span.hpp:62
constexpr RAJA_HOST_DEVICE RAJA_INLINE iterator begin()
Definition: Span.hpp:87
Definition: LoopData.hpp:110
Definition: LoopTypes.hpp:34
Definition: PluginContext.hpp:26
Header file for RAJA type definitions.