diff options
Diffstat (limited to 'src/backends/cl/ClTensorHandle.cpp')
-rw-r--r-- | src/backends/cl/ClTensorHandle.cpp | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/src/backends/cl/ClTensorHandle.cpp b/src/backends/cl/ClTensorHandle.cpp new file mode 100644 index 0000000000..ccc8f6effc --- /dev/null +++ b/src/backends/cl/ClTensorHandle.cpp @@ -0,0 +1,82 @@ +// +// Copyright © 2023 Arm Ltd and Contributors. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "ClTensorHandle.hpp" + +#include <aclCommon/ArmComputeTensorUtils.hpp> + +namespace armnn +{ + std::shared_ptr<ITensorHandle> ClTensorHandle::DecorateTensorHandle(const TensorInfo& tensorInfo) + { + auto* parent = const_cast<ClTensorHandle*>(this); + auto decorated = std::make_shared<ClTensorHandleDecorator>(parent, tensorInfo); + m_Decorated.emplace_back(decorated); + return decorated; + } + + ClTensorDecorator::ClTensorDecorator() + : m_Original(nullptr), m_TensorInfo() + { + } + + ClTensorDecorator::ClTensorDecorator(arm_compute::ICLTensor* original, const TensorInfo& tensorInfo) + : m_Original(nullptr), m_TensorInfo() + { + m_TensorInfo = armcomputetensorutils::BuildArmComputeTensorInfo(tensorInfo); + m_Original = original; + } + + arm_compute::ITensorInfo* ClTensorDecorator::info() const + { + return &m_TensorInfo; + } + + arm_compute::ITensorInfo* ClTensorDecorator::info() + { + return &m_TensorInfo; + } + + const cl::Buffer& ClTensorDecorator::cl_buffer() const + { + ARM_COMPUTE_ERROR_ON(m_Original == nullptr); + return m_Original->cl_buffer(); + } + + arm_compute::ICLTensor* ClTensorDecorator::parent() + { + return nullptr; + } + + arm_compute::CLQuantization ClTensorDecorator::quantization() const + { + return m_Original->quantization(); + } + + void ClTensorDecorator::map(bool blocking) + { + arm_compute::ICLTensor::map(arm_compute::CLScheduler::get().queue(), blocking); + } + + void ClTensorDecorator::unmap() + { + arm_compute::ICLTensor::unmap(arm_compute::CLScheduler::get().queue()); + } + + uint8_t* ClTensorDecorator::do_map(cl::CommandQueue& q, bool blocking) + { + if(m_Original->buffer() == nullptr) + { + m_Original->map(q, blocking); + } + return m_Original->buffer(); + } + + void ClTensorDecorator::do_unmap(cl::CommandQueue& q) + { + m_Original->unmap(q); + } + +}
\ No newline at end of file |