20 #ifndef RAJA_policy_openmp_kernel_collapse_HPP
21 #define RAJA_policy_openmp_kernel_collapse_HPP
23 #include "RAJA/config.hpp"
25 #if defined(RAJA_ENABLE_OPENMP)
42 struct omp_parallel_collapse_exec
44 RAJA::Pattern::forall,
45 RAJA::policy::omp::For>
55 template<camp::idx_t Arg0,
57 typename... EnclosedStmts,
59 struct StatementExecutor<statement::Collapse<omp_parallel_collapse_exec,
66 template<
typename Data>
67 static RAJA_INLINE concepts::enable_if<
71 const auto l0 = segment_length<Arg0>(data);
72 const auto l1 = segment_length<Arg1>(data);
80 using NewTypes0 = setSegmentTypeFromData<Types, Arg0, Data>;
81 using NewTypes1 = setSegmentTypeFromData<NewTypes0, Arg1, Data>;
84 auto reducers_tuple = data.param_tuple;
85 RAJA::expt::detail::init_params<omp_parallel_collapse_exec>(reducers_tuple);
87 using EXEC_POL = omp_parallel_collapse_exec;
89 RAJA_OMP_DECLARE_TUPLE_REDUCTION_COMBINE;
90 #pragma omp parallel for private(i0, i1) firstprivate(privatizer) \
91 RAJA_COLLAPSE(2) reduction(combine : reducers_tuple)
92 for (i0 = 0; i0 < l0; ++i0)
94 for (i1 = 0; i1 < l1; ++i1)
98 private_data.template assign_offset<Arg0>(i0);
99 private_data.template assign_offset<Arg1>(i1);
105 reducers_tuple = private_data.param_tuple;
108 RAJA::expt::detail::resolve_params<EXEC_POL>(reducers_tuple);
111 template<
typename Data>
112 static RAJA_INLINE concepts::enable_if<concepts::negate<
116 const auto l0 = segment_length<Arg0>(data);
117 const auto l1 = segment_length<Arg1>(data);
125 using NewTypes0 = setSegmentTypeFromData<Types, Arg0, Data>;
126 using NewTypes1 = setSegmentTypeFromData<NewTypes0, Arg1, Data>;
130 #pragma omp parallel for private(i0, i1) firstprivate(privatizer) \
132 for (i0 = 0; i0 < l0; ++i0)
134 for (i1 = 0; i1 < l1; ++i1)
137 private_data.template assign_offset<Arg0>(i0);
138 private_data.template assign_offset<Arg1>(i1);
146 template<camp::idx_t Arg0,
149 typename... EnclosedStmts,
151 struct StatementExecutor<statement::Collapse<omp_parallel_collapse_exec,
152 ArgList<Arg0, Arg1, Arg2>,
158 template<
typename Data>
159 static RAJA_INLINE concepts::enable_if<
163 const auto l0 = segment_length<Arg0>(data);
164 const auto l1 = segment_length<Arg1>(data);
165 const auto l2 = segment_length<Arg2>(data);
171 using NewTypes0 = setSegmentTypeFromData<Types, Arg0, Data>;
172 using NewTypes1 = setSegmentTypeFromData<NewTypes0, Arg1, Data>;
173 using NewTypes2 = setSegmentTypeFromData<NewTypes1, Arg2, Data>;
175 auto reducers_tuple = data.param_tuple;
176 RAJA::expt::detail::init_params<omp_parallel_collapse_exec>(reducers_tuple);
179 using EXEC_POL = omp_parallel_collapse_exec;
180 RAJA_OMP_DECLARE_TUPLE_REDUCTION_COMBINE;
181 #pragma omp parallel for private(i0, i1, i2) firstprivate(privatizer) \
182 RAJA_COLLAPSE(3) reduction(combine : reducers_tuple)
183 for (i0 = 0; i0 < l0; ++i0)
185 for (i1 = 0; i1 < l1; ++i1)
187 for (i2 = 0; i2 < l2; ++i2)
190 private_data.template assign_offset<Arg0>(i0);
191 private_data.template assign_offset<Arg1>(i1);
192 private_data.template assign_offset<Arg2>(i2);
195 reducers_tuple = private_data.param_tuple;
200 RAJA::expt::detail::resolve_params<EXEC_POL>(reducers_tuple);
203 template<
typename Data>
204 static RAJA_INLINE concepts::enable_if<concepts::negate<
208 const auto l0 = segment_length<Arg0>(data);
209 const auto l1 = segment_length<Arg1>(data);
210 const auto l2 = segment_length<Arg2>(data);
216 using NewTypes0 = setSegmentTypeFromData<Types, Arg0, Data>;
217 using NewTypes1 = setSegmentTypeFromData<NewTypes0, Arg1, Data>;
218 using NewTypes2 = setSegmentTypeFromData<NewTypes1, Arg2, Data>;
222 #pragma omp parallel for private(i0, i1, i2) firstprivate(privatizer) \
224 for (i0 = 0; i0 < l0; ++i0)
226 for (i1 = 0; i1 < l1; ++i1)
228 for (i2 = 0; i2 < l2; ++i2)
231 private_data.template assign_offset<Arg0>(i0);
232 private_data.template assign_offset<Arg1>(i1);
233 private_data.template assign_offset<Arg2>(i2);
Header file for common RAJA internal macro definitions.
RAJA_HOST_DEVICE RAJA_INLINE void RAJA_UNUSED_VAR(T &&...) noexcept
Definition: macros.hpp:120
RAJA_HOST_DEVICE auto thread_privatize(const T &item) -> Privatizer< T >
Create a private copy of the argument to be stored on the current thread's stack in a class of the Pr...
Definition: privatizer.hpp:88
RAJA_INLINE void execute_statement_list(Data &&data)
Definition: StatementList.hpp:84
Definition: AlignedRangeIndexSetBuilders.cpp:35
PolicyBaseT< Pol, Pat, Launch::undefined, Platform::undefined, Args... > make_policy_pattern_t
Definition: PolicyBase.hpp:168
auto privatizer
Definition: launch.hpp:176
Header file containing RAJA OpenMP policy definitions.
Header file for kernel statement collapse struct.
Header file for kernel lambda executor.
Header file for loop kernel internals.
Definition: TypeTraits.hpp:36
Header file for RAJA type definitions.