36 _managed_weights[weights];
37 _managed_counter[weights];
41 _managed_counter[weights].counter++;
46 if (parent !=
nullptr)
48 if (_managed_weights_parents.find(weights) == _managed_weights_parents.end())
50 _managed_weights_parents[weights] = parent;
60 auto item = _managed_weights.find(weights);
61 bool perform_run{
true};
62 ITensor *weights_tensor{
nullptr};
65 for (
auto it : item->second)
67 if (it->is_reshape_run() && (it->uid() == weights_transform->
uid()))
69 weights_tensor = it->get_weights();
77 weights_transform->
run();
82 auto parent_item = _managed_weights_parents.find(weights);
83 if (parent_item != _managed_weights_parents.end())
85 int32_t refcount = parent_item->second->decrease_refcount();
88 parent_item->second->release();
94 if (_managed_weights_parents.find(weights) == _managed_weights_parents.end())
96 auto item = _managed_weights.find(weights);
97 bool mark_as_unused =
true;
98 for (
auto it : item->second)
100 if (!it->is_reshape_run())
102 mark_as_unused =
false;
113 return weights_tensor;
118 return (_managed_weights.find(weights) != _managed_weights.end());
125 ITensor *transformed_weights{
nullptr};
126 auto item = _managed_weights.find(weights);
131 for (
auto it : item->second)
133 if (it->uid() == weights_transform->
uid())
135 transformed_weights = it->get_weights();
136 it->increase_refcount();
141 if (transformed_weights ==
nullptr)
143 transformed_weights = weights_transform->
get_weights();
145 item->second.emplace_back(weights_transform);
149 manage(transformed_weights, weights_transform);
151 return transformed_weights;
161 _managed_counter[weights].counter--;
162 if (_managed_counter[weights].counter == 0 && _managed_counter[weights].is_unused)
175 _managed_counter[weights].is_unused =
true;