|
LvArray
|
Implements the Buffer interface using CHAI. More...
#include <ChaiBuffer.hpp>
Public Types | |
| using | value_type = T |
| Alias for T used used in the bufferManipulation functions. | |
| using | T_non_const = std::remove_const_t< T > |
| An alias for the non const version of T. | |
Public Member Functions | |
| LVARRAY_HOST_DEVICE constexpr | ChaiBuffer () |
| Default constructor, creates an uninitialized ChaiBuffer. More... | |
| LVARRAY_HOST_DEVICE | ChaiBuffer (bool) |
| Constructor for creating an empty Buffer. More... | |
| LVARRAY_HOST_DEVICE | ChaiBuffer (std::initializer_list< MemorySpace > const &spaces, std::initializer_list< umpire::Allocator > const &allocators) |
| Construct a ChaiBuffer which uses the specific allocator for each space. More... | |
| LVARRAY_HOST_DEVICE | ChaiBuffer (ChaiBuffer const &src) |
| Copy constructor. More... | |
| LVARRAY_HOST_DEVICE | ChaiBuffer (ChaiBuffer const &src, std::ptrdiff_t const size) |
| Copy constructor. More... | |
| LVARRAY_HOST_DEVICE constexpr | ChaiBuffer (ChaiBuffer &&src) |
| Move constructor. More... | |
| template<typename U > | |
| LVARRAY_HOST_DEVICE constexpr | ChaiBuffer (ChaiBuffer< U > const &src) |
Create a shallow copy of src but with a different type. More... | |
| LVARRAY_HOST_DEVICE LVARRAY_INTEL_CONSTEXPR ChaiBuffer & | operator= (ChaiBuffer const &src) |
| Copy assignment operator. More... | |
| LVARRAY_HOST_DEVICE LVARRAY_INTEL_CONSTEXPR ChaiBuffer & | operator= (ChaiBuffer &&src) |
| Move assignment operator. More... | |
| LVARRAY_HOST_DEVICE void | reallocate (std::ptrdiff_t const size, MemorySpace const space, std::ptrdiff_t const newCapacity) |
| Reallocate the buffer to the new capacity. More... | |
| LVARRAY_HOST_DEVICE void | free () |
| Free the data in the buffer but does not destroy any values. More... | |
| LVARRAY_HOST_DEVICE constexpr std::ptrdiff_t | capacity () const |
| LVARRAY_HOST_DEVICE constexpr T * | data () const |
| LVARRAY_HOST_DEVICE constexpr chai::PointerRecord & | pointerRecord () const |
| Return a reference to the associated CHAI PointerRecord. More... | |
| template<typename INDEX_TYPE > | |
| LVARRAY_HOST_DEVICE constexpr T & | operator[] (INDEX_TYPE const i) const |
| void | moveNested (MemorySpace const space, std::ptrdiff_t const size, bool const touch) const |
| Move the buffer to the given execution space, optionally touching it. More... | |
| void | move (MemorySpace const space, bool const touch) const |
| Move the buffer to the given execution space, optionally touching it. More... | |
| MemorySpace | getPreviousSpace () const |
| constexpr void | registerTouch (MemorySpace const space) const |
| Touch the buffer in the given space. More... | |
| template<typename U = ChaiBuffer< T >> | |
| void | setName (std::string const &name) |
| Set the name associated with this buffer which is used in the chai callback. More... | |
Static Public Attributes | |
| static constexpr bool | hasShallowCopy = true |
| A flag indicating that the ChaiBuffer's copy semantics are shallow. | |
Private Member Functions | |
| template<typename U = T_non_const> | |
| std::enable_if_t< bufferManipulation::HasMemberFunction_move< U > > | moveInnerData (MemorySpace const space, std::ptrdiff_t const size, bool const touch) const |
Move inner allocations to the memory space space. More... | |
| template<typename U = T_non_const> | |
| std::enable_if_t< !bufferManipulation::HasMemberFunction_move< U > > | moveInnerData (MemorySpace const, std::ptrdiff_t const, bool const) const |
Move inner allocations to the memory space space. More... | |
Private Attributes | |
| T *LVARRAY_RESTRICT | m_pointer = nullptr |
| A pointer to the data. | |
| std::ptrdiff_t | m_capacity = 0 |
| The size of the allocation. | |
| chai::PointerRecord * | m_pointerRecord = nullptr |
| A pointer to the chai PointerRecord, keeps track of the memory space information. | |
Implements the Buffer interface using CHAI.
| T | type of data that is contained in the buffer. |
The ChaiBuffer's allocation can exist in multiple memory spaces. If the chai execution space is set the copy constructor will ensure that the newly constructed ChaiBuffer's pointer points to memory in that space. If the memory does exist it will be allocated and the data copied over. If the memory exists but the data has been touched (modified) in the current space it will be copied over. The data is touched in the new space if T is non const and is not touched if T is const.
|
inline |
Default constructor, creates an uninitialized ChaiBuffer.
An uninitialized ChaiBuffer is an undefined state and may only be assigned to. An uninitialized ChaiBuffer holds no recources and does not need to be free'd.
|
inline |
Constructor for creating an empty Buffer.
An empty buffer may hold resources and needs to be free'd.
|
inline |
Construct a ChaiBuffer which uses the specific allocator for each space.
| spaces | The list of spaces. |
| allocators | The allocators, must be the same length as spaces. |
is used for the memory space
.
|
inline |
Copy constructor.
| src | The buffer to copy. |
In addition to performing a shallow copy of src if the chai execution space is set *this will contain a pointer the the allocation in that space.
|
inline |
Copy constructor.
| src | The buffer to copy. |
In addition to performing a shallow copy of src if the chai execution space is set *this will contain a pointer the the allocation in that space.
| size | The number of values in the allocation. |
src if the chai execution space is set *this will contain a pointer the the allocation in that space. It will also move any nested objects.
|
inline |
Move constructor.
| src | The ChaiBuffer to be moved from, is uninitialized after this call. |
|
inline |
Create a shallow copy of src but with a different type.
| U | The type to convert from. |
| src | The buffer to copy. |
|
inline |
|
inline |
|
inline |
Free the data in the buffer but does not destroy any values.
|
inline |
|
inline |
Move the buffer to the given execution space, optionally touching it.
| space | The space to move the buffer to. |
| touch | If the buffer should be touched in the new space or not. |
|
inlineprivate |
Move inner allocations to the memory space space.
| U | A dummy parameter to enable SFINAE, do not specify. |
| space | The memory space to move to. |
| size | The number of values to move. |
| touch | If the inner values should be touched or not. |
|
inlineprivate |
Move inner allocations to the memory space space.
| U | A dummy parameter to enable SFINAE, do not specify. |
|
inline |
Move the buffer to the given execution space, optionally touching it.
| space | The space to move the buffer to. |
| size | The size of the buffer. |
| touch | If the buffer should be touched in the new space or not. |
space, touch ) on each sub object.
|
inline |
|
inline |
Move assignment operator.
| src | The ChaiBuffer to be moved from, is uninitialized after this call. |
|
inline |
| INDEX_TYPE | the type used to index into the values. |
i . | i | The position of the value to access. |
|
inline |
Return a reference to the associated CHAI PointerRecord.
|
inline |
Reallocate the buffer to the new capacity.
| size | the number of values that are initialized in the buffer. Values between [0, size) are destroyed. |
| space | The space to perform the reallocation in. If space is the CPU then the buffer is reallocated only on the CPU and it is free'd in the other spaces. If the space is the GPU the the current size must be zero. |
| newCapacity | the new capacity of the buffer. |
|
inline |
Touch the buffer in the given space.
| space | the space to touch. |
|
inline |
Set the name associated with this buffer which is used in the chai callback.
| U | The type of the owning class, will be displayed in the callback. |
| name | the of the buffer. |
1.8.13