diff options
-rw-r--r-- | src/backends/aclCommon/ArmComputeSubgraphUtils.hpp | 27 | ||||
-rw-r--r-- | src/backends/cl/ClBackend.cpp | 3 | ||||
-rw-r--r-- | src/backends/neon/NeonBackend.cpp | 3 |
3 files changed, 31 insertions, 2 deletions
diff --git a/src/backends/aclCommon/ArmComputeSubgraphUtils.hpp b/src/backends/aclCommon/ArmComputeSubgraphUtils.hpp index 860d88df80..a0fca46330 100644 --- a/src/backends/aclCommon/ArmComputeSubgraphUtils.hpp +++ b/src/backends/aclCommon/ArmComputeSubgraphUtils.hpp @@ -45,6 +45,33 @@ SubgraphView::OutputSlots CreateOutputsFrom(const std::vector<Layer*>& layers) return result; } +bool checkDataTypeInputandOutput(const Layer& layer) +{ + auto inputInfo = layer.GetInputSlot(0).GetConnection()->GetTensorInfo(); + auto outputInfo = layer.GetOutputSlot(0).GetTensorInfo(); + bool sameDataType = (inputInfo.GetDataType() == outputInfo.GetDataType()); + + // Check is same quantization info (same scale and offset) + if (sameDataType) + { + if (IsQuantizedType(inputInfo.GetDataType())) + { + bool sameScale = (inputInfo.GetQuantizationScale() == outputInfo.GetQuantizationScale()); + bool sameOffset = (inputInfo.GetQuantizationOffset() == outputInfo.GetQuantizationOffset()); + + return (sameScale && sameOffset); + } + else + { + return true; + } + } + else + { + return false; + } +} + } // namespace inline void ReportUntouchedLayers(OptimizationViews& optimizationViews, std::map<LayerGuid, Layer*> untouched) diff --git a/src/backends/cl/ClBackend.cpp b/src/backends/cl/ClBackend.cpp index 80c7969e91..928760ef5f 100644 --- a/src/backends/cl/ClBackend.cpp +++ b/src/backends/cl/ClBackend.cpp @@ -187,7 +187,8 @@ OptimizationViews ClBackend::OptimizeSubgraphView(const SubgraphView& subgraph, { for (auto&& childInput : output->GetConnections()) { - if (childInput->GetOwningLayer().GetType() == LayerType::Activation) + if ((childInput->GetOwningLayer().GetType() == LayerType::Activation) && + (checkDataTypeInputandOutput(childInput->GetOwningLayer()))) { Layer& child = childInput->GetOwningLayer(); diff --git a/src/backends/neon/NeonBackend.cpp b/src/backends/neon/NeonBackend.cpp index 240456f44b..d48b32bb45 100644 --- a/src/backends/neon/NeonBackend.cpp +++ b/src/backends/neon/NeonBackend.cpp @@ -163,7 +163,8 @@ OptimizationViews NeonBackend::OptimizeSubgraphView(const SubgraphView& subgraph { for (auto&& childInput : output->GetConnections()) { - if (childInput->GetOwningLayer().GetType() == LayerType::Activation) + if ((childInput->GetOwningLayer().GetType() == LayerType::Activation) && + (checkDataTypeInputandOutput(childInput->GetOwningLayer()))) { Layer& child = childInput->GetOwningLayer(); |