From 77bfb5e32faadb1383d48364a6f54adbff84ad80 Mon Sep 17 00:00:00 2001 From: Aron Virginas-Tar Date: Wed, 16 Oct 2019 17:45:38 +0100 Subject: IVGCVSW-3993 Add frontend and reference workload for ComparisonLayer * Added frontend for ComparisonLayer * Added RefComparisonWorkload * Deprecated and removed Equal and Greater layers and workloads * Updated tests to ensure backward compatibility Signed-off-by: Aron Virginas-Tar Change-Id: Id50c880be1b567c531efff919c0c366d0a71cbe9 --- .../test/layerTests/ComparisonTestImpl.hpp | 126 +++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100644 src/backends/backendsCommon/test/layerTests/ComparisonTestImpl.hpp (limited to 'src/backends/backendsCommon/test/layerTests/ComparisonTestImpl.hpp') diff --git a/src/backends/backendsCommon/test/layerTests/ComparisonTestImpl.hpp b/src/backends/backendsCommon/test/layerTests/ComparisonTestImpl.hpp new file mode 100644 index 0000000000..6ce9b306c0 --- /dev/null +++ b/src/backends/backendsCommon/test/layerTests/ComparisonTestImpl.hpp @@ -0,0 +1,126 @@ +// +// Copyright © 2019 Arm Ltd. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#pragma once + +#include "LayerTestResult.hpp" + +#include + +#include + +#include +#include +#include +#include + +#include +#include + +#include + +template > +LayerTestResult ComparisonTestImpl( + armnn::IWorkloadFactory & workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager, + const armnn::ComparisonDescriptor& descriptor, + const unsigned int shape0[NumDims], + std::vector values0, + float quantScale0, + int quantOffset0, + const unsigned int shape1[NumDims], + std::vector values1, + float quantScale1, + int quantOffset1, + const unsigned int outShape[NumDims], + std::vector outValues, + float outQuantScale, + int outQuantOffset) +{ + armnn::TensorInfo inputTensorInfo0{NumDims, shape0, ArmnnInType}; + armnn::TensorInfo inputTensorInfo1{NumDims, shape1, ArmnnInType}; + armnn::TensorInfo outputTensorInfo{NumDims, outShape, armnn::DataType::Boolean}; + + auto input0 = MakeTensor(inputTensorInfo0, values0); + auto input1 = MakeTensor(inputTensorInfo1, values1); + + inputTensorInfo0.SetQuantizationScale(quantScale0); + inputTensorInfo0.SetQuantizationOffset(quantOffset0); + + inputTensorInfo1.SetQuantizationScale(quantScale1); + inputTensorInfo1.SetQuantizationOffset(quantOffset1); + + outputTensorInfo.SetQuantizationScale(outQuantScale); + outputTensorInfo.SetQuantizationOffset(outQuantOffset); + + LayerTestResult ret(outputTensorInfo); + + std::unique_ptr inputHandle0 = workloadFactory.CreateTensorHandle(inputTensorInfo0); + std::unique_ptr inputHandle1 = workloadFactory.CreateTensorHandle(inputTensorInfo1); + std::unique_ptr outputHandle = workloadFactory.CreateTensorHandle(outputTensorInfo); + + armnn::ComparisonQueueDescriptor qDescriptor; + qDescriptor.m_Parameters = descriptor; + + armnn::WorkloadInfo info; + AddInputToWorkload(qDescriptor, info, inputTensorInfo0, inputHandle0.get()); + AddInputToWorkload(qDescriptor, info, inputTensorInfo1, inputHandle1.get()); + AddOutputToWorkload(qDescriptor, info, outputTensorInfo, outputHandle.get()); + + std::unique_ptr workload = workloadFactory.CreateComparison(qDescriptor, info); + + inputHandle0->Allocate(); + inputHandle1->Allocate(); + outputHandle->Allocate(); + + CopyDataToITensorHandle(inputHandle0.get(), input0.origin()); + CopyDataToITensorHandle(inputHandle1.get(), input1.origin()); + + workload->PostAllocationConfigure(); + ExecuteWorkload(*workload, memoryManager); + + CopyDataFromITensorHandle(ret.output.origin(), outputHandle.get()); + + ret.outputExpected = MakeTensor(outputTensorInfo, outValues); + ret.compareBoolean = true; + + return ret; +} + +template > +LayerTestResult ComparisonTestImpl( + armnn::IWorkloadFactory & workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr & memoryManager, + const armnn::ComparisonDescriptor& descriptor, + const unsigned int shape0[NumDims], + std::vector values0, + const unsigned int shape1[NumDims], + std::vector values1, + const unsigned int outShape[NumDims], + std::vector outValues, + float qScale = 10.f, + int qOffset = 0) +{ + return ComparisonTestImpl( + workloadFactory, + memoryManager, + descriptor, + shape0, + values0, + qScale, + qOffset, + shape1, + values1, + qScale, + qOffset, + outShape, + outValues, + qScale, + qOffset); +} -- cgit v1.2.1