buffer.h
1 
5 #pragma once
6 
7 #include <memory>
8 
9 #include <ucxx/log.h>
10 
11 namespace rmm {
12 // Forward declaration to prevent symbols from being added to symbol table unnecessarily.
13 class device_buffer;
14 } // namespace rmm
15 
16 namespace ucxx {
22 enum class BufferType {
23  Host = 0,
24  RMM,
25  CCCL,
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 
139  HostBuffer(const void* buffer, const size_t size);
140 
148 
174  [[nodiscard]] void* release();
175 
195  [[nodiscard]] void* data() override;
196 };
197 
198 #if UCXX_ENABLE_RMM
204 class RMMBuffer : public Buffer {
205  private:
206  std::unique_ptr<rmm::device_buffer> _buffer;
207 
208  public:
209  RMMBuffer() = delete;
210  RMMBuffer(const RMMBuffer&) = delete;
211  RMMBuffer& operator=(RMMBuffer const&) = delete;
212  RMMBuffer(RMMBuffer&& o) = delete;
213  RMMBuffer& operator=(RMMBuffer&& o) = delete;
214 
215  ~RMMBuffer() override;
216 
231  [[deprecated(
232  "RMMBuffer is deprecated and will be removed in a future release. Use CCCL buffers instead "
233  "(UCXX_ENABLE_CCCL).")]]
234  explicit RMMBuffer(const size_t size);
235 
241  [[deprecated(
242  "RMMBuffer is deprecated and will be removed in a future release. Use CCCL buffers instead "
243  "(UCXX_ENABLE_CCCL).")]]
244  explicit RMMBuffer(std::unique_ptr<rmm::device_buffer> rmm_buffer);
245 
272  [[nodiscard]] std::unique_ptr<rmm::device_buffer> release();
273 
294  [[nodiscard]] void* data() override;
295 };
296 #endif
297 
298 #if UCXX_ENABLE_CCCL
303 struct CCCLBufferImpl;
304 
310 class CCCLBuffer : public Buffer {
311  private:
312  std::unique_ptr<CCCLBufferImpl> _impl;
313 
314  public:
315  CCCLBuffer() = delete;
316  CCCLBuffer(const CCCLBuffer&) = delete;
317  CCCLBuffer& operator=(CCCLBuffer const&) = delete;
318  CCCLBuffer(CCCLBuffer&& o) = delete;
319  CCCLBuffer& operator=(CCCLBuffer&& o) = delete;
320 
321  ~CCCLBuffer() override;
322 
337  explicit CCCLBuffer(const size_t size);
338 
354  [[nodiscard]] void* data() override;
355 };
356 #endif
357 
369 [[nodiscard]] std::shared_ptr<Buffer> allocateBuffer(BufferType bufferType, const size_t size);
370 
371 } // 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.
HostBuffer(const void *buffer, const size_t size)
Construct a host buffer by deep copying the contents of another buffer.
HostBuffer(const size_t size)
Constructor of concrete type HostBuffer.
void * data() override
Get a pointer to the allocated raw host buffer.
Definition: buffer.h:11
Definition: address.h:16
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:22