20 #ifndef RAJA_policy_sycl_kernel_For_HPP
21 #define RAJA_policy_sycl_kernel_For_HPP
23 #include "RAJA/config.hpp"
41 template<
typename Data,
42 camp::idx_t ArgumentId,
45 typename... EnclosedStmts,
47 struct SyclStatementExecutor<
49 statement::For<ArgumentId,
50 RAJA::sycl_global_012<Dim, Local_Size>,
61 SyclStatementListExecutor<Data, stmt_list_t, NewTypes>;
66 ::sycl::nd_item<3> item,
69 auto len = segment_length<ArgumentId>(data);
70 auto i = item.get_global_id(Dim);
73 data.template assign_offset<ArgumentId>(i);
76 enclosed_stmts_t::exec(data, item, thread_active && (i < len));
81 auto len = segment_length<ArgumentId>(data);
88 dims.local.x = Local_Size;
93 dims.local.y = Local_Size;
98 dims.local.z = Local_Size;
102 LaunchDims enclosed_dims = enclosed_stmts_t::calculateDimensions(data);
103 return dims.max(enclosed_dims);
112 template<
typename Data,
113 camp::idx_t ArgumentId,
115 typename... EnclosedStmts,
117 struct SyclStatementExecutor<Data,
118 statement::For<ArgumentId,
119 RAJA::sycl_group_012_direct<Dim>,
130 SyclStatementListExecutor<Data, stmt_list_t, NewTypes>;
135 ::sycl::nd_item<3> item,
138 auto len = segment_length<ArgumentId>(data);
139 auto i = item.get_group(Dim);
142 data.template assign_offset<ArgumentId>(i);
145 enclosed_stmts_t::exec(data, item, thread_active && (i < len));
150 auto len = segment_length<ArgumentId>(data);
168 LaunchDims enclosed_dims = enclosed_stmts_t::calculateDimensions(data);
169 return dims.max(enclosed_dims);
179 template<
typename Data,
180 camp::idx_t ArgumentId,
182 typename... EnclosedStmts,
184 struct SyclStatementExecutor<Data,
185 statement::For<ArgumentId,
186 RAJA::sycl_group_012_loop<Dim>,
197 SyclStatementListExecutor<Data, stmt_list_t, NewTypes>;
202 ::sycl::nd_item<3> item,
205 auto len = segment_length<ArgumentId>(data);
206 auto i0 = item.get_group(Dim);
207 auto i_stride = item.get_group_range(Dim);
209 for (
auto i = i0; i < len; i += i_stride)
213 data.template assign_offset<ArgumentId>(i);
216 enclosed_stmts_t::exec(data, item, thread_active);
222 auto len = segment_length<ArgumentId>(data);
240 LaunchDims enclosed_dims = enclosed_stmts_t::calculateDimensions(data);
241 return dims.max(enclosed_dims);
250 template<
typename Data,
251 camp::idx_t ArgumentId,
253 typename... EnclosedStmts,
255 struct SyclStatementExecutor<Data,
256 statement::For<ArgumentId,
257 RAJA::sycl_local_012_direct<Dim>,
268 SyclStatementListExecutor<Data, stmt_list_t, NewTypes>;
273 ::sycl::nd_item<3> item,
276 auto len = segment_length<ArgumentId>(data);
277 auto i = item.get_local_id(Dim);
280 data.template assign_offset<ArgumentId>(i);
283 enclosed_stmts_t::exec(data, item, thread_active && (i < len));
288 auto len = segment_length<ArgumentId>(data);
306 LaunchDims enclosed_dims = enclosed_stmts_t::calculateDimensions(data);
307 return dims.max(enclosed_dims);
317 template<
typename Data,
318 camp::idx_t ArgumentId,
320 typename... EnclosedStmts,
322 struct SyclStatementExecutor<Data,
323 statement::For<ArgumentId,
324 RAJA::sycl_local_012_loop<Dim>,
335 SyclStatementListExecutor<Data, stmt_list_t, NewTypes>;
340 ::sycl::nd_item<3> item,
343 auto len = segment_length<ArgumentId>(data);
344 auto i0 = item.get_local_id(Dim);
345 auto i_stride = item.get_local_range(Dim);
348 for (; i < len; i += i_stride)
352 data.template assign_offset<ArgumentId>(i);
355 enclosed_stmts_t::exec(data, item, thread_active);
363 enclosed_stmts_t::exec(data, item,
false);
369 auto len = segment_length<ArgumentId>(data);
387 LaunchDims enclosed_dims = enclosed_stmts_t::calculateDimensions(data);
388 return dims.max(enclosed_dims);
397 template<
typename Data,
398 camp::idx_t ArgumentId,
400 typename... EnclosedStmts,
402 struct SyclStatementExecutor<
404 statement::For<ArgumentId, RAJA::sycl_exec<Local_Size>, EnclosedStmts...>,
414 SyclStatementListExecutor<Data, stmt_list_t, NewTypes>;
420 auto len = segment_length<ArgumentId>(data);
421 auto i = item.get_global_id(0);
427 data.template assign_offset<ArgumentId>(i);
430 enclosed_stmts_t::exec(data, item);
436 auto len = segment_length<ArgumentId>(data);
440 dims.local.x = Local_Size;
444 LaunchDims enclosed_dims = enclosed_stmts_t::calculateDimensions(data);
445 return dims.max(enclosed_dims);
455 template<
typename Data,
456 camp::idx_t ArgumentId,
457 typename... EnclosedStmts,
459 struct SyclStatementExecutor<
461 statement::For<ArgumentId, seq_exec, EnclosedStmts...>,
471 SyclStatementListExecutor<Data, stmt_list_t, NewTypes>;
476 ::sycl::nd_item<3> item,
481 camp::decay<decltype(camp::get<ArgumentId>(data.offset_tuple))>;
483 idx_type len = segment_length<ArgumentId>(data);
485 for (idx_type i = 0; i < len; ++i)
488 data.template assign_offset<ArgumentId>(i);
491 enclosed_stmts_t::exec(data, item, thread_active);
497 return enclosed_stmts_t::calculateDimensions(data);
#define RAJA_DEVICE
Definition: macros.hpp:66
setSegmentType< Types, Segment, camp::at_v< typename camp::decay< Data >::index_types_t, Segment > > setSegmentTypeFromData
Definition: LoopTypes.hpp:95
camp::list< Stmts... > StatementList
Definition: StatementList.hpp:41
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
Definition: AlignedRangeIndexSetBuilders.cpp:35
RAJA header file containing constructs used to run kernel traversals on GPU with SYCL.
StatementList< EnclosedStmts... > stmt_list_t
Definition: For.hpp:329
setSegmentTypeFromData< Types, ArgumentId, Data > NewTypes
Definition: For.hpp:332
segment_diff_type< ArgumentId, Data > diff_t
Definition: For.hpp:337
SyclStatementListExecutor< Data, stmt_list_t, NewTypes > enclosed_stmts_t
Definition: For.hpp:335
static LaunchDims calculateDimensions(Data const &data)
Definition: For.hpp:367
static RAJA_DEVICE void exec(Data &data, ::sycl::nd_item< 3 > item, bool thread_active)
Definition: For.hpp:339
static RAJA_DEVICE void exec(Data &data, ::sycl::nd_item< 3 > item, bool thread_active)
Definition: For.hpp:65
SyclStatementListExecutor< Data, stmt_list_t, NewTypes > enclosed_stmts_t
Definition: For.hpp:61
static LaunchDims calculateDimensions(Data const &data)
Definition: For.hpp:79
StatementList< EnclosedStmts... > stmt_list_t
Definition: For.hpp:55
setSegmentTypeFromData< Types, ArgumentId, Data > NewTypes
Definition: For.hpp:58
segment_diff_type< ArgumentId, Data > diff_t
Definition: For.hpp:63
static LaunchDims calculateDimensions(Data const &data)
Definition: For.hpp:148
static RAJA_DEVICE void exec(Data &data, ::sycl::nd_item< 3 > item, bool thread_active)
Definition: For.hpp:134
SyclStatementListExecutor< Data, stmt_list_t, NewTypes > enclosed_stmts_t
Definition: For.hpp:130
segment_diff_type< ArgumentId, Data > diff_t
Definition: For.hpp:132
setSegmentTypeFromData< Types, ArgumentId, Data > NewTypes
Definition: For.hpp:127
StatementList< EnclosedStmts... > stmt_list_t
Definition: For.hpp:124
static LaunchDims calculateDimensions(Data const &data)
Definition: For.hpp:286
setSegmentTypeFromData< Types, ArgumentId, Data > NewTypes
Definition: For.hpp:265
SyclStatementListExecutor< Data, stmt_list_t, NewTypes > enclosed_stmts_t
Definition: For.hpp:268
StatementList< EnclosedStmts... > stmt_list_t
Definition: For.hpp:262
static RAJA_DEVICE void exec(Data &data, ::sycl::nd_item< 3 > item, bool thread_active)
Definition: For.hpp:272
segment_diff_type< ArgumentId, Data > diff_t
Definition: For.hpp:270
StatementList< EnclosedStmts... > stmt_list_t
Definition: For.hpp:408
setSegmentTypeFromData< Types, ArgumentId, Data > NewTypes
Definition: For.hpp:411
static RAJA_DEVICE void exec(Data &data, ::sycl::nd_item< 3 > item)
Definition: For.hpp:418
SyclStatementListExecutor< Data, stmt_list_t, NewTypes > enclosed_stmts_t
Definition: For.hpp:414
static LaunchDims calculateDimensions(Data const &data)
Definition: For.hpp:434
segment_diff_type< ArgumentId, Data > diff_t
Definition: For.hpp:416
static RAJA_DEVICE void exec(Data &data, ::sycl::nd_item< 3 > item, bool thread_active)
Definition: For.hpp:475
setSegmentTypeFromData< Types, ArgumentId, Data > NewTypes
Definition: For.hpp:468
SyclStatementListExecutor< Data, stmt_list_t, NewTypes > enclosed_stmts_t
Definition: For.hpp:471
segment_diff_type< ArgumentId, Data > diff_t
Definition: For.hpp:473
static LaunchDims calculateDimensions(Data const &data)
Definition: For.hpp:495
StatementList< EnclosedStmts... > stmt_list_t
Definition: For.hpp:465
SyclStatementListExecutor< Data, stmt_list_t, NewTypes > enclosed_stmts_t
Definition: For.hpp:197
StatementList< EnclosedStmts... > stmt_list_t
Definition: For.hpp:191
static LaunchDims calculateDimensions(Data const &data)
Definition: For.hpp:220
segment_diff_type< ArgumentId, Data > diff_t
Definition: For.hpp:199
static RAJA_DEVICE void exec(Data &data, ::sycl::nd_item< 3 > item, bool thread_active)
Definition: For.hpp:201
setSegmentTypeFromData< Types, ArgumentId, Data > NewTypes
Definition: For.hpp:194