aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNarumol Prangnawarat <narumol.prangnawarat@arm.com>2022-01-13 17:43:41 +0000
committerJim Flynn <jim.flynn@arm.com>2022-01-25 10:22:16 +0000
commit7740045352a0d4e90011bcf472c069bd537cba72 (patch)
tree1b26c21d882f42b20257d96a5b723d6275a192e8
parentd12b40792591309c627f215574aa082a5efd03ca (diff)
downloadarmnn-7740045352a0d4e90011bcf472c069bd537cba72.tar.gz
IVGCVSW-6678 Register CopyAndImportFactoryPairs to NeonBackend and unit tests
Signed-off-by: Narumol Prangnawarat <narumol.prangnawarat@arm.com> Change-Id: If5392020dfd0caa3f09ea2edbaf0f83ec36ab99b
-rw-r--r--src/backends/neon/NeonBackend.cpp22
-rw-r--r--src/backends/neon/backend.mk1
-rw-r--r--src/backends/neon/test/CMakeLists.txt1
-rw-r--r--src/backends/neon/test/NeonBackendTests.cpp51
4 files changed, 72 insertions, 3 deletions
diff --git a/src/backends/neon/NeonBackend.cpp b/src/backends/neon/NeonBackend.cpp
index 54af14e30b..66547ad4df 100644
--- a/src/backends/neon/NeonBackend.cpp
+++ b/src/backends/neon/NeonBackend.cpp
@@ -74,7 +74,13 @@ IBackendInternal::IWorkloadFactoryPtr NeonBackend::CreateWorkloadFactory(
BaseMemoryManager::MemoryAffinity::Offset);
tensorHandleFactoryRegistry.RegisterMemoryManager(memoryManager);
- tensorHandleFactoryRegistry.RegisterFactory(std::make_unique<NeonTensorHandleFactory>(memoryManager));
+
+ auto factory = std::make_unique<NeonTensorHandleFactory>(memoryManager);
+ // Register copy and import factory pair
+ tensorHandleFactoryRegistry.RegisterCopyAndImportFactoryPair(factory->GetId(), factory->GetId());
+ // Register the factory
+ tensorHandleFactoryRegistry.RegisterFactory(std::move(factory));
+
return std::make_unique<NeonWorkloadFactory>(
PolymorphicPointerDowncast<NeonMemoryManager>(memoryManager));
@@ -87,7 +93,12 @@ IBackendInternal::IWorkloadFactoryPtr NeonBackend::CreateWorkloadFactory(
BaseMemoryManager::MemoryAffinity::Offset);
tensorHandleFactoryRegistry.RegisterMemoryManager(memoryManager);
- tensorHandleFactoryRegistry.RegisterFactory(std::make_unique<NeonTensorHandleFactory>(memoryManager));
+
+ auto factory = std::make_unique<NeonTensorHandleFactory>(memoryManager);
+ // Register copy and import factory pair
+ tensorHandleFactoryRegistry.RegisterCopyAndImportFactoryPair(factory->GetId(), factory->GetId());
+ // Register the factory
+ tensorHandleFactoryRegistry.RegisterFactory(std::move(factory));
return std::make_unique<NeonWorkloadFactory>(
PolymorphicPointerDowncast<NeonMemoryManager>(memoryManager), CreateBackendSpecificModelContext(modelOptions));
@@ -424,7 +435,12 @@ void NeonBackend::RegisterTensorHandleFactories(class TensorHandleFactoryRegistr
BaseMemoryManager::MemoryAffinity::Offset);
registry.RegisterMemoryManager(memoryManager);
- registry.RegisterFactory(std::make_unique<NeonTensorHandleFactory>(memoryManager));
+
+ auto factory = std::make_unique<NeonTensorHandleFactory>(memoryManager);
+ // Register copy and import factory pair
+ registry.RegisterCopyAndImportFactoryPair(factory->GetId(), factory->GetId());
+ // Register the factory
+ registry.RegisterFactory(std::move(factory));
}
std::unique_ptr<ICustomAllocator> NeonBackend::GetDefaultAllocator() const
diff --git a/src/backends/neon/backend.mk b/src/backends/neon/backend.mk
index daf2e5eb09..8ae50ac7e0 100644
--- a/src/backends/neon/backend.mk
+++ b/src/backends/neon/backend.mk
@@ -106,6 +106,7 @@ ifeq ($(ARMNN_COMPUTE_NEON_ENABLED),1)
# Include the source files for the NEON backend tests
BACKEND_TEST_SOURCES := \
+ test/NeonBackendTests.cpp \
test/NeonCreateWorkloadTests.cpp \
test/NeonEndToEndTests.cpp \
test/NeonJsonPrinterTests.cpp \
diff --git a/src/backends/neon/test/CMakeLists.txt b/src/backends/neon/test/CMakeLists.txt
index e4c5b34532..f7438ea6c9 100644
--- a/src/backends/neon/test/CMakeLists.txt
+++ b/src/backends/neon/test/CMakeLists.txt
@@ -4,6 +4,7 @@
#
list(APPEND armnnNeonBackendUnitTests_sources
+ NeonBackendTests.cpp
NeonCreateWorkloadTests.cpp
NeonEndToEndTests.cpp
NeonJsonPrinterTests.cpp
diff --git a/src/backends/neon/test/NeonBackendTests.cpp b/src/backends/neon/test/NeonBackendTests.cpp
new file mode 100644
index 0000000000..23f58a76fc
--- /dev/null
+++ b/src/backends/neon/test/NeonBackendTests.cpp
@@ -0,0 +1,51 @@
+//
+// Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include <neon/NeonBackend.hpp>
+#include <neon/NeonTensorHandleFactory.hpp>
+
+#include <doctest/doctest.h>
+
+using namespace armnn;
+
+TEST_SUITE("NeonBackendTests")
+{
+TEST_CASE("NeonRegisterTensorHandleFactoriesMatchingImportFactoryId")
+{
+ auto neonBackend = std::make_unique<NeonBackend>();
+ TensorHandleFactoryRegistry registry;
+ neonBackend->RegisterTensorHandleFactories(registry);
+
+ // When calling RegisterTensorHandleFactories, CopyAndImportFactoryPair is registered
+ // Get matching import factory id correctly
+ CHECK((registry.GetMatchingImportFactoryId(NeonTensorHandleFactory::GetIdStatic()) ==
+ NeonTensorHandleFactory::GetIdStatic()));
+}
+
+TEST_CASE("NeonCreateWorkloadFactoryMatchingImportFactoryId")
+{
+ auto neonBackend = std::make_unique<NeonBackend>();
+ TensorHandleFactoryRegistry registry;
+ neonBackend->CreateWorkloadFactory(registry);
+
+ // When calling CreateWorkloadFactory, CopyAndImportFactoryPair is registered
+ // Get matching import factory id correctly
+ CHECK((registry.GetMatchingImportFactoryId(NeonTensorHandleFactory::GetIdStatic()) ==
+ NeonTensorHandleFactory::GetIdStatic()));
+}
+
+TEST_CASE("NeonCreateWorkloadFactoryWithOptionsMatchingImportFactoryId")
+{
+ auto neonBackend = std::make_unique<NeonBackend>();
+ TensorHandleFactoryRegistry registry;
+ ModelOptions modelOptions;
+ neonBackend->CreateWorkloadFactory(registry, modelOptions);
+
+ // When calling CreateWorkloadFactory with ModelOptions, CopyAndImportFactoryPair is registered
+ // Get matching import factory id correctly
+ CHECK((registry.GetMatchingImportFactoryId(NeonTensorHandleFactory::GetIdStatic()) ==
+ NeonTensorHandleFactory::GetIdStatic()));
+}
+}