// // Copyright © 2017 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #pragma once #include #include #include #include #include #include #include namespace { template> LayerTestResult MemCopyTest(armnn::IWorkloadFactory& srcWorkloadFactory, armnn::IWorkloadFactory& dstWorkloadFactory, bool withSubtensors) { const std::array shapeData = { { 1u, 1u, 6u, 5u } }; const armnn::TensorShape tensorShape(4, shapeData.data()); const armnn::TensorInfo tensorInfo(tensorShape, dataType); std::vector 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 ret(tensorInfo); ret.m_ExpectedData = inputData; std::vector 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> LayerTestResult MemCopyTest(bool withSubtensors) { armnn::IBackendInternal::IMemoryManagerSharedPtr srcMemoryManager = WorkloadFactoryHelper::GetMemoryManager(); armnn::IBackendInternal::IMemoryManagerSharedPtr dstMemoryManager = WorkloadFactoryHelper::GetMemoryManager(); SrcWorkloadFactory srcWorkloadFactory = WorkloadFactoryHelper::GetFactory(srcMemoryManager); DstWorkloadFactory dstWorkloadFactory = WorkloadFactoryHelper::GetFactory(dstMemoryManager); return MemCopyTest(srcWorkloadFactory, dstWorkloadFactory, withSubtensors); } } // anonymous namespace