Template Class DeviceBlock¶
Defined in File block_traits.hpp
Class Documentation¶
-
template<typename
T
, size_tDimensions
>
classripple
::
DeviceBlock
¶ Definition of a device block class which stores multidimensional data on the device.
Implementation of a device block class which stores multidimensional data on the device.
This will store the data in a strided format if the type T implements the StridableLayout interface and the descriptor for the storage for the type has a StorageLayout::StridedView type, otherwise this will store the data in a contiguous format.
This will store the data in a strided format if the type T implements the StriableLayout interface and the descriptor for the storage for the type has a StorageLayout::StridedView type, otherwise this will store the data in a contiguous format.
- Template Parameters
T
: The type of the data stored in the tensor.Dimensions
: The number of dimensions in the tensor.
- Note
While this class can be used directly, it’s designed as an implementation detail for the Tensor class.
- See
- Template Parameters
T
: The type of the data stored in the tensor.Dimensions
: The number of dimensions in the tensor.
Public Types
-
using
Padding
= typename Space::Padding¶ Defines the type used for padding.
-
using
AllocatorPtr
= MultiarchAllocator*¶ Defines the type of the pointer to the allocator.
Public Functions
-
DeviceBlock
() noexcept¶ Default constructor.This constructor is available so that an unsized block can be instanciated and then resized at runtime.
-
DeviceBlock
(Stream stream, AllocatorPtr allocator = nullptr) noexcept¶ Constructor which sets the stream for the block.
- Parameters
stream
: The stream for the device.
-
DeviceBlock
(AllocatorPtr allocator) noexcept¶ Default constructor.This constructor is available so that an unsized block can be instanciated and then resized at runtime.
-
DeviceBlock
(Stream stream) noexcept¶ Constructor which sets the stream for the block.
- Parameters
stream
: The stream for the device.
-
~DeviceBlock
() noexcept¶ Destructor for the block, which cleans up the block resources.
-
template<typename ...
Sizes
, all_arithmetic_size_enable_t<Dimensions, Sizes...> = 0>DeviceBlock
(Sizes&&... sizes)¶ Initializes the size of each of the dimensions of the block.
- Note
This is only enabled when the number of arguments matches the dimensionality of the block and the sizes are arithmetic types.
- Note
This also allocated the data for the block.
- Parameters
sizes
: The sizes of the dimensions for the block.
- Template Parameters
Sizes
: The types of other dimension sizes.
-
template<typename ...
Sizes
, all_arithmetic_size_enable_t<Dimensions, Sizes...> = 0>DeviceBlock
(Padding padding, Sizes&&... sizes)¶ Initializes the size of each of the dimensions of the block, as well as the padding for the block.
- Note
This is only enabled when the number of size arguments matches the dimensionality of the block and the sizes are arithmetic types.
- Note
This also allocates data for the block.
- Note
The amount of padding specified adds the given amount to each side of each dimension.
- Parameters
padding
: The amount of padding for the block.sizes
: The sizes of the dimensions for the block.
- Template Parameters
Sizes
: The types of other dimension sizes.
-
DeviceBlock
(const DeviceBlock &other)¶ Copy constructor to create the block from another block.
- Parameters
other
: The other block to create this block from.
-
DeviceBlock
(DeviceBlock &&other) noexcept¶ Constructor to move the other block into this one.
The other block will no longer have valid data, and it’s size is meaningless.
- Parameters
other
: The other block to move to this one.
-
DeviceBlock
(const HostBlock &other)¶ Constructor to create the block from a host block.
- Note
This copies the memory from the host block into the device memory for this block.
- Parameters
other
: The host block to create this block from.
-
auto
operator=
(const DeviceBlock &other) -> DeviceBlock&¶ Overload of copy assignment to create the block from another block.
- Note
This copies the data from the other block into this one.
- Return
A reference to the created block.
- Parameters
other
: The other block to create this block from.
-
auto
operator=
(const HostBlock &other) -> DeviceBlock&¶ Overload of copy assignment to create the block from another block.
- Note
This copies the data from the other block into this one.
- Return
A reference to the created block.
- Parameters
other
: The other block to create this block from.
-
template<typename ...
Indices
>
autooperator()
(Indices&&... is) noexcept -> Iter¶ Overload of operator() to get an iterator to the element at the location specified by the indices.
- Return
An iterator pointing to the element defined by the indices.
- Parameters
is
: The indices to get the element at.
- Template Parameters
Indices
: The types of the indices.
-
template<typename ...
Indices
>
autooperator()
(Indices&&... is) const noexcept -> ConstIter¶ Overload of operator() to get a constant iterator to the element at the location specified by the indices.
- Return
A const iterator pointing to the element defined by the indices.
- Parameters
is
: The indices to get the element at.
- Template Parameters
Indices
: The types of the indices.
-
auto
as_host
(BlockOpKind op_kind = BlockOpKind::synchronous) const -> HostBlock¶ Create a host block with the data from this device block.
- Return
A host block with the data and properties of this block.
- Parameters
op_kind
: The kind of the memory operations for the block.
-
auto
copy_data
(const HostBlock &other) noexcept -> void¶ Copies the data from the host block into this block.
- Parameters
other
: The other block to copy the data from.
-
auto
begin
(int padding_mod = 0) noexcept -> Iter¶ Gets an iterator to the beginning of the block.
- Note
The returned iterator points to the first valid cell (i.e is is offset over the padding).
- Return
An iterator to the first element in the block.
-
auto
begin
(int padding_mod = 0) const noexcept -> ConstIter¶ Gets a constant iterator to the beginning of the block.
- Note
The returned iterator points to the first valid cell (i.e is is offset over the padding).
- Return
A constant iterator to the first element in the block.
-
auto
reallocate
() -> void¶ Reallocates the data for the block.
-
template<typename
Dim
>
autoresize_dim
(Dim &&dim, size_t size) noexcept -> void¶ Resizes the dimension to the given size.
- Note
This does not reallocate, since multiple resizings would then then make multiple allocations. Call reallocate to reallocate after resizing.
- Note
The resize does not include padding, padding for the dimension is in addition to this size.
- Parameters
dim
: The dimension to resize.size
: The size to resize the dimension to. \tparm Dim The type of the dimension specifier.
-
template<typename ...
Sizes
>
autoresize
(Sizes&&... sizes) -> void¶ Resizes each of the dimensions specified to the given size.
- Note
This does reallocate the data after the resize, since it is assumed that no further resizing is necessary since all dimension sizes are specified in this call.
- Note
If less sizes are provided than there are dimensions in the block, the the first sizeof…(Sizes) dimensions will be resized.
- Parameters
sizes
: The sizes to resize the dimensions to.
- Template Parameters
Sizes
: The type of the sizes.
-
auto
size
() const noexcept -> size_t¶ Gets the total number of * valid* elements in the block, therefore this size excludes padding elements.
- See
- Return
The total number of valid elements in the block.
-
template<typename
Dim
>
autosize
(Dim &&dim) const -> size_t¶ Gets the total number of valid elements in the dimension, therefore this excludes the padding elements for the dimension.
- See
- Return
The number of valid elements in the dimension.
- Parameters
dim
: The dimension to get the size of.Dim
: The type of the dimension specifier.
-
template<typename
Dim
>
constexpr autopitch
(Dim &&dim) const noexcept -> size_t¶ Gets the pitch of the block in the given dimension, which is the total number of elements in the dimension including padding.
- Return
The total number of elements for the dimension including padding elements.
- Parameters
dim
: The dimension to get the pitch for.
- Template Parameters
Dim
: The type of the dimension specifier.
-
constexpr auto
dimensions
() const noexcept -> size_t¶ Gets the number of dimensions for the block.
- Return
The number of dimensions for the block.
-
auto
set_padding
(Padding padding) noexcept -> void¶ Sets the amount of padding for a single side of a single dimension for the block.
This padding amount will be applied to all sides of all dimensions.
- Note
This does not reallocate the memory for the block, so a call to reallocate should be made when the data should be reallocated.
- Parameters
padding
: The amount of padding.
-
auto
padding
() const noexcept -> Padding¶ Gets the amount of padding for the block.
- Note
This padding amount is for a single side of a single dimension of the block.
- Return
The amount of padding for the block.
-
auto
mem_requirement
() const noexcept -> size_t¶ Gets the number of bytes required to allocate memory to hold all data for the block.
- Return
The number of bytes required for the block.
-
auto
set_device_id
(uint32_t device_id) noexcept -> void¶ Sets the device id for the block.
- Parameters
device_id
: The id of the device to use for the block.
-
auto
device_id
() const noexcept -> uint32_t¶ Gets the device id for the block.
- Return
The device id for this block.
-
auto
stream
() const noexcept -> Stream¶ Gets the stream used by the block.
- Return
The stream for the block.
-
auto
set_stream
(Stream stream) noexcept -> void¶ Sets the stream for the block.
- Parameters
stream
: The stream to set for the block.
-
auto
destroy_stream
() noexcept -> void¶ Destroys the stream for the block.
-
template<typename
Block
>
constexpr autoget_copy_type
() const noexcept -> cudaMemcpyKind¶ Returns the copy type required to copy from this block to another block with type Block.
- Return
The type of the copy required to copy from this block.
- Template Parameters
Block
: The block to determine the copy type from.
Friends
-
friend auto
swap
(DeviceBlock &lhs, DeviceBlock &rhs) noexcept -> void¶ Swaps the blocks lhs and rhs blocks.
- Parameters
lhs
: The left block to swap.rhs
: The right block to swap.