20 #ifndef RAJA_pattern_kernel_Tile_HPP
21 #define RAJA_pattern_kernel_Tile_HPP
23 #include "RAJA/config.hpp"
26 #include <type_traits>
28 #include "camp/camp.hpp"
29 #include "camp/concepts.hpp"
30 #include "camp/tuple.hpp"
57 template<camp::idx_t ArgumentId,
60 typename... EnclosedStmts>
70 template<camp::
idx_t chunk_size_>
76 template<camp::
idx_t ArgumentId>
79 static constexpr camp::idx_t
id = ArgumentId;
90 template<camp::idx_t ArgumentId,
93 typename... EnclosedStmts>
101 template<
typename InSegmentIndexType>
105 camp::get<ArgumentId>(
Base::data.segment_tuple) = si.s;
112 template<
typename Iterable>
163 return iterator(itiler, block_id - rhs);
177 return *((*this) + rhs);
183 return block_id != rhs.block_id;
189 return block_id < rhs.block_id;
233 template<camp::idx_t ArgumentId,
234 camp::idx_t ChunkSize,
236 typename... EnclosedStmts,
239 statement::Tile<ArgumentId, tile_fixed<ChunkSize>, EPol, EnclosedStmts...>,
243 template<
typename Data>
244 static RAJA_INLINE
void exec(Data& data)
247 auto const& segment = camp::get<ArgumentId>(data.segment_tuple);
254 IterableTiler<decltype(segment)> tiled_iterable(segment, chunk_size);
257 TileWrapper<ArgumentId, Data, Types, EnclosedStmts...> tile_wrapper(data);
261 forall_impl(r, EPol {}, tiled_iterable, tile_wrapper,
262 RAJA::expt::get_empty_forall_param_pack());
265 camp::get<ArgumentId>(data.segment_tuple) = tiled_iterable.
it;
269 template<camp::idx_t ArgumentId,
271 typename... EnclosedStmts,
275 Tile<ArgumentId, tile_dynamic<ArgumentId>, EPol, EnclosedStmts...>,
279 template<
typename Data>
280 static RAJA_INLINE
void exec(Data& data)
283 auto const& segment = camp::get<ArgumentId>(data.segment_tuple);
286 auto chunk_size = camp::get<ArgumentId>(data.param_tuple);
288 camp::concepts::metalib::is_same<
TileSize, decltype(chunk_size)>::value,
289 "Extracted parameter must be of type TileSize.");
292 IterableTiler<decltype(segment)> tiled_iterable(segment, chunk_size.size);
295 TileWrapper<ArgumentId, Data, Types, EnclosedStmts...> tile_wrapper(data);
299 forall_impl(r, EPol {}, tiled_iterable, tile_wrapper,
300 RAJA::expt::get_empty_forall_param_pack());
303 camp::get<ArgumentId>(data.segment_tuple) = tiled_iterable.
it;
RAJA_HOST_DEVICE RAJA_INLINE bool operator<(const iterator &rhs) const
Definition: Tile.hpp:187
std::random_access_iterator_tag iterator_category
Definition: Tile.hpp:134
RAJA_HOST_DEVICE RAJA_INLINE bool operator!=(const iterator &rhs) const
Definition: Tile.hpp:181
RAJA_HOST_DEVICE RAJA_INLINE value_type operator[](difference_type rhs) const
Definition: Tile.hpp:175
RAJA_HOST_DEVICE constexpr RAJA_INLINE iterator(IterableTiler const &itiler_, Index_type block_id_)
Definition: Tile.hpp:139
RAJA_HOST_DEVICE RAJA_INLINE iterator operator+(const difference_type &rhs) const
Definition: Tile.hpp:167
RAJA_HOST_DEVICE RAJA_INLINE iterator operator-(const difference_type &rhs) const
Definition: Tile.hpp:161
camp::idx_t difference_type
Definition: Tile.hpp:131
RAJA_HOST_DEVICE RAJA_INLINE difference_type operator-(const iterator &rhs) const
Definition: Tile.hpp:154
RAJA_HOST_DEVICE RAJA_INLINE value_type operator*()
Definition: Tile.hpp:147
Header file for common RAJA internal macro definitions.
#define RAJA_HOST_DEVICE
Definition: macros.hpp:65
RAJA_INLINE void forall_impl(MultiPolicy< Selector, Policies... > p, Iterable &&iter, Body &&body)
Definition: MultiPolicy.hpp:96
Definition: AlignedRangeIndexSetBuilders.cpp:35
std::ptrdiff_t Index_type
Definition: types.hpp:226
Header file for loop kernel internals.
RAJA_HOST_DEVICE constexpr RAJA_INLINE TileSize(camp::idx_t size_)
Definition: Tile.hpp:46
const camp::idx_t size
Definition: Tile.hpp:41
Definition: LoopData.hpp:196
data_t & data
Definition: LoopData.hpp:199
RAJA_INLINE void exec()
Definition: LoopData.hpp:205
Index_type i
Definition: Tile.hpp:120
value_type s
Definition: Tile.hpp:119
camp::idx_t num_blocks
Definition: Tile.hpp:224
RAJA_HOST_DEVICE RAJA_INLINE iterator begin() const
Definition: Tile.hpp:215
value_type it
Definition: Tile.hpp:222
camp::decay< Iterable > value_type
Definition: Tile.hpp:115
RAJA_HOST_DEVICE RAJA_INLINE iterator end() const
Definition: Tile.hpp:220
RAJA_HOST_DEVICE RAJA_INLINE IterableTiler(const Iterable &it_, camp::idx_t block_size_)
Definition: Tile.hpp:196
camp::idx_t block_size
Definition: Tile.hpp:223
camp::idx_t dist
Definition: Tile.hpp:225
Definition: LoopData.hpp:216
static RAJA_INLINE void exec(Data &data)
Definition: Tile.hpp:280
static RAJA_INLINE void exec(Data &data)
Definition: Tile.hpp:244
Definition: Statement.hpp:48
Definition: Statement.hpp:35
RAJA_INLINE void operator()(InSegmentIndexType si)
Definition: Tile.hpp:102
Definition: IndexSet.hpp:70
Definition: resource.hpp:48
TilePolicy tile_policy_t
Definition: Tile.hpp:63
! tag for a tiling loop
Definition: Tile.hpp:72
static constexpr camp::idx_t chunk_size
Definition: Tile.hpp:73
Header file for RAJA type definitions.