aboutsummaryrefslogtreecommitdiff
path: root/arm_compute
diff options
context:
space:
mode:
Diffstat (limited to 'arm_compute')
-rw-r--r--arm_compute/core/ITensor.h2
-rw-r--r--arm_compute/runtime/IWeightsManager.h20
2 files changed, 21 insertions, 1 deletions
diff --git a/arm_compute/core/ITensor.h b/arm_compute/core/ITensor.h
index 131ee205ea..32b93576bd 100644
--- a/arm_compute/core/ITensor.h
+++ b/arm_compute/core/ITensor.h
@@ -90,6 +90,8 @@ public:
bool is_used() const;
/** Marks a tensor as unused */
void mark_as_unused() const;
+ /** Marks a tensor as used */
+ void mark_as_used() const;
private:
mutable bool _is_used = { true }; /**< Flag that marks if the tensor is used or not */
diff --git a/arm_compute/runtime/IWeightsManager.h b/arm_compute/runtime/IWeightsManager.h
index 12aa1da8a7..db39a71314 100644
--- a/arm_compute/runtime/IWeightsManager.h
+++ b/arm_compute/runtime/IWeightsManager.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 Arm Limited.
+ * Copyright (c) 2019, 2021 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
@@ -76,9 +76,27 @@ public:
* @return True if the weights tensor is managed else false
*/
bool are_weights_managed(const ITensor *weights);
+ /** Release weights refcount and mark as unused if reaches 0
+ *
+ * @param[in] weights Weights to release
+ */
+ void release(const ITensor *weights);
+ /** Marks weights as unused
+ *
+ * @param weights Weights to mark unused
+ */
+ void mark_as_unused(const ITensor *weights);
+
+private:
+ struct CounterElement
+ {
+ bool is_unused{ false };
+ std::atomic<int> counter{ 1 };
+ };
private:
std::map<const ITensor *, std::vector<ITransformWeights *>> _managed_weights;
+ std::map<const ITensor *, CounterElement> _managed_counter;
std::map<const ITensor *, ITransformWeights *> _managed_weights_parents;
};
} // arm_compute