diff options
author | James Conroy <james.conroy@arm.com> | 2019-06-10 17:06:39 +0100 |
---|---|---|
committer | Matteo Martincigh <matteo.martincigh@arm.com> | 2019-06-17 11:16:58 +0000 |
commit | 4d1ff588288b1a7a98dd2fd7f2ba5717b8ecf102 (patch) | |
tree | a6b8dbd9434b887dab4c9915b0bacea500410517 /src/backends/backendsCommon/WorkloadData.cpp | |
parent | aece4edd329a1d6a66472cb314c49b20dc243183 (diff) | |
download | armnn-4d1ff588288b1a7a98dd2fd7f2ba5717b8ecf102.tar.gz |
IVGCVSW-3221 Refactor Mean ref workload and tests
* Renamed RefMeanFloat32Workload and RefMeanUint8Workload
to RefMeanWorkload, updated references to reflect this
change.
* Refactored RefFloorWorkload to use Decoders/Encoders,
to support the use of multiple data types.
* Deleted reference Unit8 Mean tests as they were
duplicates of the Float32 tests. Refactored these tests
to support multiple data types and updated references.
* Adjusted the values used in the tests' input tensors so
that they are more like floating point numbers
e.g. change 1.0f to 1.5f.
* Replace size_t with unsigned int in Mean ref workload,
for better compatibility with the Encoder/Decoder,
removed some unnecessary casts after this.
* Added ValidateTensorDataTypesMatch() function to
WorkloadData.cpp, added CreateIncorrectDimensionsErrorMsg
function to RefLayerSupport.cpp.
* Added passing and failing tests for ref IsMeanSupported.
Signed-off-by: James Conroy <james.conroy@arm.com>
Change-Id: Id3d44463d1385255c727a497d4026d21a49e7eb2
Diffstat (limited to 'src/backends/backendsCommon/WorkloadData.cpp')
-rw-r--r-- | src/backends/backendsCommon/WorkloadData.cpp | 39 |
1 files changed, 34 insertions, 5 deletions
diff --git a/src/backends/backendsCommon/WorkloadData.cpp b/src/backends/backendsCommon/WorkloadData.cpp index a1d00c6945..1505078b77 100644 --- a/src/backends/backendsCommon/WorkloadData.cpp +++ b/src/backends/backendsCommon/WorkloadData.cpp @@ -271,6 +271,20 @@ void ValidateDataTypes(const TensorInfo& info, } } +//--------------------------------------------------------------- +void ValidateTensorDataTypesMatch(const TensorInfo& first, + const TensorInfo& second, + std::string const& descName, + std::string const& firstName, + std::string const& secondName) +{ + if (first.GetDataType() != second.GetDataType()) + { + throw InvalidArgumentException(descName + ": " + firstName + " & " + secondName + + " must have identical data types."); + } +} + } //namespace void QueueDescriptor::ValidateInputsOutputs(const std::string& descName, @@ -1275,25 +1289,40 @@ void MaximumQueueDescriptor::Validate(const WorkloadInfo& workloadInfo) const void MeanQueueDescriptor::Validate(const WorkloadInfo& workloadInfo) const { - ValidateNumInputs(workloadInfo, "MeanQueueDescriptor", 1); - ValidateNumOutputs(workloadInfo, "MeanQueueDescriptor", 1); + const std::string meanQueueDescString = "MeanQueueDescriptor"; + + ValidateNumInputs(workloadInfo, meanQueueDescString, 1); + ValidateNumOutputs(workloadInfo, meanQueueDescString, 1); + + std::vector<DataType> supportedTypes = + { + DataType::Float32, + DataType::Float16, + DataType::QuantisedAsymm8, + DataType::QuantisedSymm16 + }; const TensorInfo& input = workloadInfo.m_InputTensorInfos[0]; const TensorInfo& output = workloadInfo.m_OutputTensorInfos[0]; + // First check if input tensor data type is supported, then + // check if this data type matches the output tensor data type + ValidateDataTypes(input, supportedTypes, meanQueueDescString); + ValidateTensorDataTypesMatch(input, output, meanQueueDescString, "input", "output"); + if (m_Parameters.m_KeepDims) { - ValidateTensorNumDimensions(output, "MeanQueueDescriptor", input.GetNumDimensions(), "output"); + ValidateTensorNumDimensions(output, meanQueueDescString, input.GetNumDimensions(), "output"); } else if (m_Parameters.m_Axis.empty()) { - ValidateTensorNumDimensions(output, "MeanQueueDescriptor", 1, "output"); + ValidateTensorNumDimensions(output, meanQueueDescString, 1, "output"); } else { auto outputDim = input.GetNumDimensions() - boost::numeric_cast<unsigned int>(m_Parameters.m_Axis.size()); ValidateTensorNumDimensions(output, - "MeanQueueDescriptor", + meanQueueDescString, outputDim > 0 ? outputDim : 1, "output"); } |