aboutsummaryrefslogtreecommitdiff
path: root/src/backends/backendsCommon/WorkloadData.cpp
diff options
context:
space:
mode:
authorJames Conroy <james.conroy@arm.com>2019-06-10 17:06:39 +0100
committerMatteo Martincigh <matteo.martincigh@arm.com>2019-06-17 11:16:58 +0000
commit4d1ff588288b1a7a98dd2fd7f2ba5717b8ecf102 (patch)
treea6b8dbd9434b887dab4c9915b0bacea500410517 /src/backends/backendsCommon/WorkloadData.cpp
parentaece4edd329a1d6a66472cb314c49b20dc243183 (diff)
downloadarmnn-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.cpp39
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");
}