21 #ifndef RAJA_pattern_kernel_internal_LoopData_HPP
22 #define RAJA_pattern_kernel_internal_LoopData_HPP
24 #include "RAJA/config.hpp"
30 #include "camp/camp.hpp"
38 #include <type_traits>
56 template<camp::
idx_t ArgumentId,
typename Policy>
59 constexpr
static camp::idx_t
index_val = ArgumentId;
60 using index = camp::num<ArgumentId>;
66 template<
typename Iterator>
69 using type =
typename std::iterator_traits<
70 typename Iterator::iterator>::difference_type;
73 template<
typename Segments>
75 typename camp::transform<iterable_difftype_getter, Segments>::type;
78 template<
typename Segments>
80 typename camp::apply_l<camp::lambda<camp::tuple>,
83 template<
typename Iterator>
87 typename std::iterator_traits<typename Iterator::iterator>::value_type;
90 template<
typename Segments>
92 typename camp::transform<iterable_value_type_getter, Segments>::type;
95 template<
typename Segments>
97 typename camp::apply_l<camp::lambda<camp::tuple>,
100 template<
typename Segments>
102 typename camp::apply_l<camp::lambda<camp::list>,
105 template<
typename SegmentTuple,
157 template<camp::
idx_t Idx,
typename IndexT>
163 template<
typename ParamId,
typename IndexT>
167 camp::at_v<typename param_tuple_t::TList, ParamId::param_idx>;
168 camp::get<ParamId::param_idx>(
param_tuple) = param_t(i);
171 template<
typename ParamId>
173 -> camp::at_v<typename param_tuple_t::TList, ParamId::param_idx>
181 template<camp::
idx_t ArgumentId,
typename Data>
183 typename camp::at_v<
typename Data::segment_tuple_t::TList,
184 ArgumentId>::iterator>::difference_type;
186 template<camp::
idx_t ArgumentId,
typename Data>
190 return camp::get<ArgumentId>(data.segment_tuple).end() -
191 camp::get<ArgumentId>(data.segment_tuple).begin();
194 template<
typename Data,
typename Types,
typename... EnclosedStmts>
RAJA header file defining index set classes.
Header file for loop kernel internals.
Header file for loop kernel internals and helper functions.
Header file for common RAJA internal macro definitions.
#define RAJA_HOST_DEVICE
Definition: macros.hpp:65
typename camp::apply_l< camp::lambda< camp::list >, value_type_list_from_segments< Segments > >::type index_types_from_segments
Definition: LoopData.hpp:103
RAJA_INLINE void execute_statement_list(Data &&data)
Definition: StatementList.hpp:84
RAJA_INLINE RAJA_HOST_DEVICE auto segment_length(Data const &data) -> segment_diff_type< ArgumentId, Data >
Definition: LoopData.hpp:187
typename detail::TupleOfNHelper< T, camp::make_idx_seq_t< N > >::type tuple_of_n
Definition: Template.hpp:80
typename std::iterator_traits< typename camp::at_v< typename Data::segment_tuple_t::TList, ArgumentId >::iterator >::difference_type segment_diff_type
Definition: LoopData.hpp:184
typename camp::transform< iterable_value_type_getter, Segments >::type value_type_list_from_segments
Definition: LoopData.hpp:92
typename camp::transform< iterable_difftype_getter, Segments >::type difftype_list_from_segments
Definition: LoopData.hpp:75
typename camp::apply_l< camp::lambda< camp::tuple >, difftype_list_from_segments< Segments > >::type difftype_tuple_from_segments
Definition: LoopData.hpp:81
typename camp::apply_l< camp::lambda< camp::tuple >, value_type_list_from_segments< Segments > >::type index_tuple_from_segments
Definition: LoopData.hpp:98
Definition: AlignedRangeIndexSetBuilders.cpp:35
Policy
Definition: PolicyBase.hpp:32
Definition: params_base.hpp:288
Definition: LoopData.hpp:54
Definition: LoopData.hpp:51
Definition: LoopData.hpp:48
Definition: LoopData.hpp:58
camp::num< ArgumentId > index
Definition: LoopData.hpp:60
constexpr static camp::idx_t index_val
Definition: LoopData.hpp:59
camp::nil index_type
Definition: LoopData.hpp:61
Definition: privatizer.hpp:47
Definition: LoopData.hpp:196
constexpr RAJA_INLINE GenericWrapper(data_t &d)
Definition: LoopData.hpp:202
data_t & data
Definition: LoopData.hpp:199
camp::decay< Data > data_t
Definition: LoopData.hpp:197
RAJA_INLINE void exec()
Definition: LoopData.hpp:205
Definition: LoopData.hpp:110
RAJA_HOST_DEVICE RAJA_INLINE void assign_param(IndexT const &i)
Definition: LoopData.hpp:164
ParamTuple param_tuple_t
Definition: LoopData.hpp:127
vector_sizes_t vector_sizes
Definition: LoopData.hpp:142
RAJA_INLINE constexpr RAJA_HOST_DEVICE LoopData(SegmentTuple const &s, ParamTuple const &p, Resource r, Bodies const &... b)
Definition: LoopData.hpp:144
constexpr LoopData(LoopData &&)=default
SegmentTuple segment_tuple_t
Definition: LoopData.hpp:123
const BodiesTuple bodies
Definition: LoopData.hpp:136
offset_tuple_t offset_tuple
Definition: LoopData.hpp:137
difftype_tuple_from_segments< typename SegmentTuple::TList > offset_tuple_t
Definition: LoopData.hpp:116
RAJA_HOST_DEVICE RAJA_INLINE auto get_param() -> camp::at_v< typename param_tuple_t::TList, ParamId::param_idx >
Definition: LoopData.hpp:172
RAJA_HOST_DEVICE RAJA_INLINE Resource get_resource()
Definition: LoopData.hpp:178
ParamTuple param_tuple
Definition: LoopData.hpp:130
tuple_of_n< int, camp::tuple_size< SegmentTuple >::value > vector_sizes_t
Definition: LoopData.hpp:141
constexpr LoopData(LoopData const &)=default
typename RAJA::expt::detail::ParamToArgHelper< ParamTuple >::type arg_tuple_t
Definition: LoopData.hpp:129
RAJA_HOST_DEVICE RAJA_INLINE void assign_offset(IndexT const &i)
Definition: LoopData.hpp:158
SegmentTuple segment_tuple
Definition: LoopData.hpp:124
camp::tuple< Bodies... > BodiesTuple
Definition: LoopData.hpp:135
index_types_from_segments< typename SegmentTuple::TList > index_types_t
Definition: LoopData.hpp:120
Resource res
Definition: LoopData.hpp:132
Definition: LoopData.hpp:216
value_type privatized_wrapper
Definition: LoopData.hpp:222
data_t privatized_data
Definition: LoopData.hpp:221
constexpr RAJA_INLINE NestedPrivatizer(const T &o)
Definition: LoopData.hpp:225
typename T::data_t data_t
Definition: LoopData.hpp:217
value_type & reference_type
Definition: LoopData.hpp:219
camp::decay< T > value_type
Definition: LoopData.hpp:218
RAJA_INLINE reference_type get_priv()
Definition: LoopData.hpp:231
Definition: LoopData.hpp:68
typename std::iterator_traits< typename Iterator::iterator >::difference_type type
Definition: LoopData.hpp:70
Definition: LoopData.hpp:85
typename std::iterator_traits< typename Iterator::iterator >::value_type type
Definition: LoopData.hpp:87
Header file for RAJA type definitions.