From e0dbedfa9fad91c94ae610c48057fc7c24ceb0d4 Mon Sep 17 00:00:00 2001 From: Ellen Norris-Thompson Date: Mon, 24 Jun 2019 09:23:38 +0100 Subject: IVGCVSW-3250 Extend the Gather workload for QSymm16 support * Add LayerTests and EndToEndTests for QSymm16 * Updated GatherQueueDescriptor::Validate function * Reimplemented RefLayerSupport::IsGatherSupported Signed-off-by: Ellen Norris-Thompson Change-Id: I5b4df55d31b5ee3c5563d2df17b412a387c27595 --- src/backends/backendsCommon/WorkloadData.cpp | 26 +++++++++++++++++++++---- src/backends/backendsCommon/WorkloadFactory.cpp | 2 +- src/backends/backendsCommon/test/LayerTests.cpp | 22 +++++++++++++++++++++ src/backends/backendsCommon/test/LayerTests.hpp | 12 ++++++++++++ 4 files changed, 57 insertions(+), 5 deletions(-) (limited to 'src/backends/backendsCommon') diff --git a/src/backends/backendsCommon/WorkloadData.cpp b/src/backends/backendsCommon/WorkloadData.cpp index 5ca492888f..cd40097e74 100644 --- a/src/backends/backendsCommon/WorkloadData.cpp +++ b/src/backends/backendsCommon/WorkloadData.cpp @@ -1597,23 +1597,41 @@ void RsqrtQueueDescriptor::Validate(const WorkloadInfo& workloadInfo) const void GatherQueueDescriptor::Validate(const WorkloadInfo& workloadInfo) const { - ValidateNumInputs(workloadInfo, "GatherQueueDescriptor", 2); - ValidateNumOutputs(workloadInfo, "GatherQueueDescriptor", 1); + const std::string GatherQueueDescriptorStr = "GatherQueueDescriptor"; + + ValidateNumInputs(workloadInfo, GatherQueueDescriptorStr, 2); + ValidateNumOutputs(workloadInfo, GatherQueueDescriptorStr, 1); const TensorInfo& indices = workloadInfo.m_InputTensorInfos[1]; if (indices.GetDataType() != DataType::Signed32) { - throw InvalidArgumentException("GatherQueueDescriptor: Indices tensor type must be int32."); + throw InvalidArgumentException(GatherQueueDescriptorStr + ": Indices tensor type must be int32."); } + std::vector supportedTypes = + { + DataType::Float16, + DataType::Float32, + DataType::QuantisedAsymm8, + DataType::QuantisedSymm16 + }; + + ValidateDataTypes(workloadInfo.m_InputTensorInfos[0], + supportedTypes, + GatherQueueDescriptorStr); + + ValidateTensorDataTypesMatch(workloadInfo.m_InputTensorInfos[0], + workloadInfo.m_OutputTensorInfos[0], + GatherQueueDescriptorStr, "Input", "Output"); + const TensorInfo& params = workloadInfo.m_InputTensorInfos[0]; const TensorInfo& output = workloadInfo.m_OutputTensorInfos[0]; unsigned int paramsDim = params.GetNumDimensions(); unsigned int indicesDim = indices.GetNumDimensions(); unsigned int outputDim = paramsDim - 1 + indicesDim; - ValidateTensorNumDimensions(output, "GatherQueueDescriptor", outputDim, "output"); + ValidateTensorNumDimensions(output, GatherQueueDescriptorStr, outputDim, "output"); } void DetectionPostProcessQueueDescriptor::Validate(const WorkloadInfo& workloadInfo) const diff --git a/src/backends/backendsCommon/WorkloadFactory.cpp b/src/backends/backendsCommon/WorkloadFactory.cpp index 2fba3b7059..7cda3fe884 100644 --- a/src/backends/backendsCommon/WorkloadFactory.cpp +++ b/src/backends/backendsCommon/WorkloadFactory.cpp @@ -323,7 +323,7 @@ bool IWorkloadFactory::IsLayerSupported(const BackendId& backendId, const TensorInfo& input1 = layer.GetInputSlot(1).GetConnection()->GetTensorInfo(); const TensorInfo& output = layer.GetOutputSlot(0).GetTensorInfo(); result = layerSupportObject->IsGatherSupported(OverrideDataType(input0, dataType), - OverrideDataType(input1, dataType), + input1, OverrideDataType(output, dataType), reason); break; diff --git a/src/backends/backendsCommon/test/LayerTests.cpp b/src/backends/backendsCommon/test/LayerTests.cpp index 64b9676a4b..a625097fdb 100644 --- a/src/backends/backendsCommon/test/LayerTests.cpp +++ b/src/backends/backendsCommon/test/LayerTests.cpp @@ -9551,6 +9551,13 @@ LayerTestResult Gather1DParamsUint8Test( return Gather1DParamsTestImpl(workloadFactory, memoryManager); } +LayerTestResult Gather1DParamsInt16Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) +{ + return Gather1DParamsTestImpl(workloadFactory, memoryManager); +} + LayerTestResult GatherMultiDimParamsFloatTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) @@ -9565,6 +9572,13 @@ LayerTestResult GatherMultiDimParamsUint8Test( return GatherMultiDimParamsTestImpl(workloadFactory, memoryManager); } +LayerTestResult GatherMultiDimParamsInt16Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) +{ + return GatherMultiDimParamsTestImpl(workloadFactory, memoryManager); +} + LayerTestResult GatherMultiDimParamsMultiDimIndicesFloatTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) @@ -9580,6 +9594,14 @@ LayerTestResult GatherMultiDimParamsMultiDimIndicesUint8Test( workloadFactory, memoryManager); } +LayerTestResult GatherMultiDimParamsMultiDimIndicesInt16Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) +{ + return GatherMultiDimParamsMultiDimIndicesTestImpl( + workloadFactory, memoryManager); +} + LayerTestResult DequantizeSimpleUint8Test( 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 77adca1ac7..d54d41e5f5 100644 --- a/src/backends/backendsCommon/test/LayerTests.hpp +++ b/src/backends/backendsCommon/test/LayerTests.hpp @@ -1909,6 +1909,10 @@ LayerTestResult Gather1DParamsUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); +LayerTestResult Gather1DParamsInt16Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + LayerTestResult GatherMultiDimParamsFloatTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); @@ -1917,6 +1921,10 @@ LayerTestResult GatherMultiDimParamsUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); +LayerTestResult GatherMultiDimParamsInt16Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + LayerTestResult GatherMultiDimParamsMultiDimIndicesFloatTest( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); @@ -1925,6 +1933,10 @@ LayerTestResult GatherMultiDimParamsMultiDimIndicesUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); +LayerTestResult GatherMultiDimParamsMultiDimIndicesInt16Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + LayerTestResult DequantizeSimpleUint8Test( armnn::IWorkloadFactory& workloadFactory, const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -- cgit v1.2.1