20 #ifndef RAJA_scan_hip_HPP
21 #define RAJA_scan_hip_HPP
23 #include "RAJA/config.hpp"
25 #if defined(RAJA_ENABLE_HIP)
28 #include <type_traits>
30 #if defined(__HIPCC__)
32 #define ROCPRIM_HIP_API 1
33 #include "rocprim/device/device_scan.hpp"
34 #elif defined(__CUDACC__)
35 #include "cub/device/device_scan.cuh"
36 #include "cub/util_allocator.cuh"
53 template<
typename IterationMapping,
54 typename IterationGetter,
60 resources::Hip hip_res,
62 hip_exec<IterationMapping, IterationGetter, Concretizer, Async>,
67 hipStream_t stream = hip_res.get_stream();
69 int len = std::distance(begin, end);
71 void* d_temp_storage =
nullptr;
72 size_t temp_storage_bytes = 0;
73 #if defined(__HIPCC__)
75 temp_storage_bytes, begin, begin, len,
77 #elif defined(__CUDACC__)
78 CAMP_HIP_API_INVOKE_AND_CHECK(::cub::DeviceScan::InclusiveScan,
79 d_temp_storage, temp_storage_bytes, begin,
80 begin, binary_op, len, stream);
85 hip::device_mempool_type::getInstance().malloc<
unsigned char>(
88 #if defined(__HIPCC__)
90 temp_storage_bytes, begin, begin, len,
92 #elif defined(__CUDACC__)
93 CAMP_HIP_API_INVOKE_AND_CHECK(::cub::DeviceScan::InclusiveScan,
94 d_temp_storage, temp_storage_bytes, begin,
95 begin, binary_op, len, stream);
98 hip::device_mempool_type::getInstance().free(d_temp_storage);
102 return resources::EventProxy<resources::Hip>(hip_res);
109 template<
typename IterationMapping,
110 typename IterationGetter,
111 typename Concretizer,
117 resources::Hip hip_res,
118 ::RAJA::policy::hip::
119 hip_exec<IterationMapping, IterationGetter, Concretizer, Async>,
125 hipStream_t stream = hip_res.get_stream();
127 int len = std::distance(begin, end);
129 void* d_temp_storage =
nullptr;
130 size_t temp_storage_bytes = 0;
131 #if defined(__HIPCC__)
133 temp_storage_bytes, begin, begin, init, len,
135 #elif defined(__CUDACC__)
136 CAMP_HIP_API_INVOKE_AND_CHECK(::cub::DeviceScan::ExclusiveScan,
137 d_temp_storage, temp_storage_bytes, begin,
138 begin, binary_op, init, len, stream);
142 hip::device_mempool_type::getInstance().malloc<
unsigned char>(
145 #if defined(__HIPCC__)
147 temp_storage_bytes, begin, begin, init, len,
149 #elif defined(__CUDACC__)
150 CAMP_HIP_API_INVOKE_AND_CHECK(::cub::DeviceScan::ExclusiveScan,
151 d_temp_storage, temp_storage_bytes, begin,
152 begin, binary_op, init, len, stream);
155 hip::device_mempool_type::getInstance().free(d_temp_storage);
159 return resources::EventProxy<resources::Hip>(hip_res);
166 template<
typename IterationMapping,
167 typename IterationGetter,
168 typename Concretizer,
173 RAJA_INLINE resources::EventProxy<resources::Hip>
inclusive(
174 resources::Hip hip_res,
175 ::RAJA::policy::hip::
176 hip_exec<IterationMapping, IterationGetter, Concretizer, Async>,
182 hipStream_t stream = hip_res.get_stream();
184 int len = std::distance(begin, end);
186 void* d_temp_storage =
nullptr;
187 size_t temp_storage_bytes = 0;
188 #if defined(__HIPCC__)
190 temp_storage_bytes, begin, out, len, binary_op,
192 #elif defined(__CUDACC__)
193 CAMP_HIP_API_INVOKE_AND_CHECK(::cub::DeviceScan::InclusiveScan,
194 d_temp_storage, temp_storage_bytes, begin, out,
195 binary_op, len, stream);
199 hip::device_mempool_type::getInstance().malloc<
unsigned char>(
202 #if defined(__HIPCC__)
204 temp_storage_bytes, begin, out, len, binary_op,
206 #elif defined(__CUDACC__)
207 CAMP_HIP_API_INVOKE_AND_CHECK(::cub::DeviceScan::InclusiveScan,
208 d_temp_storage, temp_storage_bytes, begin, out,
209 binary_op, len, stream);
212 hip::device_mempool_type::getInstance().free(d_temp_storage);
216 return resources::EventProxy<resources::Hip>(hip_res);
223 template<
typename IterationMapping,
224 typename IterationGetter,
225 typename Concretizer,
231 RAJA_INLINE resources::EventProxy<resources::Hip>
exclusive(
232 resources::Hip hip_res,
233 ::RAJA::policy::hip::
234 hip_exec<IterationMapping, IterationGetter, Concretizer, Async>,
241 hipStream_t stream = hip_res.get_stream();
243 int len = std::distance(begin, end);
245 void* d_temp_storage =
nullptr;
246 size_t temp_storage_bytes = 0;
247 #if defined(__HIPCC__)
249 temp_storage_bytes, begin, out, init, len,
251 #elif defined(__CUDACC__)
252 CAMP_HIP_API_INVOKE_AND_CHECK(::cub::DeviceScan::ExclusiveScan,
253 d_temp_storage, temp_storage_bytes, begin, out,
254 binary_op, init, len, stream);
258 hip::device_mempool_type::getInstance().malloc<
unsigned char>(
261 #if defined(__HIPCC__)
263 temp_storage_bytes, begin, out, init, len,
265 #elif defined(__CUDACC__)
266 CAMP_HIP_API_INVOKE_AND_CHECK(::cub::DeviceScan::ExclusiveScan,
267 d_temp_storage, temp_storage_bytes, begin, out,
268 binary_op, init, len, stream);
271 hip::device_mempool_type::getInstance().free(d_temp_storage);
275 return resources::EventProxy<resources::Hip>(hip_res);
Header file defining prototypes for routines used to manage memory for HIP reductions and other opera...
Header file containing RAJA HIP policy definitions.
RAJA_INLINE concepts::enable_if_t< resources::EventProxy< resources::Host >, type_traits::is_openmp_policy< Policy > > inclusive(resources::Host host_res, const Policy &exec, Iter begin, Iter end, OutIter out, BinFn f)
Definition: scan.hpp:144
RAJA_INLINE concepts::enable_if_t< resources::EventProxy< resources::Host >, type_traits::is_openmp_policy< Policy > > exclusive(resources::Host host_res, const Policy &exec, Iter begin, Iter end, OutIter out, BinFn f, ValueT v)
Definition: scan.hpp:167
RAJA_INLINE concepts::enable_if_t< resources::EventProxy< resources::Host >, type_traits::is_openmp_policy< Policy > > inclusive_inplace(resources::Host host_res, const Policy &, Iter begin, Iter end, BinFn f)
Definition: scan.hpp:51
RAJA_INLINE concepts::enable_if_t< resources::EventProxy< resources::Host >, type_traits::is_openmp_policy< Policy > > exclusive_inplace(resources::Host host_res, const Policy &, Iter begin, Iter end, BinFn f, ValueT v)
Definition: scan.hpp:96
Definition: AlignedRangeIndexSetBuilders.cpp:35
RAJA_INLINE concepts::enable_if_t< resources::EventProxy< Res >, type_traits::is_execution_policy< ExecPolicy >, type_traits::is_resource< Res > > inclusive_scan(Res r, Args &&... args)
Definition: scan.hpp:381
void launch(LaunchParams const &launch_params, ReduceParams &&... rest_of_launch_args)
Definition: launch_core.hpp:268
RAJA_INLINE concepts::enable_if_t< resources::EventProxy< Res >, type_traits::is_execution_policy< ExecPolicy >, type_traits::is_resource< Res > > exclusive_scan(Res r, Args &&... args)
Definition: scan.hpp:352