All Classes Namespaces Functions Variables Typedefs Enumerations Friends
buffer.h
1 
5 #pragma once
6 
7 #include <memory>
8 #include <utility>
9 
10 #include <ucxx/log.h>
11 
12 #if UCXX_ENABLE_RMM
13 #include <rmm/device_buffer.hpp>
14 #endif
15 
16 namespace ucxx {
17 
23 enum class BufferType {
24  Host = 0,
25  RMM,
26  Invalid,
27 };
28 
37 class Buffer {
38  protected:
39  BufferType _bufferType{BufferType::Invalid};
40  size_t _size;
41 
51  Buffer(const BufferType bufferType, const size_t size);
52 
53  public:
54  Buffer() = delete;
55  Buffer(const Buffer&) = delete;
56  Buffer& operator=(Buffer const&) = delete;
57  Buffer(Buffer&& o) = delete;
58  Buffer& operator=(Buffer&& o) = delete;
59 
65  virtual ~Buffer();
66 
75  [[nodiscard]] BufferType getType() const noexcept;
76 
84  [[nodiscard]] size_t getSize() const noexcept;
85 
95  [[nodiscard]] virtual void* data() = 0;
96 };
97 
103 class HostBuffer : public Buffer {
104  private:
105  void* _buffer;
106 
107  public:
108  HostBuffer() = delete;
109  HostBuffer(const HostBuffer&) = delete;
110  HostBuffer& operator=(HostBuffer const&) = delete;
111  HostBuffer(HostBuffer&& o) = delete;
112  HostBuffer& operator=(HostBuffer&& o) = delete;
113 
127  explicit HostBuffer(const size_t size);
128 
136 
162  [[nodiscard]] void* release();
163 
183  [[nodiscard]] virtual void* data();
184 };
185 
186 #if UCXX_ENABLE_RMM
192 class RMMBuffer : public Buffer {
193  private:
194  std::unique_ptr<rmm::device_buffer> _buffer;
195 
196  public:
197  RMMBuffer() = delete;
198  RMMBuffer(const RMMBuffer&) = delete;
199  RMMBuffer& operator=(RMMBuffer const&) = delete;
200  RMMBuffer(RMMBuffer&& o) = delete;
201  RMMBuffer& operator=(RMMBuffer&& o) = delete;
202 
217  explicit RMMBuffer(const size_t size);
218 
245  [[nodiscard]] std::unique_ptr<rmm::device_buffer> release();
246 
267  [[nodiscard]] virtual void* data();
268 };
269 #endif
270 
282 [[nodiscard]] std::shared_ptr<Buffer> allocateBuffer(BufferType bufferType, const size_t size);
283 
284 } // namespace ucxx
A simple object to simplify managing buffers.
Definition: buffer.h:37
Buffer(const BufferType bufferType, const size_t size)
Protected constructor of abstract type Buffer.
virtual ~Buffer()
Virtual destructor.
BufferType _bufferType
Buffer type.
Definition: buffer.h:39
size_t getSize() const noexcept
Get the size of the contained buffer.
BufferType getType() const noexcept
Get the type of buffer the object holds.
size_t _size
Buffer size.
Definition: buffer.h:40
virtual void * data()=0
Abstract method returning void pointer to buffer.
A simple object containing a host buffer.
Definition: buffer.h:103
void * release()
Release the allocated host buffer to the caller.
~HostBuffer()
Destructor of concrete type HostBuffer.
virtual void * data()
Get a pointer to the allocated raw host buffer.
HostBuffer(const size_t size)
Constructor of concrete type HostBuffer.
Definition: address.h:15
std::shared_ptr< Buffer > allocateBuffer(BufferType bufferType, const size_t size)
Allocate a buffer of specified type and size.
BufferType
The type of a buffer.
Definition: buffer.h:23