29 : _managed_weights(), _managed_counter(), _managed_weights_parents()
37 _managed_weights[weights];
38 _managed_counter[weights];
42 _managed_counter[weights].counter++;
49 if(_managed_weights_parents.find(weights) == _managed_weights_parents.end())
51 _managed_weights_parents[weights] = parent;
61 auto item = _managed_weights.find(weights);
62 bool perform_run{
true };
63 ITensor *weights_tensor{
nullptr };
66 for(
auto it : item->second)
68 if(it->is_reshape_run() && (it->uid() == weights_transform->
uid()))
70 weights_tensor = it->get_weights();
78 weights_transform->
run();
83 auto parent_item = _managed_weights_parents.find(weights);
84 if(parent_item != _managed_weights_parents.end())
86 int32_t refcount = parent_item->second->decrease_refcount();
89 parent_item->second->release();
95 if(_managed_weights_parents.find(weights) == _managed_weights_parents.end())
97 auto item = _managed_weights.find(weights);
98 bool mark_as_unused =
true;
99 for(
auto it : item->second)
101 if(!it->is_reshape_run())
103 mark_as_unused =
false;
114 return weights_tensor;
119 return (_managed_weights.find(weights) != _managed_weights.end());
126 ITensor *transformed_weights{
nullptr };
127 auto item = _managed_weights.find(weights);
132 for(
auto it : item->second)
134 if(it->uid() == weights_transform->
uid())
136 transformed_weights = it->get_weights();
137 it->increase_refcount();
142 if(transformed_weights ==
nullptr)
144 transformed_weights = weights_transform->
get_weights();
146 item->second.emplace_back(weights_transform);
150 manage(transformed_weights, weights_transform);
152 return transformed_weights;
162 _managed_counter[weights].counter--;
163 if(_managed_counter[weights].counter == 0 && _managed_counter[weights].is_unused)
176 _managed_counter[weights].is_unused =
true;