21 #ifndef RAJA_policy_hip_kernel_Reduce_HPP
22 #define RAJA_policy_hip_kernel_Reduce_HPP
24 #include "RAJA/config.hpp"
38 template<
typename Data,
39 template<
typename...>
class ReduceOperator,
41 typename... EnclosedStmts,
43 struct HipStatementExecutor<Data,
44 statement::
Reduce<RAJA::hip_block_reduce,
58 auto value = data.template get_param<ParamId>();
59 using value_t = decltype(value);
60 value_t ident = value_t();
72 value_t new_value = RAJA::hip::impl::block_reduce<combiner_t>(value, ident);
76 thread_active = threadIdx.x == 0 && threadIdx.y == 0 && threadIdx.z == 0;
80 data.template assign_param<ParamId>(new_value);
82 enclosed_stmts_t::exec(data, thread_active);
88 LaunchDims enclosed_dims = enclosed_stmts_t::calculateDimensions(data);
96 template<
typename Data,
97 template<
typename...>
class ReduceOperator,
99 typename... EnclosedStmts,
101 struct HipStatementExecutor<Data,
102 statement::
Reduce<RAJA::hip_warp_reduce,
116 auto value = data.template get_param<ParamId>();
117 using value_t = decltype(value);
118 value_t ident = value_t();
129 value_t new_value = RAJA::hip::impl::warp_reduce<combiner_t>(value, ident);
130 data.template assign_param<ParamId>(new_value);
133 thread_active = threadIdx.x == 0;
137 data.template assign_param<ParamId>(new_value);
139 enclosed_stmts_t::exec(data, thread_active);
145 LaunchDims enclosed_dims = enclosed_stmts_t::calculateDimensions(data);
146 return enclosed_dims;
#define RAJA_DEVICE
Definition: macros.hpp:66
constexpr auto Reduce(T *target)
Definition: reducer.hpp:231
camp::list< Stmts... > StatementList
Definition: StatementList.hpp:41
Definition: AlignedRangeIndexSetBuilders.cpp:35
RAJA header file containing constructs used to run kernel traversals on GPU with HIP.
HipStatementListExecutor< Data, stmt_list_t, Types > enclosed_stmts_t
Definition: Reduce.hpp:111
StatementList< EnclosedStmts... > stmt_list_t
Definition: Reduce.hpp:109
static LaunchDims calculateDimensions(Data const &data)
Definition: Reduce.hpp:142
static RAJA_DEVICE void exec(Data &data, bool thread_active)
Definition: Reduce.hpp:113
HipStatementListExecutor< Data, stmt_list_t, Types > enclosed_stmts_t
Definition: Reduce.hpp:53
static LaunchDims calculateDimensions(Data const &data)
Definition: Reduce.hpp:85
StatementList< EnclosedStmts... > stmt_list_t
Definition: Reduce.hpp:51
static RAJA_DEVICE void exec(Data &data, bool thread_active)
Definition: Reduce.hpp:55
Definition: reduce.hpp:70