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 namespace rmm {
13 // Forward declaration to prevent symbols from being added to symbol table unnecessarily.
14 class device_buffer;
15 } // namespace rmm
16 
17 namespace ucxx {
18 
24 enum class BufferType {
25  Host = 0,
26  RMM,
27  Invalid,
28 };
29 
38 class Buffer {
39  protected:
40  BufferType _bufferType{BufferType::Invalid};
41  size_t _size;
42 
52  Buffer(const BufferType bufferType, const size_t size);
53 
54  public:
55  Buffer() = delete;
56  Buffer(const Buffer&) = delete;
57  Buffer& operator=(Buffer const&) = delete;
58  Buffer(Buffer&& o) = delete;
59  Buffer& operator=(Buffer&& o) = delete;
60 
66  virtual ~Buffer();
67 
76  [[nodiscard]] BufferType getType() const noexcept;
77 
85  [[nodiscard]] size_t getSize() const noexcept;
86 
96  [[nodiscard]] virtual void* data() = 0;
97 };
98 
104 class HostBuffer : public Buffer {
105  private:
106  void* _buffer;
107 
108  public:
109  HostBuffer() = delete;
110  HostBuffer(const HostBuffer&) = delete;
111  HostBuffer& operator=(HostBuffer const&) = delete;
112  HostBuffer(HostBuffer&& o) = delete;
113  HostBuffer& operator=(HostBuffer&& o) = delete;
114 
128  explicit HostBuffer(const size_t size);
129 
137 
163  [[nodiscard]] void* release();
164 
184  [[nodiscard]] virtual void* data();
185 };
186 
187 #if UCXX_ENABLE_RMM
193 class RMMBuffer : public Buffer {
194  private:
195  std::unique_ptr<rmm::device_buffer> _buffer;
196 
197  public:
198  RMMBuffer() = delete;
199  RMMBuffer(const RMMBuffer&) = delete;
200  RMMBuffer& operator=(RMMBuffer const&) = delete;
201  RMMBuffer(RMMBuffer&& o) = delete;
202  RMMBuffer& operator=(RMMBuffer&& o) = delete;
203 
218  explicit RMMBuffer(const size_t size);
219 
246  [[nodiscard]] std::unique_ptr<rmm::device_buffer> release();
247 
268  [[nodiscard]] virtual void* data();
269 };
270 #endif
271 
283 [[nodiscard]] std::shared_ptr<Buffer> allocateBuffer(BufferType bufferType, const size_t size);
284 
285 } // namespace ucxx
A simple object to simplify managing buffers.
Definition: buffer.h:38
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:40
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:41
virtual void * data()=0
Abstract method returning void pointer to buffer.
A simple object containing a host buffer.
Definition: buffer.h:104
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: buffer.h:12
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:24