ArmNN
 24.02
RefMemoryManager.cpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 #include "RefMemoryManager.hpp"
6 
8 
9 #include <algorithm>
10 
11 namespace armnn
12 {
13 
15 {}
16 
18 {}
19 
21 {
22  if (!m_FreePools.empty())
23  {
24  Pool* res = m_FreePools.back();
25  m_FreePools.pop_back();
26  res->Reserve(numBytes);
27  return res;
28  }
29  else
30  {
31  m_Pools.push_front(Pool(numBytes));
32  return &m_Pools.front();
33  }
34 }
35 
37 {
38  ARMNN_ASSERT(pool);
39  m_FreePools.push_back(pool);
40 }
41 
43 {
44  return pool->GetPointer();
45 }
46 
48 {
49  for (Pool &pool: m_Pools)
50  {
51  pool.Acquire();
52  }
53 }
54 
56 {
57  for (Pool &pool: m_Pools)
58  {
59  pool.Release();
60  }
61 }
62 
63 RefMemoryManager::Pool::Pool(unsigned int numBytes)
64  : m_Size(numBytes),
65  m_Pointer(nullptr)
66 {}
67 
69 {
70  if (m_Pointer)
71  {
72  Release();
73  }
74 }
75 
77 {
78  ARMNN_ASSERT_MSG(m_Pointer, "RefMemoryManager::Pool::GetPointer() called when memory not acquired");
79  return m_Pointer;
80 }
81 
82 void RefMemoryManager::Pool::Reserve(unsigned int numBytes)
83 {
84  ARMNN_ASSERT_MSG(!m_Pointer, "RefMemoryManager::Pool::Reserve() cannot be called after memory acquired");
85  m_Size = std::max(m_Size, numBytes);
86 }
87 
89 {
90  ARMNN_ASSERT_MSG(!m_Pointer, "RefMemoryManager::Pool::Acquire() called when memory already acquired");
91  m_Pointer = ::operator new(size_t(m_Size));
92 }
93 
95 {
96  ARMNN_ASSERT_MSG(m_Pointer, "RefMemoryManager::Pool::Release() called when memory not acquired");
97  ::operator delete(m_Pointer);
98  m_Pointer = nullptr;
99 }
100 
101 }
ARMNN_ASSERT
#define ARMNN_ASSERT(COND)
Definition: Assert.hpp:14
armnn::RefMemoryManager::RefMemoryManager
RefMemoryManager()
Definition: RefMemoryManager.cpp:14
armnn::RefMemoryManager::Release
void Release() override
Definition: RefMemoryManager.cpp:55
armnn::RefMemoryManager::GetPointer
void * GetPointer(Pool *pool)
Definition: RefMemoryManager.cpp:42
armnn::RefMemoryManager::Manage
Pool * Manage(unsigned int numBytes)
Definition: RefMemoryManager.cpp:20
armnn::RefMemoryManager::Pool::Acquire
void Acquire()
Definition: RefMemoryManager.cpp:88
armnn::RefMemoryManager::Pool::Release
void Release()
Definition: RefMemoryManager.cpp:94
armnn::RefMemoryManager::Acquire
void Acquire() override
Definition: RefMemoryManager.cpp:47
armnn::RefMemoryManager::Pool
Definition: RefMemoryManager.hpp:33
ARMNN_ASSERT_MSG
#define ARMNN_ASSERT_MSG(COND, MSG)
Definition: Assert.hpp:15
Assert.hpp
armnn::RefMemoryManager::Pool::Pool
Pool(unsigned int numBytes)
Definition: RefMemoryManager.cpp:63
RefMemoryManager.hpp
armnn::RefMemoryManager::Pool::GetPointer
void * GetPointer()
Definition: RefMemoryManager.cpp:76
armnn::RefMemoryManager::Pool::~Pool
~Pool()
Definition: RefMemoryManager.cpp:68
armnn::RefMemoryManager::Allocate
void Allocate(Pool *pool)
Definition: RefMemoryManager.cpp:36
armnn
Copyright (c) 2021 ARM Limited and Contributors.
Definition: 01_00_quick_start.dox:6
armnn::RefMemoryManager::Pool::Reserve
void Reserve(unsigned int numBytes)
Definition: RefMemoryManager.cpp:82
armnn::RefMemoryManager::~RefMemoryManager
virtual ~RefMemoryManager()
Definition: RefMemoryManager.cpp:17