diff options
author | Nattapat Chaimanowong <nattapat.chaimanowong@arm.com> | 2019-05-07 12:02:30 +0100 |
---|---|---|
committer | derek.lamberti <derek.lamberti@arm.com> | 2019-05-07 12:15:38 +0000 |
commit | eb2b329b761ce3206505ed8d2eab071a2f97d5e7 (patch) | |
tree | a236bea2077d391fdae90cdbee866f6754897623 /src/backends/reference/RefLayerSupport.cpp | |
parent | 5cf4d1c29a36bb1d675a7cbe2d24b688deb7d160 (diff) | |
download | armnn-eb2b329b761ce3206505ed8d2eab071a2f97d5e7.tar.gz |
IVGCVSW-2997 Refactor reference LSTM workload
Signed-off-by: Nattapat Chaimanowong <nattapat.chaimanowong@arm.com>
Change-Id: I6883f878d9f701a55153292769d2fc0530d2529e
Diffstat (limited to 'src/backends/reference/RefLayerSupport.cpp')
-rw-r--r-- | src/backends/reference/RefLayerSupport.cpp | 39 |
1 files changed, 29 insertions, 10 deletions
diff --git a/src/backends/reference/RefLayerSupport.cpp b/src/backends/reference/RefLayerSupport.cpp index 1b1f0ce1c6..67c13c3f84 100644 --- a/src/backends/reference/RefLayerSupport.cpp +++ b/src/backends/reference/RefLayerSupport.cpp @@ -594,12 +594,6 @@ bool RefLayerSupport::IsLstmSupported(const TensorInfo& input, const TensorInfo* cellToOutputWeights, Optional<std::string&> reasonIfUnsupported) const { - ignore_unused(outputStateIn); - ignore_unused(cellStateIn); - ignore_unused(scratchBuffer); - ignore_unused(outputStateOut); - ignore_unused(cellStateOut); - ignore_unused(output); ignore_unused(descriptor); ignore_unused(inputToForgetWeights); ignore_unused(inputToCellWeights); @@ -618,10 +612,35 @@ bool RefLayerSupport::IsLstmSupported(const TensorInfo& input, ignore_unused(projectionBias); ignore_unused(cellToForgetWeights); ignore_unused(cellToOutputWeights); - return IsSupportedForDataTypeRef(reasonIfUnsupported, - input.GetDataType(), - &TrueFunc<>, - &FalseFuncU8<>); + + bool supported = true; + + std::array<DataType,2> supportedTypes = { + DataType::Float32 + }; + + supported &= CheckSupportRule(TypeAnyOf(input, supportedTypes), reasonIfUnsupported, + "Reference Lstm: input is not a supported type."); + + supported &= CheckSupportRule(TypesAreEqual(input, outputStateIn), reasonIfUnsupported, + "Reference Lstm: input and outputStateIn types are mismatched"); + + supported &= CheckSupportRule(TypesAreEqual(input, cellStateIn), reasonIfUnsupported, + "Reference Lstm: input and cellStateIn types are mismatched"); + + supported &= CheckSupportRule(TypesAreEqual(input, scratchBuffer), reasonIfUnsupported, + "Reference Lstm: input and scratchBuffer types are mismatched"); + + supported &= CheckSupportRule(TypesAreEqual(input, outputStateOut), reasonIfUnsupported, + "Reference Lstm: input and outputStateOut types are mismatched"); + + supported &= CheckSupportRule(TypesAreEqual(input, cellStateOut), reasonIfUnsupported, + "Reference Lstm: input and cellStateOut types are mismatched"); + + supported &= CheckSupportRule(TypesAreEqual(input, output), reasonIfUnsupported, + "Reference Lstm: input and output types are mismatched"); + + return supported; } bool RefLayerSupport::IsMaximumSupported(const TensorInfo& input0, |