From 6440ce89abb06e090d2b3cf91bafc14277072475 Mon Sep 17 00:00:00 2001 From: Tracy Narine Date: Wed, 20 Sep 2023 14:19:07 +0100 Subject: IVGCVSW-7504 Create a backend specific optimization to fuse ADD+MUL+Add+(Activation) in CpuAcc * Adding CpuAcc backend optimization to fuse add+mul+add into one layer * Tests added/enhanced * Also added optional extended parameter to Graph::Print() and throw macros that could be used in place of assert Signed-off-by: Tracy Narine Signed-off-by: Teresa Charlin Change-Id: I5f8d094b969a130d8c2c7b4da07426313a9fea76 --- src/backends/aclCommon/ArmComputeSubgraphUtils.hpp | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) (limited to 'src/backends/aclCommon') diff --git a/src/backends/aclCommon/ArmComputeSubgraphUtils.hpp b/src/backends/aclCommon/ArmComputeSubgraphUtils.hpp index 90c0fd5890..a44acb0f54 100644 --- a/src/backends/aclCommon/ArmComputeSubgraphUtils.hpp +++ b/src/backends/aclCommon/ArmComputeSubgraphUtils.hpp @@ -356,4 +356,25 @@ void ReplaceLayers(OptimizationViews& optimizationViews, optimizationViews.AddSubstitution({substitutionSubgraph, replacementSubgraph}); } +// +// Substitute a multi-layer subgraph with one new layer +// +template +void ReplaceMultipleLayers(OptimizationViews& optimizationViews, + std::vector& originalLayers, + LayerType* baseLayer, + const std::vector inputLayersSlotLists, + const std::vector outputLayersSlotLists) +{ + std::list originalLayerList(originalLayers.begin(), originalLayers.end()); + + SubgraphView substitutionSubgraph( + std::move(originalLayerList), + CreateIInputsFromSlotLists(originalLayers, inputLayersSlotLists), + CreateIOutputsFromSlotLists(originalLayers, outputLayersSlotLists)); + SubgraphView replacementSubgraph(baseLayer); + + optimizationViews.AddSubstitution({substitutionSubgraph, replacementSubgraph}); +} + } // namespace armnn -- cgit v1.2.1