// // Copyright © 2017 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #pragma once #include #include #if defined(ARMCOMPUTENEON_ENABLED) #include #endif #if defined(ARMCOMPUTECL_ENABLED) #include #endif #if defined(ARMCOMPUTENEON_ENABLED) || defined(ARMCOMPUTECL_ENABLED) #include #include #include #endif namespace armnn { class BaseMemoryManager : public IMemoryManager { public: enum class MemoryAffinity { Buffer, Offset }; BaseMemoryManager() { } virtual ~BaseMemoryManager() { } void Acquire() override; void Release() override; #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; } 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; #endif }; #if defined(ARMCOMPUTENEON_ENABLED) class NeonMemoryManager : public BaseMemoryManager { public: NeonMemoryManager() {} virtual ~NeonMemoryManager() {} NeonMemoryManager(std::unique_ptr alloc, MemoryAffinity memoryAffinity) : BaseMemoryManager(std::move(alloc), memoryAffinity) { m_InterLayerMemoryGroup = CreateMemoryGroup(m_InterLayerMemoryMgr); } protected: std::shared_ptr CreateMemoryGroup(const std::shared_ptr& memoryManager) override; }; #endif #if defined(ARMCOMPUTECL_ENABLED) class ClMemoryManager : public BaseMemoryManager { public: ClMemoryManager() {} virtual ~ClMemoryManager() {} ClMemoryManager(std::unique_ptr alloc) : BaseMemoryManager(std::move(alloc), MemoryAffinity::Buffer) { m_InterLayerMemoryGroup = CreateMemoryGroup(m_InterLayerMemoryMgr); } protected: std::shared_ptr CreateMemoryGroup(const std::shared_ptr& memoryManager) override; }; #endif } //namespace armnn