COMPMID-605: Transition buffer memory manager
Change-Id: Ide7c6124eb19f13f15f517e62d705646a0cd1ecd
Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/130184
Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com>
Tested-by: Jenkins <bsgcomp@arm.com>
Reviewed-by: Anthony Barbier <anthony.barbier@arm.com>
diff --git a/arm_compute/graph/backends/CL/CLDeviceBackend.h b/arm_compute/graph/backends/CL/CLDeviceBackend.h
index 5adbe0e..ab39d0f 100644
--- a/arm_compute/graph/backends/CL/CLDeviceBackend.h
+++ b/arm_compute/graph/backends/CL/CLDeviceBackend.h
@@ -55,6 +55,7 @@
void initialize_backend() override;
void setup_backend_context(GraphContext &ctx) override;
bool is_backend_supported() override;
+ IAllocator *backend_allocator() override;
std::unique_ptr<ITensorHandle> create_tensor(const Tensor &tensor) override;
std::unique_ptr<ITensorHandle> create_subtensor(ITensorHandle *parent, TensorShape shape, Coordinates coords, bool extend_parent) override;
std::unique_ptr<arm_compute::IFunction> configure_node(INode &node, GraphContext &ctx) override;
diff --git a/arm_compute/graph/backends/CL/CLSubTensorHandle.h b/arm_compute/graph/backends/CL/CLSubTensorHandle.h
index 4be5842..0c515a1 100644
--- a/arm_compute/graph/backends/CL/CLSubTensorHandle.h
+++ b/arm_compute/graph/backends/CL/CLSubTensorHandle.h
@@ -52,18 +52,27 @@
CLSubTensorHandle(CLSubTensorHandle &&) = default;
/** Allow instances of this class to be moved */
CLSubTensorHandle &operator=(CLSubTensorHandle &&) = default;
+ /** Prevent instances of this class from being copied (As this class contains pointers) */
+ CLSubTensorHandle(const CLSubTensorHandle &) = delete;
+ /** Prevent instances of this class from being copied (As this class contains pointers) */
+ CLSubTensorHandle &operator=(const CLSubTensorHandle &) = delete;
// Inherited overridden methods
- void allocate() override;
+ void allocate() override;
+ void free() override;
+ void manage(IMemoryGroup *mg) override;
+ void map(bool blocking) override;
+ void unmap() override;
+ void release_if_unused() override;
arm_compute::ITensor &tensor() override;
const arm_compute::ITensor &tensor() const override;
- void map(bool blocking) override;
- void unmap() override;
- void release_if_unused() override;
- bool is_subtensor() const override;
+ ITensorHandle *parent_handle() override;
+ bool is_subtensor() const override;
+ Target target() const override;
private:
- arm_compute::CLSubTensor _sub_tensor; /**< Backend Sub-Tensor */
+ arm_compute::CLSubTensor _sub_tensor; /**< Backend Sub-Tensor */
+ ITensorHandle *_parent_handle; /**< Parent handle */
};
} // namespace backends
} // namespace graph
diff --git a/arm_compute/graph/backends/CL/CLTensorHandle.h b/arm_compute/graph/backends/CL/CLTensorHandle.h
index 8f5a70c..2399732 100644
--- a/arm_compute/graph/backends/CL/CLTensorHandle.h
+++ b/arm_compute/graph/backends/CL/CLTensorHandle.h
@@ -51,13 +51,17 @@
CLTensorHandle &operator=(CLTensorHandle &&) = default;
// Inherited overridden methods
- void allocate() override;
+ void allocate() override;
+ void free() override;
+ void manage(IMemoryGroup *mg) override;
+ void map(bool blocking) override;
+ void unmap() override;
+ void release_if_unused() override;
arm_compute::ITensor &tensor() override;
const arm_compute::ITensor &tensor() const override;
- void map(bool blocking) override;
- void unmap() override;
- void release_if_unused() override;
- bool is_subtensor() const override;
+ ITensorHandle *parent_handle() override;
+ bool is_subtensor() const override;
+ Target target() const override;
private:
arm_compute::CLTensor _tensor; /**< Backend Tensor */
diff --git a/arm_compute/graph/backends/GLES/GCDeviceBackend.h b/arm_compute/graph/backends/GLES/GCDeviceBackend.h
index be81a8f..dc0e2b0 100644
--- a/arm_compute/graph/backends/GLES/GCDeviceBackend.h
+++ b/arm_compute/graph/backends/GLES/GCDeviceBackend.h
@@ -45,6 +45,7 @@
void initialize_backend() override;
void setup_backend_context(GraphContext &ctx) override;
bool is_backend_supported() override;
+ IAllocator *backend_allocator() override;
std::unique_ptr<ITensorHandle> create_tensor(const Tensor &tensor) override;
std::unique_ptr<ITensorHandle> create_subtensor(ITensorHandle *parent, TensorShape shape, Coordinates coords, bool extend_parent) override;
std::unique_ptr<arm_compute::IFunction> configure_node(INode &node, GraphContext &ctx) override;
diff --git a/arm_compute/graph/backends/GLES/GCTensorHandle.h b/arm_compute/graph/backends/GLES/GCTensorHandle.h
index 774268f..29b0319 100644
--- a/arm_compute/graph/backends/GLES/GCTensorHandle.h
+++ b/arm_compute/graph/backends/GLES/GCTensorHandle.h
@@ -51,13 +51,17 @@
GCTensorHandle &operator=(GCTensorHandle &&) = default;
// Inherited overridden methods
- void allocate() override;
+ void allocate() override;
+ void free() override;
+ void manage(IMemoryGroup *mg) override;
+ void map(bool blocking) override;
+ void unmap() override;
+ void release_if_unused() override;
arm_compute::ITensor &tensor() override;
const arm_compute::ITensor &tensor() const override;
- void map(bool blocking) override;
- void unmap() override;
- void release_if_unused() override;
- bool is_subtensor() const override;
+ ITensorHandle *parent_handle() override;
+ bool is_subtensor() const override;
+ Target target() const override;
private:
arm_compute::GCTensor _tensor; /**< Backend Tensor */
diff --git a/arm_compute/graph/backends/NEON/NEDeviceBackend.h b/arm_compute/graph/backends/NEON/NEDeviceBackend.h
index b23c83a..c1e2e0c 100644
--- a/arm_compute/graph/backends/NEON/NEDeviceBackend.h
+++ b/arm_compute/graph/backends/NEON/NEDeviceBackend.h
@@ -44,6 +44,7 @@
void initialize_backend() override;
void setup_backend_context(GraphContext &ctx) override;
bool is_backend_supported() override;
+ IAllocator *backend_allocator() override;
std::unique_ptr<ITensorHandle> create_tensor(const Tensor &tensor) override;
std::unique_ptr<ITensorHandle> create_subtensor(ITensorHandle *parent, TensorShape shape, Coordinates coords, bool extend_parent) override;
std::unique_ptr<arm_compute::IFunction> configure_node(INode &node, GraphContext &ctx) override;
diff --git a/arm_compute/graph/backends/NEON/NESubTensorHandle.h b/arm_compute/graph/backends/NEON/NESubTensorHandle.h
index 11dcec6..101d3e6 100644
--- a/arm_compute/graph/backends/NEON/NESubTensorHandle.h
+++ b/arm_compute/graph/backends/NEON/NESubTensorHandle.h
@@ -52,18 +52,27 @@
NESubTensorHandle(NESubTensorHandle &&) = default;
/** Allow instances of this class to be moved */
NESubTensorHandle &operator=(NESubTensorHandle &&) = default;
+ /** Prevent instances of this class from being copied (As this class contains pointers) */
+ NESubTensorHandle(const NESubTensorHandle &) = delete;
+ /** Prevent instances of this class from being copied (As this class contains pointers) */
+ NESubTensorHandle &operator=(const NESubTensorHandle &) = delete;
// Inherited overridden methods
- void allocate() override;
+ void allocate() override;
+ void free() override;
+ void manage(IMemoryGroup *mg) override;
+ void map(bool blocking) override;
+ void unmap() override;
+ void release_if_unused() override;
arm_compute::ITensor &tensor() override;
const arm_compute::ITensor &tensor() const override;
- void map(bool blocking) override;
- void unmap() override;
- void release_if_unused() override;
- bool is_subtensor() const override;
+ ITensorHandle *parent_handle() override;
+ bool is_subtensor() const override;
+ Target target() const override;
private:
- arm_compute::SubTensor _sub_tensor; /**< Backend Sub-Tensor */
+ arm_compute::SubTensor _sub_tensor; /**< Backend Sub-Tensor */
+ ITensorHandle *_parent_handle; /**< Parent handle */
};
} // namespace backends
} // namespace graph
diff --git a/arm_compute/graph/backends/NEON/NETensorHandle.h b/arm_compute/graph/backends/NEON/NETensorHandle.h
index 06ccdd8..150e0c9 100644
--- a/arm_compute/graph/backends/NEON/NETensorHandle.h
+++ b/arm_compute/graph/backends/NEON/NETensorHandle.h
@@ -51,13 +51,17 @@
NETensorHandle &operator=(NETensorHandle &&) = default;
// Inherited overridden methods
- void allocate() override;
+ void allocate() override;
+ void free() override;
+ void manage(IMemoryGroup *mg) override;
+ void map(bool blocking) override;
+ void unmap() override;
+ void release_if_unused() override;
arm_compute::ITensor &tensor() override;
const arm_compute::ITensor &tensor() const override;
- void map(bool blocking) override;
- void unmap() override;
- void release_if_unused() override;
- bool is_subtensor() const override;
+ ITensorHandle *parent_handle() override;
+ bool is_subtensor() const override;
+ Target target() const override;
private:
arm_compute::Tensor _tensor; /**< Backend Tensor */
diff --git a/arm_compute/graph/backends/Utils.h b/arm_compute/graph/backends/Utils.h
index b902d17..c7a50d9 100644
--- a/arm_compute/graph/backends/Utils.h
+++ b/arm_compute/graph/backends/Utils.h
@@ -88,7 +88,7 @@
inline std::shared_ptr<IMemoryManager> get_memory_manager(GraphContext &ctx, Target target)
{
bool enabled = ctx.config().use_function_memory_manager && (ctx.memory_management_ctx(target) != nullptr);
- return enabled ? ctx.memory_management_ctx(target)->mm : nullptr;
+ return enabled ? ctx.memory_management_ctx(target)->intra_mm : nullptr;
}
} // namespace backends
} // namespace graph