From e88167264991b8debe56f095abbc262f7266c5d4 Mon Sep 17 00:00:00 2001 From: Teresa Charlin Date: Wed, 5 Aug 2020 17:43:54 +0100 Subject: IVGCVSW-5013 Add TensorHandleFactory to Sample Dynamic Tensor Signed-off-by: Teresa Charlin Change-Id: I9f8367ebb59a73570a1a2de68aaadba98abef11c --- src/dynamic/sample/CMakeLists.txt | 4 +- src/dynamic/sample/SampleDynamicBackend.cpp | 17 +++- .../sample/SampleDynamicTensorHandleFactory.cpp | 91 ++++++++++++++++++++++ .../sample/SampleDynamicTensorHandleFactory.hpp | 60 ++++++++++++++ 4 files changed, 168 insertions(+), 4 deletions(-) create mode 100644 src/dynamic/sample/SampleDynamicTensorHandleFactory.cpp create mode 100644 src/dynamic/sample/SampleDynamicTensorHandleFactory.hpp diff --git a/src/dynamic/sample/CMakeLists.txt b/src/dynamic/sample/CMakeLists.txt index a013771f46..0a32bf9b63 100644 --- a/src/dynamic/sample/CMakeLists.txt +++ b/src/dynamic/sample/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright © 2020 Arm Ltd. All rights reserved. +# Copyright © 2020 Arm Ltd and Contributors. All rights reserved. # SPDX-License-Identifier: MIT # @@ -26,6 +26,8 @@ list(APPEND armnnSampleDynamicBackend_sources SampleMemoryManager.hpp SampleTensorHandle.cpp SampleTensorHandle.hpp + SampleDynamicTensorHandleFactory.cpp + SampleDynamicTensorHandleFactory.hpp ) add_library(Arm_SampleDynamic_backend MODULE ${armnnSampleDynamicBackend_sources}) diff --git a/src/dynamic/sample/SampleDynamicBackend.cpp b/src/dynamic/sample/SampleDynamicBackend.cpp index 19aaaaebd4..2ef8faa627 100644 --- a/src/dynamic/sample/SampleDynamicBackend.cpp +++ b/src/dynamic/sample/SampleDynamicBackend.cpp @@ -1,5 +1,5 @@ // -// Copyright © 2020 Arm Ltd. All rights reserved. +// Copyright © 2020 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // @@ -7,6 +7,7 @@ #include "SampleDynamicLayerSupport.hpp" #include "SampleDynamicWorkloadFactory.hpp" #include "SampleMemoryManager.hpp" +#include "SampleDynamicTensorHandleFactory.hpp" #include #include @@ -38,7 +39,8 @@ public: IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory( const IMemoryManagerSharedPtr& memoryManager) const override { - return std::make_unique(); + return std::make_unique( + PolymorphicPointerDowncast(memoryManager)); } IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory( @@ -61,7 +63,7 @@ public: std::vector GetHandleFactoryPreferences() const override { - return std::vector(); + return std::vector { SampleDynamicTensorHandleFactory::GetIdStatic() }; } IBackendInternal::IBackendContextPtr CreateBackendContext(const IRuntime::CreationOptions&) const override @@ -77,6 +79,15 @@ public: return optimizationViews; } + + void RegisterTensorHandleFactories(class TensorHandleFactoryRegistry& registry) const override + { + auto memoryManager = std::make_shared(); + + registry.RegisterMemoryManager(memoryManager); + registry.RegisterFactory(std::make_unique(memoryManager)); + } + }; } // namespace armnn diff --git a/src/dynamic/sample/SampleDynamicTensorHandleFactory.cpp b/src/dynamic/sample/SampleDynamicTensorHandleFactory.cpp new file mode 100644 index 0000000000..0852bed720 --- /dev/null +++ b/src/dynamic/sample/SampleDynamicTensorHandleFactory.cpp @@ -0,0 +1,91 @@ +// +// Copyright © 2020 Arm Ltd and Contributors. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "SampleDynamicTensorHandleFactory.hpp" +#include "SampleTensorHandle.hpp" + +#include + +namespace armnn +{ + +using FactoryId = ITensorHandleFactory::FactoryId; + +const FactoryId& SampleDynamicTensorHandleFactory::GetIdStatic() +{ + static const FactoryId s_Id(SampleDynamicTensorHandleFactoryId()); + return s_Id; +} + +std::unique_ptr +SampleDynamicTensorHandleFactory::CreateSubTensorHandle(ITensorHandle& parent, + TensorShape const& subTensorShape, + unsigned int const* subTensorOrigin) const +{ + IgnoreUnused(parent, subTensorShape, subTensorOrigin); + return nullptr; +} + +std::unique_ptr SampleDynamicTensorHandleFactory::CreateTensorHandle(const TensorInfo& tensorInfo) const +{ + return std::make_unique(tensorInfo, m_MemoryManager); +} + +std::unique_ptr SampleDynamicTensorHandleFactory::CreateTensorHandle(const TensorInfo& tensorInfo, + DataLayout dataLayout) const +{ + IgnoreUnused(dataLayout); + return std::make_unique(tensorInfo, m_MemoryManager); +} + +std::unique_ptr SampleDynamicTensorHandleFactory::CreateTensorHandle(const TensorInfo& tensorInfo, + const bool IsMemoryManaged) const +{ + if (IsMemoryManaged) + { + return std::make_unique(tensorInfo, m_MemoryManager); + } + else + { + return std::make_unique(tensorInfo, m_ImportFlags); + } +} + +std::unique_ptr SampleDynamicTensorHandleFactory::CreateTensorHandle(const TensorInfo& tensorInfo, + DataLayout dataLayout, + const bool IsMemoryManaged) const +{ + IgnoreUnused(dataLayout); + if (IsMemoryManaged) + { + return std::make_unique(tensorInfo, m_MemoryManager); + } + else + { + return std::make_unique(tensorInfo, m_ImportFlags); + } +} + +const FactoryId& SampleDynamicTensorHandleFactory::GetId() const +{ + return GetIdStatic(); +} + +bool SampleDynamicTensorHandleFactory::SupportsSubTensors() const +{ + return false; +} + +MemorySourceFlags SampleDynamicTensorHandleFactory::GetExportFlags() const +{ + return m_ExportFlags; +} + +MemorySourceFlags SampleDynamicTensorHandleFactory::GetImportFlags() const +{ + return m_ImportFlags; +} + +} // namespace armnn \ No newline at end of file diff --git a/src/dynamic/sample/SampleDynamicTensorHandleFactory.hpp b/src/dynamic/sample/SampleDynamicTensorHandleFactory.hpp new file mode 100644 index 0000000000..5f5e880b88 --- /dev/null +++ b/src/dynamic/sample/SampleDynamicTensorHandleFactory.hpp @@ -0,0 +1,60 @@ +// +// Copyright © 2020 Arm Ltd and Contributors. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#pragma once + +#include "SampleMemoryManager.hpp" + +#include + +namespace armnn +{ + +constexpr const char * SampleDynamicTensorHandleFactoryId() { return "Arm/SampleDynamic/TensorHandleFactory"; } + +class SampleDynamicTensorHandleFactory : public ITensorHandleFactory +{ + +public: + SampleDynamicTensorHandleFactory(std::shared_ptr mgr) + : m_MemoryManager(mgr), + m_ImportFlags(static_cast(MemorySource::Malloc)), + m_ExportFlags(static_cast(MemorySource::Malloc)) + {} + + std::unique_ptr CreateSubTensorHandle(ITensorHandle& parent, + TensorShape const& subTensorShape, + unsigned int const* subTensorOrigin) const override; + + std::unique_ptr CreateTensorHandle(const TensorInfo& tensorInfo) const override; + + std::unique_ptr CreateTensorHandle(const TensorInfo& tensorInfo, + DataLayout dataLayout) const override; + + std::unique_ptr CreateTensorHandle(const TensorInfo& tensorInfo, + const bool IsMemoryManaged) const override; + + std::unique_ptr CreateTensorHandle(const TensorInfo& tensorInfo, + DataLayout dataLayout, + const bool IsMemoryManaged) const override; + + static const FactoryId& GetIdStatic(); + + const FactoryId& GetId() const override; + + bool SupportsSubTensors() const override; + + MemorySourceFlags GetExportFlags() const override; + + MemorySourceFlags GetImportFlags() const override; + +private: + mutable std::shared_ptr m_MemoryManager; + MemorySourceFlags m_ImportFlags; + MemorySourceFlags m_ExportFlags; +}; + +} // namespace armnn + -- cgit v1.2.1