20 #ifndef RAJA_pattern_launch_sycl_HPP
21 #define RAJA_pattern_launch_sycl_HPP
36 template<
typename LoopBody,
typename ReduceParams>
37 static concepts::enable_if_t<
38 resources::EventProxy<resources::Resource>,
40 exec(RAJA::resources::Resource res,
43 ReduceParams launch_reducers)
45 using EXEC_POL = RAJA::sycl_launch_t<async, 0>;
46 using LOOP_BODY = camp::decay<LoopBody>;
50 constexpr
bool is_parampack_empty =
52 constexpr
bool is_lbody_trivially_copyable =
53 std::is_trivially_copyable<LOOP_BODY>::value;
57 ::sycl::queue* q = res.get<camp::resources::Sycl>().get_queue();
59 if constexpr (!is_parampack_empty)
67 const ::sycl::range<3> blockSize(launch_params.
threads.
value[2],
71 const ::sycl::range<3> gridSize(
77 constexpr
int zero = 0;
85 return resources::EventProxy<resources::Resource>(res);
89 using LOOP_BODY = camp::decay<LoopBody>;
90 LOOP_BODY* lbody =
nullptr;
95 if constexpr (!is_lbody_trivially_copyable)
97 lbody = (LOOP_BODY*)::sycl::malloc_device(
sizeof(LOOP_BODY), *q);
98 q->memcpy(lbody, &loop_body,
sizeof(LOOP_BODY)).wait();
102 if constexpr (!is_parampack_empty)
104 auto combiner = [](ReduceParams
x, ReduceParams
y) {
109 ReduceParams* res = ::sycl::malloc_shared<ReduceParams>(1, *q);
111 auto reduction = ::sycl::reduction(res, launch_reducers, combiner);
113 q->submit([&](::sycl::handler& h) {
118 ::sycl::nd_range<3>(gridSize, blockSize), reduction,
119 [=](::sycl::nd_item<3> itm,
auto& red) {
125 s_vec.get_multi_ptr<::sycl::access::decorated::yes>().
get();
129 if constexpr (is_lbody_trivially_copyable)
144 ::sycl::free(res, *q);
145 ::sycl::free(lbody, *q);
150 q->submit([&](::sycl::handler& h) {
155 ::sycl::nd_range<3>(gridSize, blockSize),
156 [=](::sycl::nd_item<3> itm) {
162 s_vec.get_multi_ptr<::sycl::access::decorated::yes>().
get();
163 if constexpr (is_lbody_trivially_copyable)
180 return resources::EventProxy<resources::Resource>(res);
194 template<
typename SEGMENT,
int DIM>
198 template<
typename BODY>
200 SEGMENT
const& segment,
204 const int len = segment.end() - segment.begin();
206 const int tx =
ctx.itm->get_group(DIM) *
ctx.itm->get_local_range(DIM) +
207 ctx.itm->get_local_id(DIM);
209 if (tx < len)
body(*(segment.begin() + tx));
221 template<
typename SEGMENT,
int DIM0,
int DIM1>
225 template<
typename BODY>
227 SEGMENT
const& segment0,
228 SEGMENT
const& segment1,
231 const int len1 = segment1.end() - segment1.begin();
232 const int len0 = segment0.end() - segment0.begin();
234 const int tx =
ctx.itm->get_group(DIM0) *
ctx.itm->get_local_range(DIM0) +
235 ctx.itm->get_local_id(DIM0);
237 const int ty =
ctx.itm->get_group(DIM1) *
ctx.itm->get_local_range(DIM1) +
238 ctx.itm->get_local_id(DIM1);
241 if (tx < len0 && ty < len1)
242 body(*(segment0.begin() + tx), *(segment1.begin() + ty));
254 template<
typename SEGMENT,
int DIM0,
int DIM1,
int DIM2>
258 template<
typename BODY>
260 SEGMENT
const& segment0,
261 SEGMENT
const& segment1,
262 SEGMENT
const& segment2,
265 const int len2 = segment2.end() - segment2.begin();
266 const int len1 = segment1.end() - segment1.begin();
267 const int len0 = segment0.end() - segment0.begin();
269 const int tx =
ctx.itm->get_group(DIM0) *
ctx.itm->get_local_range(DIM0) +
270 ctx.itm->get_local_id(DIM0);
272 const int ty =
ctx.itm->get_group(DIM1) *
ctx.itm->get_local_range(DIM1) +
273 ctx.itm->get_local_id(DIM1);
275 const int tz =
ctx.itm->get_group(DIM2) *
ctx.itm->get_local_range(DIM2) +
276 ctx.itm->get_local_id(DIM2);
278 if (tx < len0 && ty < len1 && tz < len2)
279 body(*(segment0.begin() + tx), *(segment1.begin() + ty),
280 *(segment1.begin() + ty));
342 template<
typename SEGMENT,
int DIM0,
int DIM1>
345 template<
typename BODY>
347 SEGMENT
const& segment,
351 const int len = segment.end() - segment.begin();
353 const int tx =
ctx.itm->get_local_id(DIM0);
354 const int ty =
ctx.itm->get_local_id(DIM1);
355 const int bx =
ctx.itm->get_local_range(DIM0);
356 const int tid = tx + bx * ty;
358 if (tid < len)
body(*(segment.begin() + tid));
363 template<
typename SEGMENT,
int DIM0,
int DIM1>
366 template<
typename BODY>
368 SEGMENT
const& segment,
371 const int len = segment.end() - segment.begin();
373 const int tx =
ctx.itm->get_local_id(DIM0);
374 const int ty =
ctx.itm->get_local_id(DIM1);
376 const int bx =
ctx.itm->get_local_range(DIM0);
377 const int by =
ctx.itm->get_local_range(DIM1);
379 for (
int tid = tx + bx * ty; tid < len; tid += bx * by)
381 body(*(segment.begin() + tid));
386 template<
typename SEGMENT,
int DIM0,
int DIM1,
int DIM2>
389 template<
typename BODY>
391 SEGMENT
const& segment,
394 const int len = segment.end() - segment.begin();
396 const int tx =
ctx.itm->get_local_id(DIM0);
397 const int ty =
ctx.itm->get_local_id(DIM1);
398 const int tz =
ctx.itm->get_local_id(DIM2);
399 const int bx =
ctx.itm->get_local_range(DIM0);
400 const int by =
ctx.itm->get_local_range(DIM1);
402 const int tid = tx + bx * (ty + by * tz);
404 if (tid < len)
body(*(segment.begin() + tid));
409 template<
typename SEGMENT,
int DIM0,
int DIM1,
int DIM2>
412 template<
typename BODY>
414 SEGMENT
const& segment,
417 const int len = segment.end() - segment.begin();
419 const int tx =
ctx.itm->get_local_id(DIM0);
420 const int ty =
ctx.itm->get_local_id(DIM1);
421 const int tz =
ctx.itm->get_local_id(DIM2);
422 const int bx =
ctx.itm->get_local_range(DIM0);
423 const int by =
ctx.itm->get_local_range(DIM1);
424 const int bz =
ctx.itm->get_local_range(DIM2);
426 for (
int tid = tx + bx * (ty + by * tz); tid < len; tid += bx * by * bz)
428 body(*(segment.begin() + tid));
436 template<
typename SEGMENT,
int DIM>
440 template<
typename BODY>
442 SEGMENT
const& segment,
446 const int len = segment.end() - segment.begin();
448 for (
int tx =
ctx.itm->get_local_id(DIM); tx < len;
449 tx +=
ctx.itm->get_local_range(DIM))
451 body(*(segment.begin() + tx));
459 template<
typename SEGMENT,
int DIM>
463 template<
typename BODY>
465 SEGMENT
const& segment,
469 const int len = segment.end() - segment.begin();
471 const int tx =
ctx.itm->get_local_id(DIM);
472 if (tx < len)
body(*(segment.begin() + tx));
480 template<
typename SEGMENT,
int DIM>
484 template<
typename BODY>
486 SEGMENT
const& segment,
490 const int len = segment.end() - segment.begin();
492 for (
int bx =
ctx.itm->get_group(DIM); bx < len;
493 bx +=
ctx.itm->get_group_range(DIM))
495 body(*(segment.begin() + bx));
503 template<
typename SEGMENT,
int DIM>
507 template<
typename BODY>
509 SEGMENT
const& segment,
513 const int len = segment.end() - segment.begin();
515 const int bx =
ctx.itm->get_group(DIM);
516 if (bx < len)
body(*(segment.begin() + bx));
524 template<
typename SEGMENT,
int DIM>
528 template<
typename BODY>
530 SEGMENT
const& segment,
534 const int len = segment.end() - segment.begin();
536 for (
int tx =
ctx.itm->get_local_id(DIM); tx < len;
537 tx +=
ctx.itm->get_local_range(DIM))
539 body(*(segment.begin() + tx), tx);
547 template<
typename SEGMENT,
int DIM>
551 template<
typename BODY>
553 SEGMENT
const& segment,
557 const int len = segment.end() - segment.begin();
559 const int tx =
ctx.itm->get_local_id(DIM);
560 if (tx < len)
body(*(segment.begin() + tx), tx);
568 template<
typename SEGMENT,
int DIM>
572 template<
typename BODY>
574 SEGMENT
const& segment,
578 const int len = segment.end() - segment.begin();
580 for (
int bx =
ctx.itm->get_group(DIM); bx < len;
581 bx +=
ctx.itm->get_group_range(DIM))
583 body(*(segment.begin() + bx), bx);
591 template<
typename SEGMENT,
int DIM>
595 template<
typename BODY>
597 SEGMENT
const& segment,
601 const int len = segment.end() - segment.begin();
603 const int bx =
ctx.itm->get_group(DIM);
604 if (bx < len)
body(*(segment.begin() + bx), bx);
624 template<
typename SEGMENT,
int DIM0,
int DIM1>
628 template<
typename BODY>
630 SEGMENT
const& segment0,
631 SEGMENT
const& segment1,
634 const int len1 = segment1.end() - segment1.begin();
635 const int len0 = segment0.end() - segment0.begin();
637 const int tx =
ctx.itm->get_group(DIM0);
638 const int ty =
ctx.itm->get_group(DIM1);
639 if (tx < len0 && ty < len1)
640 body(*(segment0.begin() + tx), *(segment1.begin() + ty));
645 template<
typename SEGMENT,
int DIM0,
int DIM1,
int DIM2>
646 struct LoopExecute<sycl_group_012_direct<DIM0, DIM1, DIM2>, SEGMENT>
649 template<
typename BODY>
651 SEGMENT
const& segment0,
652 SEGMENT
const& segment1,
653 SEGMENT
const& segment2,
656 const int len2 = segment2.end() - segment2.begin();
657 const int len1 = segment1.end() - segment1.begin();
658 const int len0 = segment0.end() - segment0.begin();
660 const int tx =
ctx.itm->get_group(DIM0);
661 const int ty =
ctx.itm->get_group(DIM1);
662 const int tz =
ctx.itm->get_group(DIM2);
663 if (tx < len0 && ty < len1 && tz < len2)
664 body(*(segment0.begin() + tx), *(segment1.begin() + ty),
665 *(segment2.begin() + tz));
674 template<
typename SEGMENT,
int DIM0,
int DIM1>
678 template<
typename BODY>
680 SEGMENT
const& segment0,
681 SEGMENT
const& segment1,
684 const int len1 = segment1.end() - segment1.begin();
685 const int len0 = segment0.end() - segment0.begin();
687 const int tx =
ctx.itm->get_group(DIM0);
688 const int ty =
ctx.itm->get_group(DIM1);
689 if (tx < len0 && ty < len1)
690 body(*(segment0.begin() + tx), *(segment1.begin() + ty), tx, ty);
695 template<
typename SEGMENT,
int DIM0,
int DIM1,
int DIM2>
699 template<
typename BODY>
701 SEGMENT
const& segment0,
702 SEGMENT
const& segment1,
703 SEGMENT
const& segment2,
706 const int len2 = segment2.end() - segment2.begin();
707 const int len1 = segment1.end() - segment1.begin();
708 const int len0 = segment0.end() - segment0.begin();
710 const int tx =
ctx.itm->get_group(DIM0);
711 const int ty =
ctx.itm->get_group(DIM1);
712 const int tz =
ctx.itm->get_group(DIM2);
713 if (tx < len0 && ty < len1 && tz < len2)
714 body(*(segment0.begin() + tx), *(segment1.begin() + ty),
715 *(segment2.begin() + tz), tx, ty, tz);
735 template<
typename SEGMENT,
int DIM0,
int DIM1>
739 template<
typename BODY>
741 SEGMENT
const& segment0,
742 SEGMENT
const& segment1,
745 const int len1 = segment1.end() - segment1.begin();
746 const int len0 = segment0.end() - segment0.begin();
749 for (
int bx =
ctx.itm->get_group(DIM0); bx < len0;
750 bx +=
ctx.itm->get_group_range(DIM0))
752 for (
int by =
ctx.itm->get_group(DIM1); by < len1;
753 bx +=
ctx.itm->get_group_range(DIM1))
755 body(*(segment0.begin() + bx), *(segment1.begin() + by));
762 template<
typename SEGMENT,
int DIM0,
int DIM1,
int DIM2>
763 struct LoopExecute<sycl_group_012_loop<DIM0, DIM1, DIM2>, SEGMENT>
766 template<
typename BODY>
768 SEGMENT
const& segment0,
769 SEGMENT
const& segment1,
770 SEGMENT
const& segment2,
773 const int len2 = segment2.end() - segment2.begin();
774 const int len1 = segment1.end() - segment1.begin();
775 const int len0 = segment0.end() - segment0.begin();
777 for (
int bx =
ctx.itm->get_group(DIM0); bx < len0;
778 bx +=
ctx.itm->get_group_range(DIM0))
781 for (
int by =
ctx.itm->get_group(DIM1); by < len1;
782 by +=
ctx.itm->get_group_range(DIM1))
785 for (
int bz =
ctx.itm->get_group(DIM2); bz < len2;
786 bz +=
ctx.itm->get_group_range(DIM2))
789 body(*(segment0.begin() + bx), *(segment1.begin() + by),
790 *(segment2.begin() + bz));
800 template<
typename SEGMENT,
int DIM0,
int DIM1>
804 template<
typename BODY>
806 SEGMENT
const& segment0,
807 SEGMENT
const& segment1,
810 const int len1 = segment1.end() - segment1.begin();
811 const int len0 = segment0.end() - segment0.begin();
814 for (
int bx =
ctx.itm->get_group(DIM0); bx < len0;
815 bx +=
ctx.itm->get_group_range(DIM0))
817 for (
int by =
ctx.itm->get_group(DIM0); by < len1;
818 by +=
ctx.itm->get_group_range(DIM1))
821 body(*(segment0.begin() + bx), *(segment1.begin() + by), bx, by);
828 template<
typename SEGMENT,
int DIM0,
int DIM1,
int DIM2>
832 template<
typename BODY>
834 SEGMENT
const& segment0,
835 SEGMENT
const& segment1,
836 SEGMENT
const& segment2,
839 const int len2 = segment2.end() - segment2.begin();
840 const int len1 = segment1.end() - segment1.begin();
841 const int len0 = segment0.end() - segment0.begin();
843 for (
int bx =
ctx.itm->get_group(DIM0); bx < len0;
844 bx +=
ctx.itm->get_group_range(DIM0))
847 for (
int by =
ctx.itm->get_group(DIM0); by < len1;
848 by +=
ctx.itm->get_group_range(DIM0))
851 for (
int bz =
ctx.itm->get_group(DIM0); bz < len2;
852 bz +=
ctx.itm->get_group_range(DIM0))
855 body(*(segment0.begin() + bx), *(segment1.begin() + by),
856 *(segment2.begin() + bz), bx, by, bz);
863 template<
typename SEGMENT,
int DIM>
867 template<
typename TILE_T,
typename BODY>
870 SEGMENT
const& segment,
874 const int len = segment.end() - segment.begin();
876 for (
int tx =
ctx.itm->get_local_id(DIM) * tile_size; tx < len;
877 tx +=
ctx.itm->get_local_range(DIM) * tile_size)
879 body(segment.slice(tx, tile_size));
884 template<
typename SEGMENT,
int DIM>
888 template<
typename TILE_T,
typename BODY>
891 SEGMENT
const& segment,
895 const int len = segment.end() - segment.begin();
897 int tx =
ctx.itm->get_local_id(DIM) * tile_size;
900 body(segment.slice(tx, tile_size));
905 template<
typename SEGMENT,
int DIM>
909 template<
typename TILE_T,
typename BODY>
912 SEGMENT
const& segment,
916 const int len = segment.end() - segment.begin();
918 for (
int tx =
ctx.itm->get_group(DIM) * tile_size;
922 tx +=
ctx.itm->get_group_range(DIM) * tile_size)
924 body(segment.slice(tx, tile_size));
929 template<
typename SEGMENT,
int DIM>
933 template<
typename TILE_T,
typename BODY>
936 SEGMENT
const& segment,
940 const int len = segment.end() - segment.begin();
942 int tx =
ctx.itm->get_group(DIM) * tile_size;
945 body(segment.slice(tx, tile_size));
951 template<
typename SEGMENT,
int DIM>
955 template<
typename TILE_T,
typename BODY>
958 SEGMENT
const& segment,
962 const int len = segment.end() - segment.begin();
964 for (
int tx =
ctx.itm->get_local_id(DIM) * tile_size; tx < len;
965 tx +=
ctx.itm->get_local_range(DIM) * tile_size)
967 body(segment.slice(tx, tile_size), tx / tile_size);
972 template<
typename SEGMENT,
int DIM>
976 template<
typename TILE_T,
typename BODY>
979 SEGMENT
const& segment,
983 const int len = segment.end() - segment.begin();
985 int tx =
ctx.itm->get_local_id(DIM) * tile_size;
988 body(segment.slice(tx, tile_size), tx / tile_size);
993 template<
typename SEGMENT,
int DIM>
997 template<
typename TILE_T,
typename BODY>
1000 SEGMENT
const& segment,
1004 const int len = segment.end() - segment.begin();
1006 for (
int bx =
ctx.itm->get_group(DIM) * tile_size; bx < len;
1007 bx +=
ctx.itm->get_group_range(DIM) * tile_size)
1009 body(segment.slice(bx, tile_size), bx / tile_size);
1014 template<
typename SEGMENT,
int DIM>
1018 template<
typename TILE_T,
typename BODY>
1021 SEGMENT
const& segment,
1025 const int len = segment.end() - segment.begin();
1027 int bx =
ctx.itm->get_group(DIM) * tile_size;
1030 body(segment.slice(bx, tile_size), bx / tile_size);
Header file defining prototypes for routines used to manage memory for SYCL reductions and other oper...
Definition: launch_core.hpp:246
RAJA header file containing the core components of RAJA::launch.
#define RAJA_DEVICE
Definition: macros.hpp:66
constexpr RAJA_HOST_DEVICE auto invoke_body(Params &¶ms, Fn &&f, Ts &&... extra)
Definition: forall.hpp:598
Definition: AlignedRangeIndexSetBuilders.cpp:35
LaunchContextType ctx
Definition: launch.hpp:185
sycl_group_012_loop< 1, 0, 2 > sycl_group_102_nested_loop
Definition: launch.hpp:730
sycl_group_012_loop< 2, 0, 1 > sycl_group_201_nested_loop
Definition: launch.hpp:732
sycl_group_012_loop< 0, 1 > sycl_group_01_nested_loop
Definition: launch.hpp:721
sycl_group_012_direct< 2, 1 > sycl_group_21_nested_direct
Definition: launch.hpp:615
sycl_group_012_direct< 1, 2, 0 > sycl_group_120_nested_direct
Definition: launch.hpp:620
sycl_group_012_loop< 1, 2 > sycl_group_12_nested_loop
Definition: launch.hpp:724
sycl_group_012_loop< 0, 2, 1 > sycl_group_021_nested_loop
Definition: launch.hpp:729
sycl_group_012_direct< 2, 0 > sycl_group_20_nested_direct
Definition: launch.hpp:614
sycl_group_012_loop< 2, 0 > sycl_group_20_nested_loop
Definition: launch.hpp:725
sycl_group_012_loop< 2, 1, 0 > sycl_group_210_nested_loop
Definition: launch.hpp:733
RAJA_HOST_DEVICE constexpr RAJA_INLINE RAJA::zip_tuple_element_t< I, zip_tuple< is_val, Ts... > > & get(zip_tuple< is_val, Ts... > &z) noexcept
Definition: zip_tuple.hpp:56
sycl_group_012_loop< 1, 2, 0 > sycl_group_120_nested_loop
Definition: launch.hpp:731
sycl_group_012_loop< 1, 0 > sycl_group_10_nested_loop
Definition: launch.hpp:723
auto & body
Definition: launch.hpp:177
sycl_group_012_direct< 0, 2, 1 > sycl_group_021_nested_direct
Definition: launch.hpp:618
sycl_group_012_direct< 2, 0, 1 > sycl_group_201_nested_direct
Definition: launch.hpp:621
sycl_group_012_loop< 0, 1, 2 > sycl_group_012_nested_loop
Definition: launch.hpp:728
sycl_group_012_loop< 0, 2 > sycl_group_02_nested_loop
Definition: launch.hpp:722
sycl_group_012_direct< 0, 1 > sycl_group_01_nested_direct
Definition: launch.hpp:610
sycl_group_012_direct< 1, 2 > sycl_group_12_nested_direct
Definition: launch.hpp:613
sycl_group_012_loop< 2, 1 > sycl_group_21_nested_loop
Definition: launch.hpp:726
sycl_group_012_direct< 0, 1, 2 > sycl_group_012_nested_direct
Definition: launch.hpp:617
sycl_group_012_direct< 1, 0 > sycl_group_10_nested_direct
Definition: launch.hpp:612
sycl_group_012_direct< 2, 1, 0 > sycl_group_210_nested_direct
Definition: launch.hpp:622
sycl_group_012_direct< 1, 0, 2 > sycl_group_102_nested_direct
Definition: launch.hpp:619
sycl_group_012_direct< 0, 2 > sycl_group_02_nested_direct
Definition: launch.hpp:611
Header file for RAJA resource definitions.
static concepts::enable_if_t< resources::EventProxy< resources::Resource >, RAJA::expt::type_traits::is_ForallParamPack< ReduceParams > > exec(RAJA::resources::Resource res, const LaunchParams &launch_params, LoopBody &&loop_body, ReduceParams launch_reducers)
Definition: launch.hpp:40
Definition: launch_core.hpp:263
Definition: launch_core.hpp:163
size_t shared_mem_size
Definition: launch_core.hpp:167
Teams teams
Definition: launch_core.hpp:165
Threads threads
Definition: launch_core.hpp:166
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, SEGMENT const &segment, BODY const &body)
Definition: launch.hpp:390
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, SEGMENT const &segment, BODY const &body)
Definition: launch.hpp:346
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, SEGMENT const &segment, BODY const &body)
Definition: launch.hpp:413
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, SEGMENT const &segment, BODY const &body)
Definition: launch.hpp:367
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, SEGMENT const &segment0, SEGMENT const &segment1, SEGMENT const &segment2, BODY const &body)
Definition: launch.hpp:259
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, SEGMENT const &segment0, SEGMENT const &segment1, BODY const &body)
Definition: launch.hpp:226
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, SEGMENT const &segment, BODY const &body)
Definition: launch.hpp:199
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, SEGMENT const &segment0, SEGMENT const &segment1, SEGMENT const &segment2, BODY const &body)
Definition: launch.hpp:650
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, SEGMENT const &segment0, SEGMENT const &segment1, BODY const &body)
Definition: launch.hpp:629
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, SEGMENT const &segment, BODY const &body)
Definition: launch.hpp:508
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, SEGMENT const &segment0, SEGMENT const &segment1, SEGMENT const &segment2, BODY const &body)
Definition: launch.hpp:767
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, SEGMENT const &segment0, SEGMENT const &segment1, BODY const &body)
Definition: launch.hpp:740
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, SEGMENT const &segment, BODY const &body)
Definition: launch.hpp:485
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, SEGMENT const &segment, BODY const &body)
Definition: launch.hpp:464
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, SEGMENT const &segment, BODY const &body)
Definition: launch.hpp:441
Definition: launch_core.hpp:480
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, SEGMENT const &segment0, SEGMENT const &segment1, SEGMENT const &segment2, BODY const &body)
Definition: launch.hpp:700
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, SEGMENT const &segment0, SEGMENT const &segment1, BODY const &body)
Definition: launch.hpp:679
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, SEGMENT const &segment, BODY const &body)
Definition: launch.hpp:596
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, SEGMENT const &segment0, SEGMENT const &segment1, SEGMENT const &segment2, BODY const &body)
Definition: launch.hpp:833
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, SEGMENT const &segment0, SEGMENT const &segment1, BODY const &body)
Definition: launch.hpp:805
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, SEGMENT const &segment, BODY const &body)
Definition: launch.hpp:573
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, SEGMENT const &segment, BODY const &body)
Definition: launch.hpp:552
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, SEGMENT const &segment, BODY const &body)
Definition: launch.hpp:529
Definition: launch_core.hpp:483
int value[3]
Definition: launch_core.hpp:99
int value[3]
Definition: launch_core.hpp:124
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, TILE_T tile_size, SEGMENT const &segment, BODY const &body)
Definition: launch.hpp:934
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, TILE_T tile_size, SEGMENT const &segment, BODY const &body)
Definition: launch.hpp:910
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, TILE_T tile_size, SEGMENT const &segment, BODY const &body)
Definition: launch.hpp:889
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, TILE_T tile_size, SEGMENT const &segment, BODY const &body)
Definition: launch.hpp:868
Definition: launch_core.hpp:579
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, TILE_T tile_size, SEGMENT const &segment, BODY const &body)
Definition: launch.hpp:1019
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, TILE_T tile_size, SEGMENT const &segment, BODY const &body)
Definition: launch.hpp:998
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, TILE_T tile_size, SEGMENT const &segment, BODY const &body)
Definition: launch.hpp:977
static RAJA_INLINE RAJA_DEVICE void exec(LaunchContext const &ctx, TILE_T tile_size, SEGMENT const &segment, BODY const &body)
Definition: launch.hpp:956
Definition: launch_core.hpp:582
static constexpr void parampack_resolve(EXEC_POL const &pol, ForallParamPack< Params... > &f_params, Args &&... args)
Definition: forall.hpp:304
static constexpr void parampack_init(EXEC_POL const &pol, ForallParamPack< Params... > &f_params, Args &&... args)
Definition: forall.hpp:269
static RAJA_HOST_DEVICE constexpr void parampack_combine(EXEC_POL const &pol, ForallParamPack< Params... > &f_params, Args &&... args)
Definition: forall.hpp:286
Definition: TypeTraits.hpp:67
Definition: TypeTraits.hpp:59
Definition: launch.hpp:290
Definition: launch.hpp:320
Definition: launch.hpp:188
Header file containing RAJA SYCL policy definitions.