// // Copyright © 2017 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #include "ReshapeTestImpl.hpp" #include #include #include #include #include namespace { template> LayerTestResult Rsqrt2dTestCommon( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::TensorInfo inputTensorInfo, const armnn::TensorInfo outputTensorInfo, const std::vector& inputValues, const std::vector& expectedOutputValues) { boost::ignore_unused(memoryManager); auto inputTensor = MakeTensor(inputTensorInfo, ConvertToDataType(inputValues,inputTensorInfo)); LayerTestResult result(outputTensorInfo); result.outputExpected = MakeTensor(outputTensorInfo, ConvertToDataType(expectedOutputValues,outputTensorInfo)); std::unique_ptr inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo); std::unique_ptr outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo); armnn::RsqrtQueueDescriptor descriptor; armnn::WorkloadInfo info; AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get()); AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get()); std::unique_ptr workload = workloadFactory.CreateRsqrt(descriptor, info); inputHandle->Allocate(); outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0]); workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get()); return result; } } // anonymous namespace template LayerTestResult Rsqrt2dTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const armnn::TensorShape inputShape{ 2, 2 }; const armnn::TensorShape outputShape{ 2, 2 }; armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType); inputTensorInfo.SetQuantizationScale(0.1f); inputTensorInfo.SetQuantizationOffset(0); armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType); outputTensorInfo.SetQuantizationScale(0.1f); outputTensorInfo.SetQuantizationOffset(0); std::vector inputValues { 1.f, 4.f, 16.f, 25.f }; std::vector expectedOutputValues { 1.f, 0.5f, 0.25f, 0.2f }; return Rsqrt2dTestCommon(workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, inputValues, expectedOutputValues); } template LayerTestResult Rsqrt3dTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { boost::ignore_unused(memoryManager); const armnn::TensorShape inputShape{ 3, 1, 2 }; const armnn::TensorShape outputShape{ 3, 1, 2 }; armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType); inputTensorInfo.SetQuantizationScale(0.1f); inputTensorInfo.SetQuantizationOffset(0); armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType); outputTensorInfo.SetQuantizationScale(0.1f); outputTensorInfo.SetQuantizationOffset(0); std::vector inputValues { 1.f, 4.f, 16.f, 25.f, 64.f, 100.f }; std::vector expectedOutputValues { 1.f, 0.5f, 0.25f, 0.2f, 0.125f, 0.1f }; auto inputTensor = MakeTensor(inputTensorInfo, ConvertToDataType(inputValues,inputTensorInfo)); LayerTestResult result(outputTensorInfo); result.outputExpected = MakeTensor(outputTensorInfo, ConvertToDataType(expectedOutputValues,outputTensorInfo)); std::unique_ptr inputHandle = workloadFactory.CreateTensorHandle(inputTensorInfo); std::unique_ptr outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo); armnn::RsqrtQueueDescriptor descriptor; armnn::WorkloadInfo info; AddInputToWorkload(descriptor, info, inputTensorInfo, inputHandle.get()); AddOutputToWorkload(descriptor, info, outputTensorInfo, outputHandle.get()); std::unique_ptr workload = workloadFactory.CreateRsqrt(descriptor, info); inputHandle->Allocate(); outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0]); workload->PostAllocationConfigure(); workload->Execute(); CopyDataFromITensorHandle(&result.output[0][0][0], outputHandle.get()); return result; } template LayerTestResult RsqrtZeroTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const armnn::TensorShape inputShape{ 1, 2 }; const armnn::TensorShape outputShape{ 1, 2 }; armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType); inputTensorInfo.SetQuantizationScale(0.1f); armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType); outputTensorInfo.SetQuantizationScale(0.1f); std::vector inputValues { 0.f, -0.f }; std::vector expectedOutputValues { INFINITY, -INFINITY }; return Rsqrt2dTestCommon(workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, inputValues, expectedOutputValues); } template LayerTestResult RsqrtNegativeTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const armnn::TensorShape inputShape{ 1, 2 }; const armnn::TensorShape outputShape{ 1, 2 }; armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType); inputTensorInfo.SetQuantizationScale(0.1f); inputTensorInfo.SetQuantizationOffset(0); armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType); outputTensorInfo.SetQuantizationScale(0.1f); outputTensorInfo.SetQuantizationOffset(0); std::vector inputValues { -25.f, -16.f }; std::vector expectedOutputValues { -NAN, -NAN }; return Rsqrt2dTestCommon(workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, inputValues, expectedOutputValues); } // // Explicit template specializations // template LayerTestResult, 2> Rsqrt2dTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); template LayerTestResult, 2> Rsqrt2dTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); template LayerTestResult, 2> Rsqrt2dTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); template LayerTestResult, 2> Rsqrt2dTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); template LayerTestResult, 3> Rsqrt3dTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); template LayerTestResult, 3> Rsqrt3dTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); template LayerTestResult, 3> Rsqrt3dTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); template LayerTestResult, 3> Rsqrt3dTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); template LayerTestResult, 2> RsqrtZeroTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); template LayerTestResult, 2> RsqrtNegativeTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager);