31 enum class REDUCTION_IMPL :
u32 {
33#ifdef SYCL2020_FEATURE_GROUP_REDUCTION
40 REDUCTION_IMPL get_default_reduction_impl() {
41#ifdef SYCL2020_FEATURE_GROUP_REDUCTION
42 return REDUCTION_IMPL::GROUP_REDUCTION128;
44 return REDUCTION_IMPL::FALLBACK;
48 REDUCTION_IMPL reduction_impl = get_default_reduction_impl();
50 inline REDUCTION_IMPL reduction_impl_from_params(
const std::string &impl) {
51 if (impl ==
"fallback") {
52 return REDUCTION_IMPL::FALLBACK;
53#ifdef SYCL2020_FEATURE_GROUP_REDUCTION
54 }
else if (impl ==
"group_reduction16") {
55 return REDUCTION_IMPL::GROUP_REDUCTION16;
56 }
else if (impl ==
"group_reduction128") {
57 return REDUCTION_IMPL::GROUP_REDUCTION128;
58 }
else if (impl ==
"group_reduction256") {
59 return REDUCTION_IMPL::GROUP_REDUCTION256;
63 "invalid implementation : {}, possible implementations : {}",
69 if (impl == REDUCTION_IMPL::FALLBACK) {
70 return {
"fallback",
""};
71#ifdef SYCL2020_FEATURE_GROUP_REDUCTION
72 }
else if (impl == REDUCTION_IMPL::GROUP_REDUCTION16) {
73 return {
"group_reduction16",
""};
74 }
else if (impl == REDUCTION_IMPL::GROUP_REDUCTION128) {
75 return {
"group_reduction128",
""};
76 }
else if (impl == REDUCTION_IMPL::GROUP_REDUCTION256) {
77 return {
"group_reduction256",
""};
81 shambase::format(
"unknown reduction implementation : {}",
u32(impl)));
87#ifdef SYCL2020_FEATURE_GROUP_REDUCTION
88 {
"group_reduction16",
""},
89 {
"group_reduction128",
""},
90 {
"group_reduction256",
""}
96 return reduction_impl_to_params(reduction_impl);
100 shamlog_info_ln(
"tree",
"setting reduction implementation to impl :", impl);
101 reduction_impl = reduction_impl_from_params(impl);
106 const sham::DeviceScheduler_ptr &sched,
111 using namespace shamalgs::reduction::details;
113 switch (reduction_impl) {
114 case REDUCTION_IMPL::FALLBACK:
return sum_usm_fallback(sched, buf1, start_id, end_id);
115#ifdef SYCL2020_FEATURE_GROUP_REDUCTION
116 case REDUCTION_IMPL::GROUP_REDUCTION16:
117 return sum_usm_group(sched, buf1, start_id, end_id, 16);
118 case REDUCTION_IMPL::GROUP_REDUCTION128:
119 return sum_usm_group(sched, buf1, start_id, end_id, 128);
120 case REDUCTION_IMPL::GROUP_REDUCTION256:
121 return sum_usm_group(sched, buf1, start_id, end_id, 256);
125 shambase::format(
"unimplemented case : {}",
u32(reduction_impl)));
131 const sham::DeviceScheduler_ptr &sched,
136 using namespace shamalgs::reduction::details;
138 switch (reduction_impl) {
139 case REDUCTION_IMPL::FALLBACK:
return min_usm_fallback(sched, buf1, start_id, end_id);
140#ifdef SYCL2020_FEATURE_GROUP_REDUCTION
141 case REDUCTION_IMPL::GROUP_REDUCTION16:
142 return min_usm_group(sched, buf1, start_id, end_id, 16);
143 case REDUCTION_IMPL::GROUP_REDUCTION128:
144 return min_usm_group(sched, buf1, start_id, end_id, 128);
145 case REDUCTION_IMPL::GROUP_REDUCTION256:
146 return min_usm_group(sched, buf1, start_id, end_id, 256);
150 shambase::format(
"unimplemented case : {}",
u32(reduction_impl)));
156 const sham::DeviceScheduler_ptr &sched,
161 using namespace shamalgs::reduction::details;
163 switch (reduction_impl) {
164 case REDUCTION_IMPL::FALLBACK:
return max_usm_fallback(sched, buf1, start_id, end_id);
165#ifdef SYCL2020_FEATURE_GROUP_REDUCTION
166 case REDUCTION_IMPL::GROUP_REDUCTION16:
167 return max_usm_group(sched, buf1, start_id, end_id, 16);
168 case REDUCTION_IMPL::GROUP_REDUCTION128:
169 return max_usm_group(sched, buf1, start_id, end_id, 128);
170 case REDUCTION_IMPL::GROUP_REDUCTION256:
171 return max_usm_group(sched, buf1, start_id, end_id, 256);
175 shambase::format(
"unimplemented case : {}",
u32(reduction_impl)));
203 template _arg_ sum<_arg_>( \
204 const sham::DeviceScheduler_ptr &sched, \
205 const sham::DeviceBuffer<_arg_> &buf1, \
208 template _arg_ min<_arg_>( \
209 const sham::DeviceScheduler_ptr &sched, \
210 const sham::DeviceBuffer<_arg_> &buf1, \
213 template _arg_ max<_arg_>( \
214 const sham::DeviceScheduler_ptr &sched, \
215 const sham::DeviceBuffer<_arg_> &buf1, \
std::uint32_t u32
32 bit unsigned integer
A buffer allocated in USM (Unified Shared Memory)
This header file contains utility functions related to exception handling in the code.
void set_impl_reduction(const std::string &impl, const std::string ¶m="")
Set the implementation for reduction.
std::vector< shamalgs::impl_param > get_default_impl_list_reduction()
Get list of available reduction implementations.
shamalgs::impl_param get_current_impl_reduction()
Get the current implementation for reduction.
namespace for primitive algorithm (e.g. sort, scan, reductions, ...)
void throw_with_loc(std::string message, SourceLocation loc=SourceLocation{})
Throw an exception and append the source location to it.