ArmNN
 22.08
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 }
Copyright (c) 2021 ARM Limited and Contributors.
Pool * Manage(unsigned int numBytes)
#define ARMNN_ASSERT_MSG(COND, MSG)
Definition: Assert.hpp:15
#define ARMNN_ASSERT(COND)
Definition: Assert.hpp:14
void Reserve(unsigned int numBytes)
Pool(unsigned int numBytes)
void * GetPointer(Pool *pool)