From f9aeef0e036df176699aa96d30d2ca8d7546534e Mon Sep 17 00:00:00 2001 From: Aron Virginas-Tar Date: Fri, 12 Oct 2018 15:18:03 +0100 Subject: IVGCVSW-2006: Move ACL memory manager source code under aclCommon Change-Id: Ie1c74a18de5c3dd1cd5285c222bd6327489c1508 --- .../aclCommon/memory/BaseMemoryManager.hpp | 104 +++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 src/backends/aclCommon/memory/BaseMemoryManager.hpp (limited to 'src/backends/aclCommon/memory/BaseMemoryManager.hpp') diff --git a/src/backends/aclCommon/memory/BaseMemoryManager.hpp b/src/backends/aclCommon/memory/BaseMemoryManager.hpp new file mode 100644 index 0000000000..2afc1cb130 --- /dev/null +++ b/src/backends/aclCommon/memory/BaseMemoryManager.hpp @@ -0,0 +1,104 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// +#pragma once + +#include + +#ifdef ARMCOMPUTENEON_ENABLED +#include +#endif + +#ifdef ARMCOMPUTECL_ENABLED +#include +#endif + +#if defined(ARMCOMPUTENEON_ENABLED) || defined(ARMCOMPUTECL_ENABLED) +#include +#include +#include +#endif + +namespace armnn +{ + +class BaseMemoryManager +{ +public: + enum class MemoryAffinity + { + Buffer, + Offset + }; + + BaseMemoryManager() { } + virtual ~BaseMemoryManager() { } + +#if defined(ARMCOMPUTENEON_ENABLED) || defined(ARMCOMPUTECL_ENABLED) + + BaseMemoryManager(std::unique_ptr alloc, MemoryAffinity memoryAffinity); + + std::shared_ptr& GetIntraLayerManager() { return m_IntraLayerMemoryMgr; } + std::shared_ptr& GetInterLayerManager() { return m_InterLayerMemoryMgr; } + std::shared_ptr& GetInterLayerMemoryGroup() { return m_InterLayerMemoryGroup; } + + void Finalize(); + void Acquire(); + void Release(); + +protected: + + std::unique_ptr m_Allocator; + std::shared_ptr m_IntraLayerMemoryMgr; + std::shared_ptr m_InterLayerMemoryMgr; + std::shared_ptr m_InterLayerMemoryGroup; + + std::shared_ptr CreateArmComputeMemoryManager(MemoryAffinity memoryAffinity); + + virtual std::shared_ptr + CreateMemoryGroup(const std::shared_ptr& memoryManager) = 0; + + void FinalizeMemoryManager(arm_compute::MemoryManagerOnDemand& memoryManager); +#endif +}; + +class NeonMemoryManager : public BaseMemoryManager +{ +public: + NeonMemoryManager() {} + virtual ~NeonMemoryManager() {} + +#ifdef ARMCOMPUTENEON_ENABLED + NeonMemoryManager(std::unique_ptr alloc, MemoryAffinity memoryAffinity) + : BaseMemoryManager(std::move(alloc), memoryAffinity) + { + m_InterLayerMemoryGroup = CreateMemoryGroup(m_InterLayerMemoryMgr); + } + +protected: + virtual std::shared_ptr + CreateMemoryGroup(const std::shared_ptr& memoryManager) override; +#endif +}; + +class ClMemoryManager : public BaseMemoryManager +{ +public: + ClMemoryManager() {} + virtual ~ClMemoryManager() {} + +#ifdef ARMCOMPUTECL_ENABLED + ClMemoryManager(std::unique_ptr alloc) + : BaseMemoryManager(std::move(alloc), MemoryAffinity::Buffer) + { + m_InterLayerMemoryGroup = CreateMemoryGroup(m_InterLayerMemoryMgr); + } + +protected: + virtual std::shared_ptr + CreateMemoryGroup(const std::shared_ptr& memoryManager) override; +#endif +}; + +} //namespace armnn -- cgit v1.2.1