ReUseX  0.0.1
3D Point Cloud Processing for Building Reuse
Loading...
Searching...
No Matches
memory.hpp
Go to the documentation of this file.
1#pragma once
2#include <functional>
3#include <initializer_list>
4#include <memory>
5#include <string>
6#include <vector>
7
9
11 public:
12 BaseMemory() = default;
13 BaseMemory(void *cpu, size_t cpu_bytes, void *gpu, size_t gpu_bytes);
14 virtual ~BaseMemory();
15
16 virtual void *gpu_realloc(size_t bytes);
17 virtual void *cpu_realloc(size_t bytes);
18
21 void release();
22
23 // Status query
24 inline size_t cpu_bytes() const { return cpu_bytes_; }
25 inline size_t gpu_bytes() const { return gpu_bytes_; }
26
27 // Get raw pointer (for computation)
28 virtual inline void *get_gpu() const { return gpu_; }
29 virtual inline void *get_cpu() const { return cpu_; }
30
31 // Reference external memory (does not own)
32 void reference(void *cpu, size_t cpu_bytes, void *gpu, size_t gpu_bytes);
33
34 // [New]: Share memory of another Memory object (shared ownership)
35 void set_shared_memory(const BaseMemory &other);
36
37 protected:
38 // Raw pointer kept for fast access, but lifetime managed by shared_ptr
39 void *cpu_ = nullptr;
40 size_t cpu_bytes_ = 0;
41 size_t cpu_capacity_ = 0;
42
43 void *gpu_ = nullptr;
44 size_t gpu_bytes_ = 0;
45 size_t gpu_capacity_ = 0;
46
47 // Smart pointer manages lifetime
48 std::shared_ptr<void> cpu_ptr_ = nullptr;
49 std::shared_ptr<void> gpu_ptr_ = nullptr;
50};
51
52template <typename _DT> class Memory : public BaseMemory {
53 public:
54 Memory() = default;
55 Memory(const Memory &other) { this->set_shared_memory(other); }
56 Memory &operator=(const Memory &other) {
57 if (this != &other)
58 this->set_shared_memory(other);
59 return *this;
60 }
61
62 virtual _DT *gpu(size_t size) {
63 return (_DT *)BaseMemory::gpu_realloc(size * sizeof(_DT));
64 }
65 virtual _DT *cpu(size_t size) {
66 return (_DT *)BaseMemory::cpu_realloc(size * sizeof(_DT));
67 }
68
69 inline size_t cpu_size() const { return cpu_bytes_ / sizeof(_DT); }
70 inline size_t gpu_size() const { return gpu_bytes_ / sizeof(_DT); }
71
72 virtual inline _DT *gpu() const { return (_DT *)gpu_; }
73 virtual inline _DT *cpu() const { return (_DT *)cpu_; }
74};
75
76} // namespace ReUseX::vision::tensor_rt::tensor
virtual void * gpu_realloc(size_t bytes)
BaseMemory(void *cpu, size_t cpu_bytes, void *gpu, size_t gpu_bytes)
virtual void * cpu_realloc(size_t bytes)
void reference(void *cpu, size_t cpu_bytes, void *gpu, size_t gpu_bytes)
void set_shared_memory(const BaseMemory &other)
virtual _DT * cpu(size_t size)
Definition memory.hpp:65
virtual _DT * gpu(size_t size)
Definition memory.hpp:62
Memory & operator=(const Memory &other)
Definition memory.hpp:56