aboutsummaryrefslogtreecommitdiff
path: root/arm_compute/graph2
diff options
context:
space:
mode:
Diffstat (limited to 'arm_compute/graph2')
-rw-r--r--arm_compute/graph2/ITensorHandle.h21
-rw-r--r--arm_compute/graph2/backends/CL/CLSubTensorHandle.h1
-rw-r--r--arm_compute/graph2/backends/CL/CLTensorHandle.h1
-rw-r--r--arm_compute/graph2/backends/GLES/GCTensorHandle.h1
-rw-r--r--arm_compute/graph2/backends/NEON/NESubTensorHandle.h1
-rw-r--r--arm_compute/graph2/backends/NEON/NETensorHandle.h1
-rw-r--r--arm_compute/graph2/detail/ExecutionHelpers.h5
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