29 : _managed_weights(), _managed_weights_parents()
37 _managed_weights[weights];
44 if(_managed_weights_parents.find(weights) == _managed_weights_parents.end())
46 _managed_weights_parents[weights] = parent;
56 auto item = _managed_weights.find(weights);
57 bool perform_run{
true };
58 ITensor *weights_tensor{
nullptr };
61 for(
auto it : item->second)
63 if(it->is_reshape_run() && (it->uid() == weights_transform->
uid()))
65 weights_tensor = it->get_weights();
73 weights_transform->
run();
78 auto parent_item = _managed_weights_parents.find(weights);
79 if(parent_item != _managed_weights_parents.end())
81 int32_t refcount = parent_item->second->decrease_refcount();
84 parent_item->second->release();
90 if(_managed_weights_parents.find(weights) == _managed_weights_parents.end())
92 auto item = _managed_weights.find(weights);
93 bool mark_as_unused =
true;
94 for(
auto it : item->second)
96 if(!it->is_reshape_run())
98 mark_as_unused =
false;
109 return weights_tensor;
114 return (_managed_weights.find(weights) != _managed_weights.end());
121 ITensor *transformed_weights{
nullptr };
122 auto item = _managed_weights.find(weights);
127 for(
auto it : item->second)
129 if(it->uid() == weights_transform->
uid())
131 transformed_weights = it->get_weights();
132 it->increase_refcount();
137 if(transformed_weights ==
nullptr)
139 transformed_weights = weights_transform->
get_weights();
141 item->second.emplace_back(weights_transform);
145 manage(transformed_weights, weights_transform);
147 return transformed_weights;
void manage(const ITensor *weights, ITransformWeights *parent=nullptr)
Start managing a weights tensor.
IWeightsManager()
Constructor.
Interface for Neon tensor.
Copyright (c) 2017-2021 Arm Limited.
void mark_as_unused() const
Marks a tensor as unused.
bool are_weights_managed(const ITensor *weights)
Check if the weights are managed.
#define ARM_COMPUTE_ERROR_ON_MSG(cond, msg)
ITensor * run(const ITensor *weights, ITransformWeights *weights_transform)
Run the reshape function.
ITensor * acquire(const ITensor *weights, ITransformWeights *weights_transform)
Acquire the requested reshape tensor of the selected weights.