diff options
Diffstat (limited to 'arm_compute/graph2')
-rw-r--r-- | arm_compute/graph2/ITensorHandle.h | 21 | ||||
-rw-r--r-- | arm_compute/graph2/backends/CL/CLSubTensorHandle.h | 1 | ||||
-rw-r--r-- | arm_compute/graph2/backends/CL/CLTensorHandle.h | 1 | ||||
-rw-r--r-- | arm_compute/graph2/backends/GLES/GCTensorHandle.h | 1 | ||||
-rw-r--r-- | arm_compute/graph2/backends/NEON/NESubTensorHandle.h | 1 | ||||
-rw-r--r-- | arm_compute/graph2/backends/NEON/NETensorHandle.h | 1 | ||||
-rw-r--r-- | arm_compute/graph2/detail/ExecutionHelpers.h | 5 |
7 files changed, 25 insertions, 6 deletions
diff --git a/arm_compute/graph2/ITensorHandle.h b/arm_compute/graph2/ITensorHandle.h index 68f79d8b01..c92a213121 100644 --- a/arm_compute/graph2/ITensorHandle.h +++ b/arm_compute/graph2/ITensorHandle.h @@ -30,25 +30,34 @@ namespace arm_compute { namespace graph2 { -/** Tensor handle interface object **/ +/** Tensor handle interface object */ class ITensorHandle { public: - /** Default virtual destructor **/ + /** Default virtual destructor */ virtual ~ITensorHandle() = default; - /** Allocates backend memory for the handle **/ + /** Allocates backend memory for the handle */ virtual void allocate() = 0; - /** Backend tensor object accessor **/ + /** Backend tensor object accessor */ virtual arm_compute::ITensor &tensor() = 0; - /** Backend tensor object const accessor **/ + /** Backend tensor object const accessor */ virtual const arm_compute::ITensor &tensor() const = 0; /** Maps backend tensor object * * @param[in] blocking Flags if the mapping operations should be blocking */ virtual void map(bool blocking) = 0; - /** Un-maps a backend tensor object **/ + /** Un-maps a backend tensor object */ virtual void unmap() = 0; + /** Releases backend tensor if is marked as unused + * + * + * @note This has no effect on sub-tensors + * @warning Parent tensors don't keep track of sub-tensors, + * thus if a parent is set as unused then all sub-tensors will be invalidated, + * on the other hand if a sub-tensor is marked as unused then the parent tensor won't be released + */ + virtual void release_if_unused() = 0; /** Checks if a backing tensor is a sub-tensor object or not * * @return True if the backend tensor is a sub-tensor else false diff --git a/arm_compute/graph2/backends/CL/CLSubTensorHandle.h b/arm_compute/graph2/backends/CL/CLSubTensorHandle.h index 9910980e59..6f3c00c041 100644 --- a/arm_compute/graph2/backends/CL/CLSubTensorHandle.h +++ b/arm_compute/graph2/backends/CL/CLSubTensorHandle.h @@ -59,6 +59,7 @@ public: 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; private: diff --git a/arm_compute/graph2/backends/CL/CLTensorHandle.h b/arm_compute/graph2/backends/CL/CLTensorHandle.h index 37d7147b6b..0b20d1d8fc 100644 --- a/arm_compute/graph2/backends/CL/CLTensorHandle.h +++ b/arm_compute/graph2/backends/CL/CLTensorHandle.h @@ -56,6 +56,7 @@ public: 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; private: diff --git a/arm_compute/graph2/backends/GLES/GCTensorHandle.h b/arm_compute/graph2/backends/GLES/GCTensorHandle.h index 8ead236614..281adee428 100644 --- a/arm_compute/graph2/backends/GLES/GCTensorHandle.h +++ b/arm_compute/graph2/backends/GLES/GCTensorHandle.h @@ -56,6 +56,7 @@ public: 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; private: diff --git a/arm_compute/graph2/backends/NEON/NESubTensorHandle.h b/arm_compute/graph2/backends/NEON/NESubTensorHandle.h index eacdfe0fb4..d62b66f343 100644 --- a/arm_compute/graph2/backends/NEON/NESubTensorHandle.h +++ b/arm_compute/graph2/backends/NEON/NESubTensorHandle.h @@ -59,6 +59,7 @@ public: 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; private: diff --git a/arm_compute/graph2/backends/NEON/NETensorHandle.h b/arm_compute/graph2/backends/NEON/NETensorHandle.h index c22fcdf216..23fd7ccc69 100644 --- a/arm_compute/graph2/backends/NEON/NETensorHandle.h +++ b/arm_compute/graph2/backends/NEON/NETensorHandle.h @@ -56,6 +56,7 @@ public: 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; private: diff --git a/arm_compute/graph2/detail/ExecutionHelpers.h b/arm_compute/graph2/detail/ExecutionHelpers.h index e4523ecf47..bc3cfd5d72 100644 --- a/arm_compute/graph2/detail/ExecutionHelpers.h +++ b/arm_compute/graph2/detail/ExecutionHelpers.h @@ -63,6 +63,11 @@ void validate_all_nodes(Graph &g); * @return The execution workload */ ExecutionWorkload configure_all_nodes(Graph &g, GraphContext &ctx); +/** Release the memory of all unused const nodes + * + * @param[in] g Graph to release the memory from + */ +void release_unused_tensors(Graph &g); /** Calls accessor of a given tensor * * @param[in] tensor The tensor of which the accessor should be called |