MCPcopy Create free account
hub / github.com/ARM-software/armnn / ApplyBackendOptimizations

Function ApplyBackendOptimizations

src/armnn/Network.cpp:1373–1509  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1371}
1372
1373OptimizationResult ApplyBackendOptimizations(OptimizedNetworkImpl* optNetObjPtr,
1374 BackendSettings& backendSettings,
1375 BackendsMap& backends,
1376 const ModelOptions& modelOptions,
1377 Optional<std::vector<std::string>&> errMessages)
1378{
1379 ARMNN_SCOPED_PROFILING_EVENT(Compute::Undefined, "Optimizer_ApplyBackendOptimizations")
1380 OptimizationResult result;
1381
1382 // Get the optimized graph
1383 Graph& optGraph = optNetObjPtr->GetGraph();
1384
1385 // Run backend specific optimizations
1386 for (auto&& selectedBackend : backendSettings.m_SelectedBackends)
1387 {
1388 auto backendObjPtr = backends.find(selectedBackend)->second.get();
1389 if (!backendObjPtr)
1390 {
1391 throw armnn::NullPointerException("backendObjPtr must not be null.");
1392 }
1393
1394
1395 if (selectedBackend == armnn::Compute::GpuAcc || selectedBackend == armnn::Compute::CpuAcc)
1396 {
1397 Optimizer::Pass(optGraph, MakeOptimizations(optimizations::PermuteDepthwiseConv2dWeights()));
1398 Optimizer::Pass(optGraph, MakeOptimizations(optimizations::FusePermuteIntoConstLayer()));
1399 Optimizer::Pass(optGraph, MakeOptimizations(optimizations::FoldPadIntoConvolution2d(),
1400 optimizations::FoldPadIntoDepthwiseConvolution2d(),
1401 optimizations::FoldPadIntoPooling2d()));
1402 }
1403
1404 // Select sub-graphs based on backend
1405 SubgraphViewSelector::Subgraphs subgraphs =
1406 SubgraphViewSelector::SelectSubgraphs(optGraph,
1407 // Select layers assigned to the requested backend
1408 [&backendObjPtr](const Layer& layer)
1409 {
1410
1411 return layer.GetType() != LayerType::Input &&
1412 layer.GetType() != LayerType::Output &&
1413 layer.GetBackendId() == backendObjPtr->GetId();
1414 });
1415 if (subgraphs.empty())
1416 {
1417 // No sub-graphs found, try with next selected backend
1418 continue;
1419 }
1420
1421 // Try to optimize each sub-graph
1422 for (auto& subgraph : subgraphs)
1423 {
1424 // Try to optimize the current sub-graph
1425 ARMNN_SCOPED_PROFILING_EVENT(backendObjPtr->GetId(), "Optimizer_OptimizeSubgraph");
1426 OptimizationViews optimizationViews = backendObjPtr->OptimizeSubgraphView(*subgraph, modelOptions);
1427 if (!optimizationViews.Validate(*subgraph))
1428 {
1429 throw armnn::Exception("optimizationViews must have a valid subgraph.");
1430 }

Callers 1

OptimizeFunction · 0.85

Calls 15

MakeOptimizationsFunction · 0.85
ReportWarningFunction · 0.85
AssignBackendsFunction · 0.85
GetIdMethod · 0.80
emptyMethod · 0.80
GetNumConnectionsMethod · 0.80
GetOutputSlotMethod · 0.80
EraseLayerMethod · 0.80
IsCpuRefMethod · 0.80
GetConnectionMethod · 0.60

Tested by

no test coverage detected