diff options
author | Chunseok Lee <chunseok.lee@samsung.com> | 2020-04-23 14:45:49 +0900 |
---|---|---|
committer | Chunseok Lee <chunseok.lee@samsung.com> | 2020-04-23 14:45:49 +0900 |
commit | e2ef8438a24f7c56a0744eb579a6e293ee2fbf8e (patch) | |
tree | 44a1a7951d168dd4370e13593ed03f4bc6d920c5 /runtime/onert/backend/acl_common/AclMemoryManager.h | |
parent | 302e6564a7a76109e1178207e44e45a58631c477 (diff) | |
download | nnfw-e2ef8438a24f7c56a0744eb579a6e293ee2fbf8e.tar.gz nnfw-e2ef8438a24f7c56a0744eb579a6e293ee2fbf8e.tar.bz2 nnfw-e2ef8438a24f7c56a0744eb579a6e293ee2fbf8e.zip |
Imported Upstream version 1.4.0upstream/1.4.0submit/tizen/20200423.054851
Diffstat (limited to 'runtime/onert/backend/acl_common/AclMemoryManager.h')
-rw-r--r-- | runtime/onert/backend/acl_common/AclMemoryManager.h | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/runtime/onert/backend/acl_common/AclMemoryManager.h b/runtime/onert/backend/acl_common/AclMemoryManager.h new file mode 100644 index 000000000..eefcec130 --- /dev/null +++ b/runtime/onert/backend/acl_common/AclMemoryManager.h @@ -0,0 +1,98 @@ +/* + * Copyright (c) 2019 Samsung Electronics Co., Ltd. All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __ONERT_BACKEND_ACL_COMMON_MEMORY_MANAGER_H__ +#define __ONERT_BACKEND_ACL_COMMON_MEMORY_MANAGER_H__ + +#include <arm_compute/core/Types.h> +#include <arm_compute/runtime/IMemoryManager.h> +#include <cassert> + +#include "backend/IMemoryManager.h" +#include "ir/OperandIndexMap.h" +#include "Convert.h" +#include "util/logging.h" + +namespace onert +{ +namespace backend +{ +namespace acl_common +{ + +template <typename T_ITensor, typename T_Tensor, typename T_SubTensor> +class AclMemoryManager : public backend::IMemoryManager +{ +public: + AclMemoryManager() + { + // DO NOTHING + } + + virtual ~AclMemoryManager() = default; + + void allocate(void) override + { + for (const auto &tensor_entry : _tensors) + { + auto tensor = tensor_entry.second; + tensor->allocator()->allocate(); + } + } + + void deallocate(void) override + { + for (const auto &tensor_entry : _tensors) + { + auto tensor = tensor_entry.second; + tensor->allocator()->free(); + } + } + + virtual void startLifetime(const ir::OperandIndex &) { /* DO NOTHING */} + virtual void finishLifetime(const ir::OperandIndex &) { /* DO NOTHING */} + + void buildTensor(const ir::OperandIndex &ind, const ::arm_compute::TensorInfo &info, size_t rank, + size_t num_uses) + { + auto tensor = std::make_shared<T_Tensor>(info, rank, num_uses); + _tensors[ind] = tensor; + } + + void buildSubtensor(std::shared_ptr<T_ITensor> parent_tensor, const ir::OperandIndex &child_ind, + const ::arm_compute::TensorShape &shape, + const ::arm_compute::Coordinates &coordinates, size_t rank, + bool extent_parent) + { + auto subtensor = + std::make_shared<T_SubTensor>(parent_tensor.get(), shape, coordinates, rank, extent_parent); + _subtensors[child_ind] = subtensor; + } + + ir::OperandIndexMap<std::shared_ptr<T_Tensor>> &tensors(void) { return _tensors; } + + ir::OperandIndexMap<std::shared_ptr<T_SubTensor>> &subtensors(void) { return _subtensors; } + +private: + ir::OperandIndexMap<std::shared_ptr<T_Tensor>> _tensors; + ir::OperandIndexMap<std::shared_ptr<T_SubTensor>> _subtensors; +}; + +} // namespace acl_common +} // namespace backend +} // namespace onert + +#endif // __ONERT_BACKEND_ACL_COMMON_MEMORY_MANAGER_H__ |