From cbfd718464b8ac41f0338ae6565d8213d24c0a2a Mon Sep 17 00:00:00 2001 From: Cathal Corbett Date: Wed, 15 Dec 2021 17:12:59 +0000 Subject: IVGCVSW-6632 OptimizationViews: has INetwork rather than Graph for holding layers * Deprecate the GetGraph() function in OptimizationViews & remove/fix occurances where OptimizationViews.GetGraph() is called. * OptimizationViews has member INetworkPtr. * OptimizationViews has GetINetwork() method. * Unit test added to OptimizationViewsTests.cpp. Signed-off-by: Cathal Corbett Change-Id: Ifc1e53f1c34d786502279631942f0472f401038e --- src/backends/backendsCommon/test/MockBackend.cpp | 12 ++-- .../backendsCommon/test/OptimizationViewsTests.cpp | 71 +++++++++++++++++++++- 2 files changed, 77 insertions(+), 6 deletions(-) (limited to 'src/backends/backendsCommon/test') diff --git a/src/backends/backendsCommon/test/MockBackend.cpp b/src/backends/backendsCommon/test/MockBackend.cpp index 4bdb8ce786..a34cfe98fe 100644 --- a/src/backends/backendsCommon/test/MockBackend.cpp +++ b/src/backends/backendsCommon/test/MockBackend.cpp @@ -187,12 +187,16 @@ OptimizationViews MockBackend::OptimizeSubgraphView(const SubgraphView& subgraph { ARMNN_ASSERT(supportedSubgraph != nullptr); - PreCompiledLayer* preCompiledLayer = - optimizationViews.GetGraph().AddLayer( + CompiledBlobPtr blobPtr; + BackendId backend = MockBackendId(); + + IConnectableLayer* preCompiledLayer = + optimizationViews.GetINetwork()->AddPrecompiledLayer( PreCompiledDescriptor(supportedSubgraph->GetNumInputSlots(), supportedSubgraph->GetNumOutputSlots()), - "pre-compiled"); - preCompiledLayer->SetBackendId(MockBackendId()); + blobPtr, + backend, + nullptr); SubgraphView substitutionSubgraph(*supportedSubgraph); SubgraphView replacementSubgraph(preCompiledLayer); diff --git a/src/backends/backendsCommon/test/OptimizationViewsTests.cpp b/src/backends/backendsCommon/test/OptimizationViewsTests.cpp index bbae229927..c40c5131a8 100644 --- a/src/backends/backendsCommon/test/OptimizationViewsTests.cpp +++ b/src/backends/backendsCommon/test/OptimizationViewsTests.cpp @@ -55,7 +55,7 @@ TEST_CASE("OptimizedViewsSubgraphLayerCount") { OptimizationViews view; // Construct a graph with 3 layers - Graph& baseGraph = view.GetGraph(); + Graph baseGraph; Layer* const inputLayer = baseGraph.AddLayer(0, "input"); @@ -119,11 +119,78 @@ TEST_CASE("OptimizedViewsSubgraphLayerCount") CHECK(view.Validate(*originalSubgraph)); } + +TEST_CASE("OptimizedViewsSubgraphLayerCountUsingGetINetwork") +{ + OptimizationViews view; + + IConnectableLayer* const inputLayer = view.GetINetwork()->AddInputLayer(0, "input"); + + DepthwiseConvolution2dDescriptor convDescriptor; + PreCompiledDescriptor substitutionLayerDescriptor(1, 1); + CompiledBlobPtr blobPtr; + BackendId backend = Compute::CpuRef; + + Layer* convLayer1 = PolymorphicDowncast( + view.GetINetwork()->AddDepthwiseConvolution2dLayer(convDescriptor, + ConstTensor(), + Optional(), + "conv1")); + + Layer* convLayer2 = PolymorphicDowncast( + view.GetINetwork()->AddDepthwiseConvolution2dLayer(convDescriptor, + ConstTensor(), + Optional(), + "conv2")); + + IConnectableLayer* const outputLayer = view.GetINetwork()->AddOutputLayer(0, "output"); + + inputLayer->GetOutputSlot(0).Connect(convLayer1->GetInputSlot(0)); + convLayer1->GetOutputSlot(0).Connect(convLayer2->GetInputSlot(0)); + convLayer2->GetOutputSlot(0).Connect(outputLayer->GetInputSlot(0)); + + // Subgraph for a failed layer + SubgraphViewSelector::SubgraphViewPtr failedSubgraph = CreateSubgraphViewFrom(CreateInputsFrom({convLayer1}), + CreateOutputsFrom({convLayer1}), + {convLayer1}); + // Subgraph for an untouched layer + SubgraphViewSelector::SubgraphViewPtr untouchedSubgraph = CreateSubgraphViewFrom(CreateInputsFrom({convLayer2}), + CreateOutputsFrom({convLayer2}), + {convLayer2}); + + // Create a Network containing a layer to substitute in + NetworkImpl net; + Layer* substitutionpreCompiledLayer = PolymorphicDowncast( + net.AddPrecompiledLayer(substitutionLayerDescriptor, blobPtr, backend)); + + // Subgraph for a substitution layer + SubgraphViewSelector::SubgraphViewPtr substitutionSubgraph = + CreateSubgraphViewFrom(CreateInputsFrom({substitutionpreCompiledLayer}), + CreateOutputsFrom({substitutionpreCompiledLayer}), + {substitutionpreCompiledLayer}); + + view.AddFailedSubgraph(SubgraphView(*failedSubgraph)); + view.AddUntouchedSubgraph(SubgraphView(*untouchedSubgraph)); + + SubgraphViewSelector::SubgraphViewPtr baseSubgraph = CreateSubgraphViewFrom(CreateInputsFrom({convLayer1}), + CreateOutputsFrom({convLayer2}), + {substitutionpreCompiledLayer}); + view.AddSubstitution({*baseSubgraph, *substitutionSubgraph}); + + // Construct original subgraph to compare against + SubgraphViewSelector::SubgraphViewPtr originalSubgraph = + CreateSubgraphViewFrom(CreateInputsFrom({convLayer1}), + CreateOutputsFrom({convLayer2}), + {convLayer1, convLayer2, substitutionpreCompiledLayer}); + + CHECK(view.Validate(*originalSubgraph)); +} + TEST_CASE("OptimizedViewsSubgraphLayerCountFailValidate") { OptimizationViews view; // Construct a graph with 3 layers - Graph& baseGraph = view.GetGraph(); + Graph baseGraph; Layer* const inputLayer = baseGraph.AddLayer(0, "input"); -- cgit v1.2.1