diff options
author | Colm Donelan <colm.donelan@arm.com> | 2022-02-02 16:35:09 +0000 |
---|---|---|
committer | Francis Murtagh <francis.murtagh@arm.com> | 2022-02-07 20:07:44 +0000 |
commit | c42a987aa53d0fd842c34dee90abef5a9ff15fa4 (patch) | |
tree | d049993d38a8db54dc18e4c76c998e0598015f18 /src/backends/aclCommon | |
parent | 16829713a5d2096c8f0dc989fbb0964a9280777a (diff) | |
download | armnn-c42a987aa53d0fd842c34dee90abef5a9ff15fa4.tar.gz |
IVGCVSW-6635 Move MemCopyTestImpl from acl to armnnTestUtils.
* Move MemCopyTestImpl.hpp from src/backends/aclCommon/test/ to
include/armnnTestutils.
* Refactor MemCopyTests in aclCommon, cl and Neon.
* Introduce RefMemCopyTests to exercise this utility in x86 builds.
Signed-off-by: Colm Donelan <colm.donelan@arm.com>
Change-Id: I8824f013d3656658ed0a2904bb79384e3af68641
Diffstat (limited to 'src/backends/aclCommon')
-rw-r--r-- | src/backends/aclCommon/test/MemCopyTestImpl.hpp | 94 | ||||
-rw-r--r-- | src/backends/aclCommon/test/MemCopyTests.cpp | 48 |
2 files changed, 51 insertions, 91 deletions
diff --git a/src/backends/aclCommon/test/MemCopyTestImpl.hpp b/src/backends/aclCommon/test/MemCopyTestImpl.hpp index 956ea27c15..0c38ed99fe 100644 --- a/src/backends/aclCommon/test/MemCopyTestImpl.hpp +++ b/src/backends/aclCommon/test/MemCopyTestImpl.hpp @@ -1,94 +1,10 @@ // -// Copyright © 2017 Arm Ltd. All rights reserved. +// Copyright © 2022 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // -#pragma once -#include <ResolveType.hpp> -#include <armnn/backends/IBackendInternal.hpp> +#include <armnnTestUtils/MemCopyTestImpl.hpp> -#include <test/TensorHelpers.hpp> - -#include <armnnTestUtils/LayerTestResult.hpp> -#include <armnnTestUtils/TensorCopyUtils.hpp> -#include <armnnTestUtils/WorkloadTestUtils.hpp> -#include <backendsCommon/test/WorkloadFactoryHelper.hpp> - -namespace -{ - -template<armnn::DataType dataType, typename T = armnn::ResolveType<dataType>> -LayerTestResult<T, 4> MemCopyTest(armnn::IWorkloadFactory& srcWorkloadFactory, - armnn::IWorkloadFactory& dstWorkloadFactory, - bool withSubtensors) -{ - const std::array<unsigned int, 4> shapeData = { { 1u, 1u, 6u, 5u } }; - const armnn::TensorShape tensorShape(4, shapeData.data()); - const armnn::TensorInfo tensorInfo(tensorShape, dataType); - std::vector<T> inputData = - { - 1, 2, 3, 4, 5, - 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, - 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, - 26, 27, 28, 29, 30, - }; - - LayerTestResult<T, 4> ret(tensorInfo); - ret.m_ExpectedData = inputData; - - std::vector<T> actualOutput(tensorInfo.GetNumElements()); - - ARMNN_NO_DEPRECATE_WARN_BEGIN - auto inputTensorHandle = srcWorkloadFactory.CreateTensorHandle(tensorInfo); - auto outputTensorHandle = dstWorkloadFactory.CreateTensorHandle(tensorInfo); - ARMNN_NO_DEPRECATE_WARN_END - - AllocateAndCopyDataToITensorHandle(inputTensorHandle.get(), inputData.data()); - outputTensorHandle->Allocate(); - - armnn::MemCopyQueueDescriptor memCopyQueueDesc; - armnn::WorkloadInfo workloadInfo; - - const unsigned int origin[4] = {}; - - ARMNN_NO_DEPRECATE_WARN_BEGIN - auto workloadInput = (withSubtensors && srcWorkloadFactory.SupportsSubTensors()) - ? srcWorkloadFactory.CreateSubTensorHandle(*inputTensorHandle, tensorShape, origin) - : std::move(inputTensorHandle); - auto workloadOutput = (withSubtensors && dstWorkloadFactory.SupportsSubTensors()) - ? dstWorkloadFactory.CreateSubTensorHandle(*outputTensorHandle, tensorShape, origin) - : std::move(outputTensorHandle); - ARMNN_NO_DEPRECATE_WARN_END - - AddInputToWorkload(memCopyQueueDesc, workloadInfo, tensorInfo, workloadInput.get()); - AddOutputToWorkload(memCopyQueueDesc, workloadInfo, tensorInfo, workloadOutput.get()); - - dstWorkloadFactory.CreateWorkload(armnn::LayerType::MemCopy, memCopyQueueDesc, workloadInfo)->Execute(); - - CopyDataFromITensorHandle(actualOutput.data(), workloadOutput.get()); - ret.m_ActualData = actualOutput; - - return ret; -} - -template<typename SrcWorkloadFactory, - typename DstWorkloadFactory, - armnn::DataType dataType, - typename T = armnn::ResolveType<dataType>> -LayerTestResult<T, 4> MemCopyTest(bool withSubtensors) -{ - armnn::IBackendInternal::IMemoryManagerSharedPtr srcMemoryManager = - WorkloadFactoryHelper<SrcWorkloadFactory>::GetMemoryManager(); - - armnn::IBackendInternal::IMemoryManagerSharedPtr dstMemoryManager = - WorkloadFactoryHelper<DstWorkloadFactory>::GetMemoryManager(); - - SrcWorkloadFactory srcWorkloadFactory = WorkloadFactoryHelper<SrcWorkloadFactory>::GetFactory(srcMemoryManager); - DstWorkloadFactory dstWorkloadFactory = WorkloadFactoryHelper<DstWorkloadFactory>::GetFactory(dstMemoryManager); - - return MemCopyTest<dataType>(srcWorkloadFactory, dstWorkloadFactory, withSubtensors); -} - -} // anonymous namespace +#pragma message("./src/backends/aclCommon/test/MemCopyTestImpl.hpp has been"\ + " deprecated, it is due for removal in 22.11 release. Please"\ + " use public interface include/armnnTestUtils/MemCopyTestImpl.hpp") diff --git a/src/backends/aclCommon/test/MemCopyTests.cpp b/src/backends/aclCommon/test/MemCopyTests.cpp index 132550342c..7b7d4ffb9e 100644 --- a/src/backends/aclCommon/test/MemCopyTests.cpp +++ b/src/backends/aclCommon/test/MemCopyTests.cpp @@ -4,13 +4,13 @@ // #include <aclCommon/ArmComputeTensorUtils.hpp> -#include <aclCommon/test/MemCopyTestImpl.hpp> #if defined(ARMCOMPUTECL_ENABLED) && defined(ARMCOMPUTENEON_ENABLED) +#include <armnnTestUtils/LayerTestResult.hpp> +#include <armnnTestUtils/MemCopyTestImpl.hpp> #include <cl/ClWorkloadFactory.hpp> #include <cl/test/ClContextControlFixture.hpp> #include <cl/test/ClWorkloadFactoryHelper.hpp> - #include <neon/NeonWorkloadFactory.hpp> #include <neon/test/NeonWorkloadFactoryHelper.hpp> #endif @@ -42,6 +42,50 @@ TEST_CASE("AclTypeConversions") #if defined(ARMCOMPUTECL_ENABLED) && defined(ARMCOMPUTENEON_ENABLED) +namespace +{ + +template <> +struct MemCopyTestHelper<armnn::NeonWorkloadFactory> +{ + static armnn::IBackendInternal::IMemoryManagerSharedPtr GetMemoryManager() + { + armnn::NeonBackend backend; + return backend.CreateMemoryManager(); + } + + static armnn::NeonWorkloadFactory GetFactory( + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::ModelOptions& modelOptions = {}) + { + armnn::NeonBackend backend; + return armnn::NeonWorkloadFactory(armnn::PolymorphicPointerDowncast<armnn::NeonMemoryManager>(memoryManager), + backend.CreateBackendSpecificModelContext(modelOptions)); + } +}; + +template <> +struct MemCopyTestHelper<armnn::ClWorkloadFactory> +{ + static armnn::IBackendInternal::IMemoryManagerSharedPtr GetMemoryManager() + { + armnn::ClBackend backend; + return backend.CreateMemoryManager(); + } + + static armnn::ClWorkloadFactory GetFactory( + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::ModelOptions& modelOptions = {}) + { + armnn::ClBackend backend; + return armnn::ClWorkloadFactory(armnn::PolymorphicPointerDowncast<armnn::ClMemoryManager>(memoryManager), + backend.CreateBackendSpecificModelContext(modelOptions)); + } +}; +} // namespace + + + TEST_CASE_FIXTURE(ClContextControlFixture, "CopyBetweenNeonAndGpu") { LayerTestResult<float, 4> result = |