RAJA
RAJA provides a collection of platform portability abstractions for C++ HPC applications.
Public Types | Public Member Functions | Friends | List of all members
RAJA::detail::SoAPtr< T, mempool, accessor > Class Template Reference

Pointer class specialized for Struct of Array data layout allocated via RAJA basic_mempools. More...

#include <SoAPtr.hpp>

Public Types

using value_type = T
 
template<typename rhs_accessor >
using rebind_accessor = SoAPtr< T, mempool, rhs_accessor >
 

Public Member Functions

 SoAPtr ()=default
 
 SoAPtr (SoAPtr const &)=default
 
 SoAPtr (SoAPtr &&)=default
 
SoAPtroperator= (SoAPtr const &)=default
 
SoAPtroperator= (SoAPtr &&)=default
 
 SoAPtr (size_t size)
 
template<typename rhs_accessor , std::enable_if_t<!std::is_same< accessor, rhs_accessor >::value > * = nullptr>
RAJA_HOST_DEVICE SoAPtr (SoAPtr< value_type, mempool, rhs_accessor > const &rhs)
 
SoAPtrallocate (size_t size)
 
SoAPtrdeallocate ()
 
RAJA_HOST_DEVICE bool allocated () const
 
constexpr RAJA_HOST_DEVICE value_type get (size_t i) const
 
constexpr RAJA_HOST_DEVICE void set (size_t i, value_type val)
 

Friends

template<typename , typename , typename >
class SoAPtr
 

Detailed Description

template<typename T, typename mempool = RAJA::basic_mempool::MemPool< RAJA::basic_mempool::generic_allocator>, typename accessor = DefaultAccessor>
class RAJA::detail::SoAPtr< T, mempool, accessor >

Pointer class specialized for Struct of Array data layout allocated via RAJA basic_mempools.

This is useful for creating a vectorizable data layout and getting coalesced memory accesses or avoiding shared memory bank conflicts in cuda.

Member Typedef Documentation

◆ value_type

template<typename T , typename mempool = RAJA::basic_mempool::MemPool< RAJA::basic_mempool::generic_allocator>, typename accessor = DefaultAccessor>
using RAJA::detail::SoAPtr< T, mempool, accessor >::value_type = T

◆ rebind_accessor

template<typename T , typename mempool = RAJA::basic_mempool::MemPool< RAJA::basic_mempool::generic_allocator>, typename accessor = DefaultAccessor>
template<typename rhs_accessor >
using RAJA::detail::SoAPtr< T, mempool, accessor >::rebind_accessor = SoAPtr<T, mempool, rhs_accessor>

Constructor & Destructor Documentation

◆ SoAPtr() [1/5]

template<typename T , typename mempool = RAJA::basic_mempool::MemPool< RAJA::basic_mempool::generic_allocator>, typename accessor = DefaultAccessor>
RAJA::detail::SoAPtr< T, mempool, accessor >::SoAPtr ( )
default

◆ SoAPtr() [2/5]

template<typename T , typename mempool = RAJA::basic_mempool::MemPool< RAJA::basic_mempool::generic_allocator>, typename accessor = DefaultAccessor>
RAJA::detail::SoAPtr< T, mempool, accessor >::SoAPtr ( SoAPtr< T, mempool, accessor > const &  )
default

◆ SoAPtr() [3/5]

template<typename T , typename mempool = RAJA::basic_mempool::MemPool< RAJA::basic_mempool::generic_allocator>, typename accessor = DefaultAccessor>
RAJA::detail::SoAPtr< T, mempool, accessor >::SoAPtr ( SoAPtr< T, mempool, accessor > &&  )
default

◆ SoAPtr() [4/5]

template<typename T , typename mempool = RAJA::basic_mempool::MemPool< RAJA::basic_mempool::generic_allocator>, typename accessor = DefaultAccessor>
RAJA::detail::SoAPtr< T, mempool, accessor >::SoAPtr ( size_t  size)
inlineexplicit

◆ SoAPtr() [5/5]

template<typename T , typename mempool = RAJA::basic_mempool::MemPool< RAJA::basic_mempool::generic_allocator>, typename accessor = DefaultAccessor>
template<typename rhs_accessor , std::enable_if_t<!std::is_same< accessor, rhs_accessor >::value > * = nullptr>
RAJA_HOST_DEVICE RAJA::detail::SoAPtr< T, mempool, accessor >::SoAPtr ( SoAPtr< value_type, mempool, rhs_accessor > const &  rhs)
inlineexplicit

Member Function Documentation

◆ operator=() [1/2]

template<typename T , typename mempool = RAJA::basic_mempool::MemPool< RAJA::basic_mempool::generic_allocator>, typename accessor = DefaultAccessor>
SoAPtr& RAJA::detail::SoAPtr< T, mempool, accessor >::operator= ( SoAPtr< T, mempool, accessor > const &  )
default

◆ operator=() [2/2]

template<typename T , typename mempool = RAJA::basic_mempool::MemPool< RAJA::basic_mempool::generic_allocator>, typename accessor = DefaultAccessor>
SoAPtr& RAJA::detail::SoAPtr< T, mempool, accessor >::operator= ( SoAPtr< T, mempool, accessor > &&  )
default

◆ allocate()

template<typename T , typename mempool = RAJA::basic_mempool::MemPool< RAJA::basic_mempool::generic_allocator>, typename accessor = DefaultAccessor>
SoAPtr& RAJA::detail::SoAPtr< T, mempool, accessor >::allocate ( size_t  size)
inline

◆ deallocate()

template<typename T , typename mempool = RAJA::basic_mempool::MemPool< RAJA::basic_mempool::generic_allocator>, typename accessor = DefaultAccessor>
SoAPtr& RAJA::detail::SoAPtr< T, mempool, accessor >::deallocate ( )
inline

◆ allocated()

template<typename T , typename mempool = RAJA::basic_mempool::MemPool< RAJA::basic_mempool::generic_allocator>, typename accessor = DefaultAccessor>
RAJA_HOST_DEVICE bool RAJA::detail::SoAPtr< T, mempool, accessor >::allocated ( ) const
inline

◆ get()

template<typename T , typename mempool = RAJA::basic_mempool::MemPool< RAJA::basic_mempool::generic_allocator>, typename accessor = DefaultAccessor>
constexpr RAJA_HOST_DEVICE value_type RAJA::detail::SoAPtr< T, mempool, accessor >::get ( size_t  i) const
inlineconstexpr

◆ set()

template<typename T , typename mempool = RAJA::basic_mempool::MemPool< RAJA::basic_mempool::generic_allocator>, typename accessor = DefaultAccessor>
constexpr RAJA_HOST_DEVICE void RAJA::detail::SoAPtr< T, mempool, accessor >::set ( size_t  i,
value_type  val 
)
inlineconstexpr

Friends And Related Function Documentation

◆ SoAPtr

template<typename T , typename mempool = RAJA::basic_mempool::MemPool< RAJA::basic_mempool::generic_allocator>, typename accessor = DefaultAccessor>
template<typename , typename , typename >
friend class SoAPtr
friend

The documentation for this class was generated from the following file: