20 #ifndef RAJA_SOA_PTR_HPP
21 #define RAJA_SOA_PTR_HPP
23 #include "RAJA/config.hpp"
25 #include <type_traits>
50 typename accessor = DefaultAccessor>
53 template<
typename,
typename,
typename>
59 template<
typename rhs_accessor>
69 : mem(mempool::getInstance().template malloc<
value_type>(size))
73 typename rhs_accessor,
74 std::enable_if_t<!std::is_same<accessor, rhs_accessor>::value>* =
nullptr>
82 mem = mempool::getInstance().template malloc<value_type>(size);
88 mempool::getInstance().free(mem);
102 accessor::set(mem, i, val);
121 using first_type = T;
122 using second_type = IndexType;
124 template<
typename,
typename,
typename>
130 template<
typename rhs_accessor>
140 : mem(mempool::getInstance().template malloc<first_type>(size)),
141 mem_idx(mempool::getInstance().template malloc<second_type>(size))
145 typename rhs_accessor,
146 std::enable_if_t<!std::is_same<accessor, rhs_accessor>::value>* =
nullptr>
155 mem = mempool::getInstance().template malloc<first_type>(size);
156 mem_idx = mempool::getInstance().template malloc<second_type>(size);
162 mempool::getInstance().free(mem);
164 mempool::getInstance().free(mem_idx);
178 accessor::set(mem, i, first_type(val));
179 accessor::set(mem_idx, i, val.
getLoc());
183 first_type* mem =
nullptr;
184 second_type* mem_idx =
nullptr;
190 template<
typename T,
typename IndexType,
typename mempool,
typename accessor>
193 using first_type = T;
194 using second_type = IndexType;
196 template<
typename,
typename,
typename>
202 template<
typename rhs_accessor>
212 : mem(mempool::getInstance().template malloc<first_type>(size)),
213 mem_idx(mempool::getInstance().template malloc<second_type>(size))
217 typename rhs_accessor,
218 std::enable_if_t<!std::is_same<accessor, rhs_accessor>::value>* =
nullptr>
227 mem = mempool::getInstance().template malloc<first_type>(size);
228 mem_idx = mempool::getInstance().template malloc<second_type>(size);
234 mempool::getInstance().free(mem);
236 mempool::getInstance().free(mem_idx);
250 accessor::set(mem, i, val.
getVal());
251 accessor::set(mem_idx, i, val.
getLoc());
255 first_type* mem =
nullptr;
256 second_type* mem_idx =
nullptr;
MemPool pre-allocates a large chunk of memory and provides generic malloc/free for the user to alloca...
Definition: basic_mempool.hpp:306
SoAPtr & operator=(SoAPtr &&)=default
constexpr RAJA_HOST_DEVICE void set(size_t i, value_type val)
Definition: SoAPtr.hpp:248
SoAPtr & allocate(size_t size)
Definition: SoAPtr.hpp:225
SoAPtr(SoAPtr &&)=default
constexpr RAJA_HOST_DEVICE value_type get(size_t i) const
Definition: SoAPtr.hpp:243
SoAPtr(SoAPtr const &)=default
RAJA_HOST_DEVICE SoAPtr(SoAPtr< value_type, mempool, rhs_accessor > const &rhs)
Definition: SoAPtr.hpp:219
RAJA_HOST_DEVICE bool allocated() const
Definition: SoAPtr.hpp:241
SoAPtr & deallocate()
Definition: SoAPtr.hpp:232
SoAPtr & operator=(SoAPtr const &)=default
SoAPtr(size_t size)
Definition: SoAPtr.hpp:211
RAJA_HOST_DEVICE bool allocated() const
Definition: SoAPtr.hpp:169
SoAPtr & operator=(SoAPtr const &)=default
constexpr RAJA_HOST_DEVICE void set(size_t i, value_type val)
Definition: SoAPtr.hpp:176
SoAPtr & deallocate()
Definition: SoAPtr.hpp:160
SoAPtr(SoAPtr &&)=default
constexpr RAJA_HOST_DEVICE value_type get(size_t i) const
Definition: SoAPtr.hpp:171
SoAPtr & allocate(size_t size)
Definition: SoAPtr.hpp:153
SoAPtr & operator=(SoAPtr &&)=default
RAJA_HOST_DEVICE SoAPtr(SoAPtr< value_type, mempool, rhs_accessor > const &rhs)
Definition: SoAPtr.hpp:147
SoAPtr(size_t size)
Definition: SoAPtr.hpp:139
SoAPtr(SoAPtr const &)=default
Pointer class specialized for Struct of Array data layout allocated via RAJA basic_mempools.
Definition: SoAPtr.hpp:52
SoAPtr & allocate(size_t size)
Definition: SoAPtr.hpp:80
RAJA_HOST_DEVICE bool allocated() const
Definition: SoAPtr.hpp:93
constexpr RAJA_HOST_DEVICE void set(size_t i, value_type val)
Definition: SoAPtr.hpp:100
SoAPtr & deallocate()
Definition: SoAPtr.hpp:86
SoAPtr(SoAPtr const &)=default
SoAPtr & operator=(SoAPtr const &)=default
constexpr RAJA_HOST_DEVICE value_type get(size_t i) const
Definition: SoAPtr.hpp:95
SoAPtr(SoAPtr &&)=default
SoAPtr(size_t size)
Definition: SoAPtr.hpp:68
SoAPtr & operator=(SoAPtr &&)=default
T value_type
Definition: SoAPtr.hpp:57
RAJA_HOST_DEVICE SoAPtr(SoAPtr< value_type, mempool, rhs_accessor > const &rhs)
Definition: SoAPtr.hpp:75
Definition: reduce.hpp:131
RAJA_HOST_DEVICE IndexType getLoc()
Definition: reduce.hpp:170
#define RAJA_HOST_DEVICE
Definition: macros.hpp:65
Definition: AlignedRangeIndexSetBuilders.cpp:35
RAJA_HOST_DEVICE constexpr RAJA_INLINE RAJA::zip_tuple_element_t< I, zip_tuple< is_val, Ts... > > & get(zip_tuple< is_val, Ts... > &z) noexcept
Definition: zip_tuple.hpp:56
Base types used in common for RAJA reducer objects.
example allocator for basic_mempool using malloc/free
Definition: basic_mempool.hpp:426
Definition: params_base.hpp:20
constexpr RAJA_HOST_DEVICE const value_type & getVal() const
Definition: params_base.hpp:46
constexpr RAJA_HOST_DEVICE const index_type & getLoc() const
Definition: params_base.hpp:48
Header file for RAJA type definitions.