23 #ifndef RAJA_sequential_multi_reduce_HPP
24 #define RAJA_sequential_multi_reduce_HPP
26 #include "RAJA/config.hpp"
52 template<
typename T,
typename t_MultiReduceOp,
typename tuning>
64 template<
typename T,
typename t_MultiReduceOp>
69 RAJA::sequential::multi_reduce_algorithm::left_fold>>
76 template<
typename Container,
78 !std::is_same<Container, MultiReduceDataSeq>::value>* =
nullptr>
81 m_num_bins(container.size()),
85 m_data = create_data(container, m_num_bins);
89 : m_parent(other.m_parent ? other.m_parent : &other),
90 m_num_bins(other.m_num_bins),
91 m_identity(other.m_identity),
105 destroy_data(m_data, m_num_bins);
110 template<
typename Container>
111 void reset(Container
const& container, T identity)
113 m_identity = identity;
114 size_t new_num_bins = container.size();
115 if (new_num_bins != m_num_bins)
117 destroy_data(m_data, m_num_bins);
118 m_num_bins = new_num_bins;
119 m_data = create_data(container, m_num_bins);
124 for (
auto const& value : container)
138 T
get(
size_t bin)
const {
return m_data[bin]; }
146 template<
typename Container>
147 static T* create_data(Container
const& container,
size_t num_bins)
149 if (num_bins ==
size_t(0))
154 auto data =
static_cast<T*
>(malloc(num_bins *
sizeof(T)));
156 for (
auto const& value : container)
158 new (&data[bin]) T(value);
164 static void destroy_data(T*& data,
size_t num_bins)
166 if (num_bins ==
size_t(0))
171 for (
size_t bin = 0; bin < num_bins; ++bin)
183 detail::MultiReduceDataSeq)
Header file defining prototypes for routines used to manage memory for CPU reductions and other opera...
Definition: AlignedRangeIndexSetBuilders.cpp:35
Base types used in common for RAJA reducer objects.
#define RAJA_DECLARE_ALL_MULTI_REDUCERS(POL, DATA)
Definition: multi_reduce.hpp:49
Header file providing RAJA reduction declarations.
Header file containing RAJA sequential policy definitions.
T get(size_t bin) const
Definition: multi_reduce.hpp:138
T identity() const
Definition: multi_reduce.hpp:134
void combine(size_t bin, T const &val)
Definition: multi_reduce.hpp:136
T value_type
Definition: multi_reduce.hpp:71
MultiReduceDataSeq(MultiReduceDataSeq const &other)
Definition: multi_reduce.hpp:88
t_MultiReduceOp MultiReduceOp
Definition: multi_reduce.hpp:72
size_t num_bins() const
Definition: multi_reduce.hpp:132
MultiReduceDataSeq()=delete
MultiReduceDataSeq & operator=(MultiReduceDataSeq &&)=delete
void reset(Container const &container, T identity)
Definition: multi_reduce.hpp:111
MultiReduceDataSeq & operator=(MultiReduceDataSeq const &)=delete
MultiReduceDataSeq(MultiReduceDataSeq &&)=delete
~MultiReduceDataSeq()
Definition: multi_reduce.hpp:99
MultiReduceDataSeq(Container const &container, T identity)
Definition: multi_reduce.hpp:79
Seq multi-reduce data class template.
Definition: multi_reduce.hpp:53
Definition: policy.hpp:37
Header file for RAJA type definitions.