diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/core/ITensorPack.cpp | 5 | ||||
-rw-r--r-- | src/runtime/gpu/cl/utils/ClAuxTensorHandler.h | 17 |
2 files changed, 21 insertions, 1 deletions
diff --git a/src/core/ITensorPack.cpp b/src/core/ITensorPack.cpp index 9eaeece271..90f9a45039 100644 --- a/src/core/ITensorPack.cpp +++ b/src/core/ITensorPack.cpp @@ -67,6 +67,11 @@ ITensor *ITensorPack::get_tensor(int id) return it != _pack.end() ? it->second.tensor : nullptr; } +void ITensorPack::remove_tensor(int id) +{ + _pack.erase(id); +} + size_t ITensorPack::size() const { return _pack.size(); diff --git a/src/runtime/gpu/cl/utils/ClAuxTensorHandler.h b/src/runtime/gpu/cl/utils/ClAuxTensorHandler.h index ad893acea5..152e3c6c04 100644 --- a/src/runtime/gpu/cl/utils/ClAuxTensorHandler.h +++ b/src/runtime/gpu/cl/utils/ClAuxTensorHandler.h @@ -50,6 +50,8 @@ public: if(pack_inject) { pack.add_tensor(slot_id, &_tensor); + _injected_tensor_pack = &pack; + _injected_slot_id = slot_id; } } else @@ -68,6 +70,17 @@ public: } } + CLAuxTensorHandler(const CLAuxTensorHandler &) = delete; + CLAuxTensorHandler &operator=(const CLAuxTensorHandler) = delete; + + ~CLAuxTensorHandler() + { + if(_injected_tensor_pack) + { + _injected_tensor_pack->remove_tensor(_injected_slot_id); + } + } + ICLTensor *get() { return &_tensor; @@ -79,7 +92,9 @@ public: } private: - CLTensor _tensor{}; + CLTensor _tensor{}; + ITensorPack *_injected_tensor_pack{ nullptr }; + int _injected_slot_id{ TensorType::ACL_UNKNOWN }; }; } // namespace opencl } // namespace arm_compute |