ReUseX
0.0.5
3D Point Cloud Processing for Building Reuse
Toggle main menu visibility
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
8
namespace
reusex::vision::tensor_rt::tensor
{
9
10
class
BaseMemory
{
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
19
void
release_gpu
();
20
void
release_cpu
();
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
52
template
<
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
reusex::vision::tensor_rt::tensor::BaseMemory::set_shared_memory
void set_shared_memory(const BaseMemory &other)
reusex::vision::tensor_rt::tensor::BaseMemory::gpu_bytes
size_t gpu_bytes() const
Definition
memory.hpp:25
reusex::vision::tensor_rt::tensor::BaseMemory::gpu_
void * gpu_
Definition
memory.hpp:43
reusex::vision::tensor_rt::tensor::BaseMemory::cpu_realloc
virtual void * cpu_realloc(size_t bytes)
reusex::vision::tensor_rt::tensor::BaseMemory::get_cpu
virtual void * get_cpu() const
Definition
memory.hpp:29
reusex::vision::tensor_rt::tensor::BaseMemory::get_gpu
virtual void * get_gpu() const
Definition
memory.hpp:28
reusex::vision::tensor_rt::tensor::BaseMemory::cpu_bytes
size_t cpu_bytes() const
Definition
memory.hpp:24
reusex::vision::tensor_rt::tensor::BaseMemory::release
void release()
reusex::vision::tensor_rt::tensor::BaseMemory::cpu_capacity_
size_t cpu_capacity_
Definition
memory.hpp:41
reusex::vision::tensor_rt::tensor::BaseMemory::~BaseMemory
virtual ~BaseMemory()
reusex::vision::tensor_rt::tensor::BaseMemory::gpu_ptr_
std::shared_ptr< void > gpu_ptr_
Definition
memory.hpp:49
reusex::vision::tensor_rt::tensor::BaseMemory::gpu_capacity_
size_t gpu_capacity_
Definition
memory.hpp:45
reusex::vision::tensor_rt::tensor::BaseMemory::reference
void reference(void *cpu, size_t cpu_bytes, void *gpu, size_t gpu_bytes)
reusex::vision::tensor_rt::tensor::BaseMemory::gpu_bytes_
size_t gpu_bytes_
Definition
memory.hpp:44
reusex::vision::tensor_rt::tensor::BaseMemory::BaseMemory
BaseMemory(void *cpu, size_t cpu_bytes, void *gpu, size_t gpu_bytes)
reusex::vision::tensor_rt::tensor::BaseMemory::cpu_
void * cpu_
Definition
memory.hpp:39
reusex::vision::tensor_rt::tensor::BaseMemory::release_gpu
void release_gpu()
reusex::vision::tensor_rt::tensor::BaseMemory::cpu_ptr_
std::shared_ptr< void > cpu_ptr_
Definition
memory.hpp:48
reusex::vision::tensor_rt::tensor::BaseMemory::BaseMemory
BaseMemory()=default
reusex::vision::tensor_rt::tensor::BaseMemory::cpu_bytes_
size_t cpu_bytes_
Definition
memory.hpp:40
reusex::vision::tensor_rt::tensor::BaseMemory::gpu_realloc
virtual void * gpu_realloc(size_t bytes)
reusex::vision::tensor_rt::tensor::BaseMemory::release_cpu
void release_cpu()
reusex::vision::tensor_rt::tensor::Memory::gpu_size
size_t gpu_size() const
Definition
memory.hpp:70
reusex::vision::tensor_rt::tensor::Memory::Memory
Memory()=default
reusex::vision::tensor_rt::tensor::Memory::cpu
virtual _DT * cpu(size_t size)
Definition
memory.hpp:65
reusex::vision::tensor_rt::tensor::Memory::cpu
virtual _DT * cpu() const
Definition
memory.hpp:73
reusex::vision::tensor_rt::tensor::Memory::gpu
virtual _DT * gpu(size_t size)
Definition
memory.hpp:62
reusex::vision::tensor_rt::tensor::Memory::gpu
virtual _DT * gpu() const
Definition
memory.hpp:72
reusex::vision::tensor_rt::tensor::Memory::Memory
Memory(const Memory &other)
Definition
memory.hpp:55
reusex::vision::tensor_rt::tensor::Memory::operator=
Memory & operator=(const Memory &other)
Definition
memory.hpp:56
reusex::vision::tensor_rt::tensor::Memory::cpu_size
size_t cpu_size() const
Definition
memory.hpp:69
reusex::vision::tensor_rt::tensor
Definition
memory.hpp:8
libs
reusex
include
vision
tensor_rt
common
memory.hpp
Generated by
1.17.0