From 21a9f33338c60ae1cd955df220ce329918adcb8f Mon Sep 17 00:00:00 2001 From: Tianle Cheng Date: Thu, 9 Nov 2023 13:56:53 +0000 Subject: IVGCVSW-7835 Add ReverseV2 CL and Neon Workloads * Added ReverseV2 to CL and Neon backends * Added Cl and Neon ReverseV2 Layer unit tests Signed-off-by: Tianle Cheng Change-Id: I646275c629caf17dac1950b0cd7083f23f87f387 --- .../test/layerTests/ReverseV2TestImpl.cpp | 149 +++++++++++---------- 1 file changed, 75 insertions(+), 74 deletions(-) (limited to 'src/backends/backendsCommon/test') diff --git a/src/backends/backendsCommon/test/layerTests/ReverseV2TestImpl.cpp b/src/backends/backendsCommon/test/layerTests/ReverseV2TestImpl.cpp index f2774037bd..144bf9e8e1 100644 --- a/src/backends/backendsCommon/test/layerTests/ReverseV2TestImpl.cpp +++ b/src/backends/backendsCommon/test/layerTests/ReverseV2TestImpl.cpp @@ -18,73 +18,74 @@ namespace { - template - LayerTestResult ReverseV2TestImpl( - armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, - const armnn::ITensorHandleFactory& tensorHandleFactory, - const std::vector& input, - const std::vector& axis, - const std::vector& outputExpected, - const armnn::TensorInfo& inputInfo, - const armnn::TensorInfo& axisInfo, - const armnn::TensorInfo& outputInfo) +template +LayerTestResult ReverseV2TestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::ITensorHandleFactory& tensorHandleFactory, + const std::vector& input, + const std::vector& axis, + const std::vector& outputExpected, + const armnn::TensorInfo& inputInfo, + const armnn::TensorInfo& axisInfo, + const armnn::TensorInfo& outputInfo) +{ + LayerTestResult result(outputInfo); + std::vector outputActual(outputInfo.GetNumElements()); + + std::unique_ptr inputHandle = tensorHandleFactory.CreateTensorHandle(inputInfo); + std::unique_ptr axisHandle = tensorHandleFactory.CreateTensorHandle(axisInfo); + std::unique_ptr outputHandle = tensorHandleFactory.CreateTensorHandle(outputInfo); + + armnn::ReverseV2QueueDescriptor queueDescriptor; + armnn::WorkloadInfo workloadInfo; + + AddInputToWorkload(queueDescriptor, workloadInfo, inputInfo, inputHandle.get()); + AddInputToWorkload(queueDescriptor, workloadInfo, axisInfo, axisHandle.get()); + AddOutputToWorkload(queueDescriptor, workloadInfo, outputInfo, outputHandle.get()); + + // Don't execute if ReverseV2 is not supported, as an exception will be raised. + const armnn::BackendId& backend = workloadFactory.GetBackendId(); + std::string reasonIfUnsupported; + armnn::LayerSupportHandle handle = armnn::GetILayerSupportByBackendId(backend); + result.m_Supported = handle.IsReverseV2Supported(inputInfo, + axisInfo, + outputInfo, + reasonIfUnsupported); + if (!result.m_Supported) + { + return result; + } + + auto workload = workloadFactory.CreateWorkload(armnn::LayerType::ReverseV2, queueDescriptor, workloadInfo); + + inputHandle->Allocate(); + axisHandle->Allocate(); + outputHandle->Allocate(); + + if (input.data() != nullptr) + { + CopyDataToITensorHandle(inputHandle.get(), input.data()); + } + if (axis.data() != nullptr) + { + CopyDataToITensorHandle(axisHandle.get(), axis.data()); + } + + workload->PostAllocationConfigure(); + ExecuteWorkload(*workload, memoryManager); + + if (outputActual.data() != nullptr) { - LayerTestResult result(outputInfo); - std::vector outputActual(outputInfo.GetNumElements()); - - std::unique_ptr inputHandle = tensorHandleFactory.CreateTensorHandle(inputInfo); - std::unique_ptr axisHandle = tensorHandleFactory.CreateTensorHandle(axisInfo); - std::unique_ptr outputHandle = tensorHandleFactory.CreateTensorHandle(outputInfo); - - armnn::ReverseV2QueueDescriptor queueDescriptor; - armnn::WorkloadInfo workloadInfo; - - AddInputToWorkload(queueDescriptor, workloadInfo, inputInfo, inputHandle.get()); - AddInputToWorkload(queueDescriptor, workloadInfo, axisInfo, axisHandle.get()); - AddOutputToWorkload(queueDescriptor, workloadInfo, outputInfo, outputHandle.get()); - - // Don't execute if ReverseV2 is not supported, as an exception will be raised. - const armnn::BackendId& backend = workloadFactory.GetBackendId(); - std::string reasonIfUnsupported; - armnn::LayerSupportHandle handle = armnn::GetILayerSupportByBackendId(backend); - result.m_Supported = handle.IsReverseV2Supported(inputInfo, - axisInfo, - outputInfo, - reasonIfUnsupported); - if (!result.m_Supported) - { - return result; - } - - auto workload = workloadFactory.CreateWorkload(armnn::LayerType::ReverseV2, queueDescriptor, workloadInfo); - - inputHandle->Allocate(); - axisHandle->Allocate(); - outputHandle->Allocate(); - - if (input.data() != nullptr) - { - CopyDataToITensorHandle(inputHandle.get(), input.data()); - } - if (axis.data() != nullptr) - { - CopyDataToITensorHandle(axisHandle.get(), axis.data()); - } - - workload->PostAllocationConfigure(); - ExecuteWorkload(*workload, memoryManager); - - if (outputActual.data() != nullptr) - { - CopyDataFromITensorHandle(outputActual.data(), outputHandle.get()); - } - - return LayerTestResult(outputActual, - outputExpected, - outputHandle->GetShape(), - outputInfo.GetShape()); + CopyDataFromITensorHandle(outputActual.data(), outputHandle.get()); } + + return LayerTestResult(outputActual, + outputExpected, + outputHandle->GetShape(), + outputInfo.GetShape()); + +} } template @@ -107,7 +108,7 @@ LayerTestResult ReverseV2SimpleTestEmptyAxis( 3, 4 }, qScale, qOffset); - std::vector axis = armnnUtils::QuantizedVector({1, 1}, qScale, qOffset); + std::vector axis = armnnUtils::QuantizedVector({}, qScale, qOffset); std::vector outputExpected = armnnUtils::QuantizedVector({ 1, 2, @@ -115,14 +116,14 @@ LayerTestResult ReverseV2SimpleTestEmptyAxis( }, qScale, qOffset); return ReverseV2TestImpl(workloadFactory, - memoryManager, - tensorHandleFactory, - input, - axis, - outputExpected, - inputInfo, - axisInfo, - outputInfo); + memoryManager, + tensorHandleFactory, + input, + axis, + outputExpected, + inputInfo, + axisInfo, + outputInfo); } template -- cgit v1.2.1