From 93f84a970a65446e1eb5227327a980b1f061cbef Mon Sep 17 00:00:00 2001 From: nikraj01 Date: Wed, 5 Jun 2019 10:48:46 +0100 Subject: IVGCVSW-3216 Make Rsqrt f32 layers test generic Change-Id: Ibb8b71058039d0fb7345c2e6cba6382023541269 Signed-off-by: nikraj01 --- src/backends/backendsCommon/test/LayerTests.cpp | 166 -------------------- src/backends/backendsCommon/test/LayerTests.hpp | 191 +++++++++++++++++++++++- src/backends/reference/test/RefLayerTests.cpp | 8 +- 3 files changed, 188 insertions(+), 177 deletions(-) diff --git a/src/backends/backendsCommon/test/LayerTests.cpp b/src/backends/backendsCommon/test/LayerTests.cpp index e96f7dc732..f780486626 100644 --- a/src/backends/backendsCommon/test/LayerTests.cpp +++ b/src/backends/backendsCommon/test/LayerTests.cpp @@ -7921,172 +7921,6 @@ LayerTestResult ResizeBilinearMagUint8Test( return result; } -LayerTestResult Rsqrt2dTestCommon( - armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, - const armnn::TensorInfo inputTensorInfo, - const armnn::TensorInfo outputTensorInfo, - std::vector inputValues, - std::vector expectedOutputValues) -{ - auto inputTensor = MakeTensor(inputTensorInfo, std::vector(inputValues)); - - LayerTestResult result(outputTensorInfo); - result.outputExpected = MakeTensor(outputTensorInfo, std::vector(expectedOutputValues)); - - 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; -} -LayerTestResult Rsqrt2dTest( - armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) -{ - const armnn::TensorShape inputShape{ 2, 2 }; - const armnn::TensorShape outputShape{ 2, 2 }; - - const armnn::TensorInfo inputTensorInfo(inputShape, armnn::DataType::Float32); - const armnn::TensorInfo outputTensorInfo(outputShape, armnn::DataType::Float32); - - 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); -} - -LayerTestResult Rsqrt3dTest( - armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) -{ - const armnn::TensorShape inputShape{ 3, 1, 2 }; - const armnn::TensorShape outputShape{ 3, 1, 2 }; - - const armnn::TensorInfo inputTensorInfo(inputShape, armnn::DataType::Float32); - const armnn::TensorInfo outputTensorInfo(outputShape, armnn::DataType::Float32); - - 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, std::vector(inputValues)); - - LayerTestResult result(outputTensorInfo); - result.outputExpected = MakeTensor(outputTensorInfo, std::vector(expectedOutputValues)); - - 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; -} - -LayerTestResult RsqrtZeroTest( - armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) -{ - const armnn::TensorShape inputShape{ 1, 2 }; - const armnn::TensorShape outputShape{ 1, 2 }; - - const armnn::TensorInfo inputTensorInfo(inputShape, armnn::DataType::Float32); - const armnn::TensorInfo outputTensorInfo(outputShape, armnn::DataType::Float32); - - std::vector inputValues - { - 0.f, -0.f - }; - - std::vector expectedOutputValues - { - INFINITY, -INFINITY - }; - - return Rsqrt2dTestCommon(workloadFactory, memoryManager, - inputTensorInfo, outputTensorInfo, - inputValues, expectedOutputValues); -} - -LayerTestResult RsqrtNegativeTest( - armnn::IWorkloadFactory& workloadFactory, - const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) -{ - const armnn::TensorShape inputShape{ 1, 2 }; - const armnn::TensorShape outputShape{ 1, 2 }; - - const armnn::TensorInfo inputTensorInfo(inputShape, armnn::DataType::Float32); - const armnn::TensorInfo outputTensorInfo(outputShape, armnn::DataType::Float32); - - std::vector inputValues - { - -25.f, -16.f - }; - - std::vector expectedOutputValues - { - -NAN, -NAN - }; - - return Rsqrt2dTestCommon(workloadFactory, memoryManager, - inputTensorInfo, outputTensorInfo, - inputValues, expectedOutputValues); -} - LayerTestResult BatchNormTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) diff --git a/src/backends/backendsCommon/test/LayerTests.hpp b/src/backends/backendsCommon/test/LayerTests.hpp index be686c141e..c62e412caa 100644 --- a/src/backends/backendsCommon/test/LayerTests.hpp +++ b/src/backends/backendsCommon/test/LayerTests.hpp @@ -732,27 +732,32 @@ LayerTestResult ResizeBilinearMagTest( const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::DataLayout dataLayout); -LayerTestResult Rsqrt2dTestCommon( +template> +LayerTestResult Rsqrt2dTestCommon( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::TensorInfo inputTensorInfo, const armnn::TensorInfo outputTensorInfo, - std::vector inputValues, - std::vector expectedOutputValues); + std::vector inputValues, + std::vector expectedOutputValues); -LayerTestResult Rsqrt2dTest( +template> +LayerTestResult Rsqrt2dTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -LayerTestResult Rsqrt3dTest( +template> +LayerTestResult Rsqrt3dTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -LayerTestResult RsqrtZeroTest( +template> +LayerTestResult RsqrtZeroTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -LayerTestResult RsqrtNegativeTest( +template> +LayerTestResult RsqrtNegativeTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); @@ -1807,6 +1812,178 @@ std::vector ConvertToDataType(const std::vector& input, return output; } +template +LayerTestResult Rsqrt2dTestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::TensorInfo inputTensorInfo, + const armnn::TensorInfo outputTensorInfo, + std::vector inputValues, + std::vector expectedOutputValues) +{ + auto inputTensor = MakeTensor(inputTensorInfo, std::vector(inputValues)); + + LayerTestResult result(outputTensorInfo); + result.outputExpected = MakeTensor(outputTensorInfo, std::vector(expectedOutputValues)); + + 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; +} + +template +LayerTestResult Rsqrt2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) +{ + const armnn::TensorShape inputShape{ 2, 2 }; + const armnn::TensorShape outputShape{ 2, 2 }; + + const armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType); + const armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType); + + 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) +{ + const armnn::TensorShape inputShape{ 3, 1, 2 }; + const armnn::TensorShape outputShape{ 3, 1, 2 }; + + const armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType); + const armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType); + + 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, std::vector(inputValues)); + + LayerTestResult result(outputTensorInfo); + result.outputExpected = MakeTensor(outputTensorInfo, std::vector(expectedOutputValues)); + + 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 }; + + const armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType); + const armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType); + + 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 }; + + const armnn::TensorInfo inputTensorInfo(inputShape, ArmnnType); + const armnn::TensorInfo outputTensorInfo(outputShape, ArmnnType); + + std::vector inputValues + { + -25.f, -16.f + }; + + std::vector expectedOutputValues + { + -NAN, -NAN + }; + + return Rsqrt2dTestCommon(workloadFactory, memoryManager, + inputTensorInfo, outputTensorInfo, + inputValues, expectedOutputValues); +} + template LayerTestResult SimpleReshapeTestImpl( armnn::IWorkloadFactory& workloadFactory, diff --git a/src/backends/reference/test/RefLayerTests.cpp b/src/backends/reference/test/RefLayerTests.cpp index afeadb9485..b2f71a8920 100644 --- a/src/backends/reference/test/RefLayerTests.cpp +++ b/src/backends/reference/test/RefLayerTests.cpp @@ -463,10 +463,10 @@ ARMNN_AUTO_TEST_CASE(SimpleReshapeQuantisedAsymm8, SimpleReshapeTest) // Rsqrt -ARMNN_AUTO_TEST_CASE(Rsqrt2d, Rsqrt2dTest) -ARMNN_AUTO_TEST_CASE(Rsqrt3d, Rsqrt3dTest) -ARMNN_AUTO_TEST_CASE(RsqrtZero, RsqrtZeroTest) -ARMNN_AUTO_TEST_CASE(RsqrtNegative, RsqrtNegativeTest) +ARMNN_AUTO_TEST_CASE(Rsqrt2d, Rsqrt2dTest) +ARMNN_AUTO_TEST_CASE(Rsqrt3d, Rsqrt3dTest) +ARMNN_AUTO_TEST_CASE(RsqrtZero, RsqrtZeroTest) +ARMNN_AUTO_TEST_CASE(RsqrtNegative, RsqrtNegativeTest) // Permute ARMNN_AUTO_TEST_CASE(SimplePermuteFloat32, SimplePermuteFloat32Test) -- cgit v1.2.1