From 7deb9090bf7537571ca04f418a5c98b9f1f8912e Mon Sep 17 00:00:00 2001 From: Fang Xu Date: Fri, 3 Mar 2023 13:25:39 +0530 Subject: [PATCH] [CPU] Enable conditional compilation for graph optimizer (#15478) --- src/plugins/intel_cpu/src/graph_optimizer.cpp | 64 +++++++++++++++++++ src/plugins/intel_cpu/src/itt.h | 5 ++ 2 files changed, 69 insertions(+) diff --git a/src/plugins/intel_cpu/src/graph_optimizer.cpp b/src/plugins/intel_cpu/src/graph_optimizer.cpp index 90efca900dc..3f8e80ad1d9 100644 --- a/src/plugins/intel_cpu/src/graph_optimizer.cpp +++ b/src/plugins/intel_cpu/src/graph_optimizer.cpp @@ -230,12 +230,16 @@ void GraphOptimizer::FuseConvolutionMatMulDeconvAndBias(Graph &graph) { continue; } + CPU_GRAPH_OPTIMIZER_SCOPE(FuseConvolutionMatMulDeconvAndBias_ParentNode); + auto childNode = parentNode->getChildEdgeAt(0)->getChild(); if (!isSuitableChildNode(parentNode, childNode)) { parent++; continue; } + CPU_GRAPH_OPTIMIZER_SCOPE(FuseConvolutionMatMulDeconvAndBias_ChildNode); + auto childs = childNode->childEdges; auto parents = childNode->parentEdges; @@ -331,12 +335,16 @@ void GraphOptimizer::FuseDeconvolutionAndSimpleOperation(Graph &graph) { continue; } + CPU_GRAPH_OPTIMIZER_SCOPE(FuseDeconvolutionAndSimpleOperation_ParentNode); + auto childNode = parentNode->getChildEdgeAt(0)->getChild(); if (!parentNode->canFuse(childNode)) { parent++; continue; } + CPU_GRAPH_OPTIMIZER_SCOPE(FuseDeconvolutionAndSimpleOperation_ChildNode); + childNode->fuseInto(parentNode); auto parentEdges = childNode->parentEdges; @@ -409,12 +417,16 @@ void GraphOptimizer::FuseMultiplyAndAdd(Graph &graph) { continue; } + CPU_GRAPH_OPTIMIZER_SCOPE(FuseMultiplyAndAdd_ParentNode); + auto childNode = parentNode->getChildEdgeAt(0)->getChild(); if (!isSuitableChildNode(parentNode, childNode)) { parent++; continue; } + CPU_GRAPH_OPTIMIZER_SCOPE(FuseMultiplyAndAdd_ChildNode); + auto childs = childNode->childEdges; auto parents = childNode->parentEdges; @@ -500,12 +512,16 @@ void GraphOptimizer::MergeConvertAndScaleShift(Graph& graph) { continue; } + CPU_GRAPH_OPTIMIZER_SCOPE(MergeConvertAndScaleShift_ParentNode); + auto childNode = parentNode->getChildEdgeAt(0)->getChild(); if (!isSuitableChildNode(childNode)) { parent++; continue; } + CPU_GRAPH_OPTIMIZER_SCOPE(MergeConvertAndScaleShift_ChildNode); + auto parents = parentNode->parentEdges; for (size_t i = 0; i < parents.size(); i++) { auto p_edge = parents[i].lock(); @@ -701,6 +717,8 @@ void GraphOptimizer::FuseConvolutionAndZeroPoints(Graph &graph) { auto conv = graphNodes[i]; if (!isSuitableConvNode(conv)) continue; + CPU_GRAPH_OPTIMIZER_SCOPE(FuseConvolutionAndZeroPoints_ConvNode); + auto dataEltwise = conv->getParentEdgesAtPort(0)[0]->getParent(); auto weightsEltwise = conv->getParentEdgesAtPort(1)[0]->getParent(); if (initializeInputZeroPoints(conv, dataEltwise, weightsEltwise)) { @@ -742,6 +760,8 @@ void GraphOptimizer::FuseFullyConnectedAndSimpleOperation(Graph &graph) { continue; } + CPU_GRAPH_OPTIMIZER_SCOPE(FuseFullyConnectedAndSimpleOperation_ParentNode); + auto childNode = parentNode->getChildEdgeAt(0)->getChild(); if (!parentNode->canFuse(childNode)) { parent++; @@ -786,6 +806,8 @@ void GraphOptimizer::FuseMatMulAndSimpleOperation(Graph &graph) { continue; } + CPU_GRAPH_OPTIMIZER_SCOPE(FuseMatMulAndSimpleOperation_ParentNode); + auto childNode = parentNode->getChildEdgeAt(0)->getChild(); if (!parentNode->canFuse(childNode)) { parent++; @@ -932,9 +954,13 @@ void GraphOptimizer::FuseConvolutionAndDWConvolution(Graph &graph) { auto parentConvNode = graphNodes[i]; if (!isSuitableParentConvolution(parentConvNode)) continue; + CPU_GRAPH_OPTIMIZER_SCOPE(FuseConvolutionAndDWConvolution_ParentConv); + auto childConvNode = parentConvNode->getChildEdgeAt(0)->getChild(); if (!isSuitableChildConvolution(parentConvNode, childConvNode)) continue; + CPU_GRAPH_OPTIMIZER_SCOPE(FuseConvolutionAndDWConvolution_ChildConv); + if (!isFusingWorthwhile(parentConvNode, childConvNode)) continue; parentConvNode->addFusedNode(childConvNode); @@ -965,6 +991,8 @@ void GraphOptimizer::FuseConvolutionAndSimpleOperationThroughMaxPool(Graph &grap continue; } + CPU_GRAPH_OPTIMIZER_SCOPE(FuseConvolutionAndSimpleOperationThroughMaxPool_ParentNode); + auto childNode = parentNode->getChildEdgeAt(0)->getChild(); if (childNode->getAlgorithm() != Algorithm::PoolingMax || childNode->getChildEdges().size() != 1) { parent++; @@ -1023,6 +1051,9 @@ void GraphOptimizer::FuseConvolutionAndSimpleOperation(Graph &graph) { parent++; continue; } + + CPU_GRAPH_OPTIMIZER_SCOPE(FuseConvolutionAndSimpleOperation_ParentNode); + const auto parentNodeType = parentNode->getType(); auto childNode = parentNode->getChildEdgeAt(0)->getChild(); @@ -1074,9 +1105,13 @@ void GraphOptimizer::FusePoolingAndFakeQuantize(Graph &graph) { auto parent = graphNodes[i]; if (!isSuitableParentNode(parent)) continue; + CPU_GRAPH_OPTIMIZER_SCOPE(FusePoolingAndFakeQuantize_ParentNode); + auto child = parent->getChildEdgeAt(0)->getChild(); if (!isSuitableChildNode(child)) continue; + CPU_GRAPH_OPTIMIZER_SCOPE(FusePoolingAndFakeQuantize_ChildNode); + child->fuseInto(parent); auto parents = child->parentEdges; @@ -1401,6 +1436,8 @@ void GraphOptimizer::FuseMVNAndSimpleOperation(Graph &graph) { continue; } + CPU_GRAPH_OPTIMIZER_SCOPE(FuseMVNAndSimpleOperation_ParentNode); + auto childNode = parentNode->getChildEdgeAt(0)->getChild(); if (!parentNode->canFuse(childNode)) { parent++; @@ -1456,12 +1493,16 @@ void GraphOptimizer::FuseInterpolateAndSimpleOperation(Graph &graph) { continue; } + CPU_GRAPH_OPTIMIZER_SCOPE(FuseInterpolateAndSimpleOperation_ParentNode); + auto childNode = parentNode->getChildEdgeAt(0)->getChild(); if (!isSuitableChildNode(parentNode, childNode)) { parent++; continue; } + CPU_GRAPH_OPTIMIZER_SCOPE(FuseInterpolateAndSimpleOperation_ChildNode); + childNode->fuseInto(parentNode); if (childNode->getType() == Type::FakeQuantize || childNode->getType() == Type::Eltwise) { @@ -1494,6 +1535,8 @@ void GraphOptimizer::FuseNormalizeL2AndSimpleOperation(Graph &graph) { continue; } + CPU_GRAPH_OPTIMIZER_SCOPE(FuseNormalizeL2AndSimpleOperation_ParentNode); + auto childNode = parentNode->getChildEdgeAt(0)->getChild(); if (!parentNode->canFuse(childNode)) { parent++; @@ -1532,6 +1575,8 @@ void GraphOptimizer::FuseReduceAndSimpleOperation(Graph &graph) { continue; } + CPU_GRAPH_OPTIMIZER_SCOPE(FuseReduceAndSimpleOperation_ParentNode); + auto childNode = parentNode->getChildEdgeAt(0)->getChild(); if (!parentNode->canFuse(childNode)) { parent++; @@ -1594,6 +1639,8 @@ void GraphOptimizer::FuseEltwiseAndSimple(Graph &graph) { continue; } + CPU_GRAPH_OPTIMIZER_SCOPE(FuseEltwiseAndSimple_ParentNode); + auto childNode = parentNode->getChildEdgeAt(0)->getChild(); if ((parentNode->isDynamicNode() && !childNode->isDynamicNode()) || (!parentNode->isDynamicNode() && childNode->isDynamicNode())) { @@ -1606,6 +1653,8 @@ void GraphOptimizer::FuseEltwiseAndSimple(Graph &graph) { continue; } + CPU_GRAPH_OPTIMIZER_SCOPE(FuseEltwiseAndSimple_ChildNode); + childNode->fuseInto(parentNode); if (childNode->getType() == Type::FakeQuantize) { @@ -1799,9 +1848,13 @@ void GraphOptimizer::FuseClampAndFakeQuantize(Graph &graph) { auto parent = graphNodes[i]; if (!isSuitableClampNode(parent)) continue; + CPU_GRAPH_OPTIMIZER_SCOPE(FuseClampAndFakeQuantize_ClalmpNode); + auto child = parent->getChildEdgeAt(0)->getChild(); if (!isSuitableFakeQuantizeNode(child)) continue; + CPU_GRAPH_OPTIMIZER_SCOPE(FuseClampAndFakeQuantize_QuantizeNode); + if (fuseClampAndFakeQuantizeNodes(parent, child)) { graph.DropNode(parent); } @@ -1957,9 +2010,13 @@ void GraphOptimizer::FusePerformedAsScaleShiftAndFakeQuantize(Graph &graph) { auto parent = graphNodes[i]; if (!isSuitableScaleShiftNode(parent)) continue; + CPU_GRAPH_OPTIMIZER_SCOPE(FusePerformedAsScaleShiftAndFakeQuantize_ShiftNode); + auto child = parent->getChildEdgeAt(0)->getChild(); if (!isSuitableFakeQuantizeNode(child)) continue; + CPU_GRAPH_OPTIMIZER_SCOPE(FusePerformedAsScaleShiftAndFakeQuantize_QuantizeNode); + if (fuseScaleShiftAndFakeQuantizeNodes(parent, child)) { auto parentEdges = parent->parentEdges; for (auto &parentEdge : parentEdges) { @@ -2163,11 +2220,16 @@ void GraphOptimizer::MergeTransposeAndReorder(Graph &graph) { if (!isSuitableParentNode(parentNode)) { continue; } + + CPU_GRAPH_OPTIMIZER_SCOPE(MergeTransposeAndReorder_ParentNode); + auto childNode = parentNode->getChildEdgeAt(0)->getChild(); if (!isSuitableChildNode(childNode)) { continue; } + CPU_GRAPH_OPTIMIZER_SCOPE(MergeTransposeAndReorder_ChildNode); + if (checkAscendingSummaryOrder(parentNode, childNode)) { mergeTransposeAndReorder(parentNode, childNode); } @@ -2190,6 +2252,8 @@ void GraphOptimizer::reshapeRnnSeq(Graph &graph) { continue; } + CPU_GRAPH_OPTIMIZER_SCOPE(reshapeRnnSeq_ParentNode); + auto childrenEdges = parentNode->getChildEdgesAtPort(0); auto minDims = parentNode->getOutputShapeAtPort(0).getMinDims(); auto maxDims = parentNode->getOutputShapeAtPort(0).getMaxDims(); diff --git a/src/plugins/intel_cpu/src/itt.h b/src/plugins/intel_cpu/src/itt.h index 84d6413004a..4940f9f1bb9 100644 --- a/src/plugins/intel_cpu/src/itt.h +++ b/src/plugins/intel_cpu/src/itt.h @@ -27,10 +27,15 @@ OV_ITT_DOMAIN(intel_cpu_LT); #if defined(SELECTIVE_BUILD_ANALYZER) # define CPU_LPT_SCOPE(region) OV_SCOPE(intel_cpu, region) +# define CPU_GRAPH_OPTIMIZER_SCOPE(region) OV_SCOPE(intel_cpu, region) #elif defined(SELECTIVE_BUILD) # define CPU_LPT_SCOPE(region) \ if (OV_CC_SCOPE_IS_ENABLED(OV_PP_CAT3(intel_cpu, _, region)) == 0) \ throw ov::Exception(std::string(OV_PP_TOSTRING(OV_PP_CAT3(ov_op, _, region))) + " is disabled!") +# define CPU_GRAPH_OPTIMIZER_SCOPE(region) \ + if (OV_CC_SCOPE_IS_ENABLED(OV_PP_CAT3(intel_cpu, _, region)) == 0) \ + throw ov::Exception(std::string(OV_PP_TOSTRING(OV_PP_CAT3(intel_cpu, _, region))) + " is disabled!") #else # define CPU_LPT_SCOPE(region) OV_ITT_SCOPED_TASK(ov::intel_cpu::itt::domains::intel_cpu, OV_PP_TOSTRING(region)) +# define CPU_GRAPH_OPTIMIZER_SCOPE(region) #endif