aboutsummaryrefslogtreecommitdiff
path: root/src/backends/backendsCommon/test
diff options
context:
space:
mode:
authorTeresa Charlin <teresa.charlinreyes@arm.com>2021-10-01 11:29:08 +0100
committerTeresaARM <teresa.charlinreyes@arm.com>2021-10-26 16:15:13 +0000
commitca5883951ab51191eb19502459f0936fc96e14f1 (patch)
tree03973265a28e489719cc51a826c1531006823c83 /src/backends/backendsCommon/test
parentfea41d70385fec1d9e1c3367cfad2736ed7d20b2 (diff)
downloadarmnn-ca5883951ab51191eb19502459f0936fc96e14f1.tar.gz
IVGCVSW-6301 Create the MemoryManager class
Signed-off-by: Teresa Charlin <teresa.charlinreyes@arm.com> Signed-off-by: Finn Williams <finn.williams@arm.com> Change-Id: Ia41b5252d695daabd5afaf1b2267444d24be173a
Diffstat (limited to 'src/backends/backendsCommon/test')
-rw-r--r--src/backends/backendsCommon/test/CMakeLists.txt3
-rw-r--r--src/backends/backendsCommon/test/MemoryManagerTests.cpp107
2 files changed, 109 insertions, 1 deletions
diff --git a/src/backends/backendsCommon/test/CMakeLists.txt b/src/backends/backendsCommon/test/CMakeLists.txt
index b90407fd7c..9272ae749c 100644
--- a/src/backends/backendsCommon/test/CMakeLists.txt
+++ b/src/backends/backendsCommon/test/CMakeLists.txt
@@ -13,6 +13,7 @@ list(APPEND armnnBackendsCommonUnitTests_sources
ChannelShuffleEndToEndTestImpl.hpp
ComparisonEndToEndTestImpl.hpp
CompatibilityTests.cpp
+ ConcatEndToEndTestImpl.hpp
Convolution3dEndToEndTestImpl.hpp
CustomMemoryOptimizerStrategyTests.cpp
DefaultAsyncExecuteTest.cpp
@@ -35,7 +36,7 @@ list(APPEND armnnBackendsCommonUnitTests_sources
LayerTests.hpp
LogSoftmaxEndToEndTestImpl.cpp
LogSoftmaxEndToEndTestImpl.hpp
- ConcatEndToEndTestImpl.hpp
+ MemoryManagerTests.cpp
MockBackend.cpp
MockBackend.hpp
MockBackendId.hpp
diff --git a/src/backends/backendsCommon/test/MemoryManagerTests.cpp b/src/backends/backendsCommon/test/MemoryManagerTests.cpp
new file mode 100644
index 0000000000..b5f2db4009
--- /dev/null
+++ b/src/backends/backendsCommon/test/MemoryManagerTests.cpp
@@ -0,0 +1,107 @@
+//
+// Copyright © 2021 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include <backendsCommon/MemoryManager.hpp>
+#include <armnn/utility/IgnoreUnused.hpp>
+
+#include <doctest/doctest.h>
+#include <numeric>
+
+namespace armnn
+{
+/// @brief Class that implements a sample custom allocator.
+class SampleCustomAllocator : public armnn::ICustomAllocator
+{
+public:
+ SampleCustomAllocator() = default;
+
+ void* allocate(size_t size, size_t alignment) override
+ {
+ IgnoreUnused(alignment);
+ CHECK(size == m_Values.size());
+ m_CounterAllocate+=1;
+ return m_Values.data();
+ }
+
+ void free(void* ptr) override
+ {
+ CHECK(ptr == m_Values.data());
+ m_CounterFree+=1;
+ }
+
+ armnn::MemorySource GetMemorySourceType() override
+ {
+ return armnn::MemorySource::Malloc;
+ }
+
+ virtual void* GetMemoryRegionAtOffset(void* buffer, size_t offset, size_t alignment = 0 ) override
+ {
+ IgnoreUnused(alignment);
+ return (static_cast<char*>(buffer) + offset);
+ }
+
+ /// Holds the data in the tensors. Create for testing purposes.
+ std::vector<uint8_t> m_Values;
+ /// Counts the number of times the function allocate is called.
+ unsigned long m_CounterAllocate= 0;
+ /// Counts the number of times the function free is called.
+ unsigned long m_CounterFree = 0;
+};
+
+TEST_SUITE("MemoryManagerTests")
+{
+/// Unit test Storing, Allocating and Deallocating with a custom allocator.
+TEST_CASE("MemoryManagerTest")
+{
+ using namespace armnn;
+
+ // Create mock up bufferStorageVector with 2 BufferStorage with the same TensorMemory
+ size_t numTensors = 5;
+ std::vector<TensorMemory*> tensorMemoryPointerVector(numTensors);
+ std::vector<TensorMemory> tensorMemoryVector;
+ tensorMemoryVector.reserve(numTensors);
+
+ std::vector<size_t> offsets(numTensors);
+ std::iota(std::begin(offsets), std::end(offsets), 0);
+
+ for (uint idx = 0; idx < tensorMemoryPointerVector.size(); ++idx)
+ {
+ tensorMemoryVector.emplace_back(TensorMemory{offsets[idx], nullptr, 0});
+ tensorMemoryPointerVector[idx] = &tensorMemoryVector[idx];
+ }
+
+ std::vector<BufferStorage> bufferStorageVector;
+ bufferStorageVector.emplace_back(BufferStorage{tensorMemoryPointerVector, numTensors});
+ bufferStorageVector.emplace_back(BufferStorage{tensorMemoryPointerVector, numTensors});
+
+ // Create an instance of the SampleCustomAllocator
+ SampleCustomAllocator customAllocator = SampleCustomAllocator();
+ customAllocator.m_Values = {10, 11, 12, 13, 14};
+ // Check that the test was set up correctly
+ CHECK(customAllocator.m_Values.size() == numTensors);
+
+ // Utilise 3 functions in the MemoryManager. Check the counters and the pointer to the values are correct.
+ MemoryManager memoryManager;
+ memoryManager.StoreMemToAllocate(bufferStorageVector, &customAllocator);
+
+ memoryManager.Allocate();
+ CHECK(customAllocator.m_CounterAllocate == bufferStorageVector.size());
+ for (const auto& bufferStorage : bufferStorageVector)
+ {
+ uint idx = 0;
+ for (auto tensorMemory : bufferStorage.m_TensorMemoryVector)
+ {
+ auto value = reinterpret_cast<uint8_t *>(tensorMemory->m_Data);
+ CHECK(customAllocator.m_Values[idx] == *value);
+ idx += 1;
+ }
+ }
+
+ memoryManager.Deallocate();
+ CHECK(customAllocator.m_CounterFree == bufferStorageVector.size());
+}
+}
+
+} // namespace armnn \ No newline at end of file