From eb2b329b761ce3206505ed8d2eab071a2f97d5e7 Mon Sep 17 00:00:00 2001 From: Nattapat Chaimanowong Date: Tue, 7 May 2019 12:02:30 +0100 Subject: IVGCVSW-2997 Refactor reference LSTM workload Signed-off-by: Nattapat Chaimanowong Change-Id: I6883f878d9f701a55153292769d2fc0530d2529e --- src/backends/reference/RefLayerSupport.cpp | 39 ++++++++++++++++++++++-------- 1 file changed, 29 insertions(+), 10 deletions(-) (limited to 'src/backends/reference/RefLayerSupport.cpp') 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 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 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, -- cgit v1.2.1