From fd627ffaec8fd8801d980b4c91ee7c0607ab6aaf Mon Sep 17 00:00:00 2001 From: Jan Eilers Date: Thu, 25 Feb 2021 17:44:00 +0000 Subject: IVGCVSW-5687 Update Doxygen Docu * Update Doxygen Documentation for 21.02 release Signed-off-by: Jan Eilers Change-Id: I9ed2f9caab038836ea99d7b378d7899fe431a4e5 --- 21.02/classarmnn_1_1_i_optimized_network.xhtml | 602 +++++++++++++++++++++++++ 1 file changed, 602 insertions(+) create mode 100644 21.02/classarmnn_1_1_i_optimized_network.xhtml (limited to '21.02/classarmnn_1_1_i_optimized_network.xhtml') diff --git a/21.02/classarmnn_1_1_i_optimized_network.xhtml b/21.02/classarmnn_1_1_i_optimized_network.xhtml new file mode 100644 index 0000000000..d52159d6cc --- /dev/null +++ b/21.02/classarmnn_1_1_i_optimized_network.xhtml @@ -0,0 +1,602 @@ + + + + + + + + + + + + + +ArmNN: IOptimizedNetwork Class Reference + + + + + + + + + + + + + + + + +
+
+ + + + ArmNN + + + +
+
+  21.02 +
+
+
+ + + + + + + +
+
+ +
+
+
+ +
+ +
+
+ + +
+ +
+ + +
+ +

#include <INetwork.hpp>

+ + + + + + + + + + + + + + +

+Public Member Functions

Status PrintGraph ()
 
Status SerializeToDot (std::ostream &stream) const
 
profiling::ProfilingGuid GetGuid () const
 
 IOptimizedNetwork (std::unique_ptr< Graph > graph)
 
 IOptimizedNetwork (std::unique_ptr< OptimizedNetworkImpl > impl)
 
 ~IOptimizedNetwork ()
 
+ + + +

+Static Public Member Functions

static void Destroy (IOptimizedNetwork *network)
 
+ + + +

+Protected Member Functions

 IOptimizedNetwork (std::unique_ptr< Graph > graph, const ModelOptions &modelOptions)
 
+ + + +

+Protected Attributes

std::unique_ptr< OptimizedNetworkImplpOptimizedNetworkImpl
 
+ + + + + + + + + + +

+Friends

class LoadedNetwork
 
GraphGetGraphForTesting (IOptimizedNetwork *optNetPtr)
 
ModelOptionsGetModelOptionsForTesting (IOptimizedNetwork *optNetPtr)
 
IOptimizedNetworkPtr Optimize (const INetwork &inNetwork, const std::vector< BackendId > &backendPreferences, const IDeviceSpec &deviceSpec, const OptimizerOptions &options, Optional< std::vector< std::string > &> messages)
 Create an optimized version of the network. More...
 
+

Detailed Description

+
+

Definition at line 699 of file INetwork.hpp.

+

Constructor & Destructor Documentation

+ +

◆ IOptimizedNetwork() [1/3]

+ +
+
+ + + + + + + + +
IOptimizedNetwork (std::unique_ptr< Graphgraph)
+
+ +

Definition at line 521 of file Network.cpp.

+ +

Referenced by armnn::Optimize().

+
522  : pOptimizedNetworkImpl(new OptimizedNetworkImpl(std::move(graph))) {}
std::unique_ptr< OptimizedNetworkImpl > pOptimizedNetworkImpl
Definition: INetwork.hpp:725
+
+
+
+ +

◆ IOptimizedNetwork() [2/3]

+ +
+
+ + + + + + + + +
IOptimizedNetwork (std::unique_ptr< OptimizedNetworkImplimpl)
+
+ +

Definition at line 524 of file Network.cpp.

+
525  : pOptimizedNetworkImpl(std::move(impl)) {}
std::unique_ptr< OptimizedNetworkImpl > pOptimizedNetworkImpl
Definition: INetwork.hpp:725
+
+
+
+ +

◆ ~IOptimizedNetwork()

+ +
+
+ + + + + +
+ + + + + + + +
~IOptimizedNetwork ()
+
+default
+
+
+ +

◆ IOptimizedNetwork() [3/3]

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
IOptimizedNetwork (std::unique_ptr< Graphgraph,
const ModelOptionsmodelOptions 
)
+
+protected
+
+ +

Definition at line 527 of file Network.cpp.

+ +

References IOptimizedNetwork::~IOptimizedNetwork().

+
528  : pOptimizedNetworkImpl(new OptimizedNetworkImpl(std::move(graph), modelOptions)) {}
std::unique_ptr< OptimizedNetworkImpl > pOptimizedNetworkImpl
Definition: INetwork.hpp:725
+
+
+
+

Member Function Documentation

+ +

◆ Destroy()

+ +
+
+ + + + + +
+ + + + + + + + +
void Destroy (IOptimizedNetworknetwork)
+
+static
+
+ +

Definition at line 532 of file Network.cpp.

+ +

Referenced by armnn::Optimize().

+
533 {
534  delete network;
535 }
+
+
+ +

◆ GetGuid()

+ +
+
+ + + + + + + +
profiling::ProfilingGuid GetGuid () const
+
+ +

Definition at line 547 of file Network.cpp.

+ +

References IOptimizedNetwork::pOptimizedNetworkImpl.

+
548 {
549  return pOptimizedNetworkImpl->GetGuid();
550 }
std::unique_ptr< OptimizedNetworkImpl > pOptimizedNetworkImpl
Definition: INetwork.hpp:725
+
+
+
+ +

◆ PrintGraph()

+ +
+
+ + + + + + + +
Status PrintGraph ()
+
+ +

Definition at line 537 of file Network.cpp.

+ +

References IOptimizedNetwork::pOptimizedNetworkImpl.

+
538 {
539  return pOptimizedNetworkImpl->PrintGraph();
540 }
std::unique_ptr< OptimizedNetworkImpl > pOptimizedNetworkImpl
Definition: INetwork.hpp:725
+
+
+
+ +

◆ SerializeToDot()

+ +
+
+ + + + + + + + +
Status SerializeToDot (std::ostream & stream) const
+
+ +

Definition at line 542 of file Network.cpp.

+ +

References IOptimizedNetwork::pOptimizedNetworkImpl.

+
543 {
544  return pOptimizedNetworkImpl->SerializeToDot(stream);
545 }
std::unique_ptr< OptimizedNetworkImpl > pOptimizedNetworkImpl
Definition: INetwork.hpp:725
+
+
+
+

Friends And Related Function Documentation

+ +

◆ GetGraphForTesting

+ +
+
+ + + + + +
+ + + + + + + + +
Graph& GetGraphForTesting (IOptimizedNetworkoptNetPtr)
+
+friend
+
+ +

Definition at line 25 of file TestUtils.cpp.

+
26 {
27  return optNet->pOptimizedNetworkImpl->GetGraph();
28 }
+
+
+ +

◆ GetModelOptionsForTesting

+ +
+
+ + + + + +
+ + + + + + + + +
ModelOptions& GetModelOptionsForTesting (IOptimizedNetworkoptNetPtr)
+
+friend
+
+ +

Definition at line 30 of file TestUtils.cpp.

+
31 {
32  return optNet->pOptimizedNetworkImpl->GetModelOptions();
33 }
+
+
+ +

◆ LoadedNetwork

+ +
+
+ + + + + +
+ + + + +
friend class LoadedNetwork
+
+friend
+
+ +

Definition at line 714 of file INetwork.hpp.

+ +
+
+ +

◆ Optimize

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
IOptimizedNetworkPtr Optimize (const INetworkinNetwork,
const std::vector< BackendId > & backendPreferences,
const IDeviceSpecdeviceSpec,
const OptimizerOptionsoptions = OptimizerOptions(),
Optional< std::vector< std::string > &> messages = EmptyOptional() 
)
+
+friend
+
+ +

Create an optimized version of the network.

+
Parameters
+ + + + + + +
networkINetwork description of the network to be optimized.
backendPreferencesThe choice of the backend ordered by user preferences.
deviceSpecDeviceSpec object as queried from the runtime. See IRuntime::GetDeviceSpec()
messagesIf there are failures or warnings a string describing same will be added to the vector
optionsOptimizerOptions object with optimizer configuration options
+
+
+
Returns
An IOptimizedNetworkPtr interface to the optimized network, throws an exception derived from armnn::Exception if process fails.
+ +

Definition at line 1502 of file Network.cpp.

+
1507 {
1508  if (backendPreferences.empty())
1509  {
1510  throw InvalidArgumentException("Invoked Optimize with no backends specified");
1511  }
1512 
1513  if (options.m_ReduceFp32ToFp16 && options.m_ReduceFp32ToBf16)
1514  {
1515  throw InvalidArgumentException("BFloat16 and Float16 optimization cannot be enabled at the same time.");
1516  }
1517 
1518  std::unique_ptr<Graph> graph = std::make_unique<Graph>(inNetwork.pNetworkImpl->GetGraph());
1519 
1520  auto optNet = IOptimizedNetworkPtr(new IOptimizedNetwork(std::move(graph), options.m_ModelOptions),
1522 
1523  IOptimizedNetwork* optNetObjPtr = optNet.get();
1524 
1525  // Get the optimized graph
1526  Graph& optGraph = optNetObjPtr->pOptimizedNetworkImpl->GetGraph();
1527 
1528  // Perform AddBroadcastReshapeLayer optimisation
1529  using namespace optimizations;
1531 
1532  // Infer the tensor infos for all output slots. Throws an exception on failure
1533  optGraph.InferTensorInfos();
1534 
1535  // Perform optimisation passes
1541  MovePermuteUp(),
1542  MoveTransposeUp(),
1543  PermuteAsReshape(),
1553 
1554  // If Fp32 to Fp16 optimization is set convert Fp32 network to Fp16
1555  if (options.m_ReduceFp32ToFp16)
1556  {
1559  }
1560 
1561  // If Fp32 to Bf16 optimization is set convert Fp32 network to Bf16
1562  // Convert input of Convolution2d and FullyConnected from Fp32 to Bf16
1563  // Only Constant weight of Convolution2d and FullyConnected are converted from Fp32 to Bf16
1564  if (options.m_ReduceFp32ToBf16)
1565  {
1567  }
1568 
1569  // Initialize backend settings
1570  BackendSettings backendSettings(backendPreferences, deviceSpec);
1571  if (backendSettings.GetAvailablePreferredBackends().empty())
1572  {
1573  std::stringstream failureMsg;
1574  failureMsg << "None of the preferred backends " << backendPreferences
1575  << " are supported. Current platform provides " << backendSettings.m_SupportedBackends;
1576  ReportError(failureMsg.str(), messages);
1577  throw InvalidArgumentException(failureMsg.str());
1578  }
1579 
1580  // Create a map to temporarily hold initialized backend objects
1581  TensorHandleFactoryRegistry tensorHandleFactoryRegistry;
1582  BackendsMap backends = CreateSupportedBackends(tensorHandleFactoryRegistry, backendSettings);
1583 
1584  // Assign an available backend to each layer
1585  Graph::Iterator firstLayer = optGraph.begin();
1586  Graph::Iterator lastLayer = optGraph.end();
1587  OptimizationResult assignBackendsResult = AssignBackends(optNetObjPtr->pOptimizedNetworkImpl.get(),
1588  backendSettings,
1589  firstLayer,
1590  lastLayer,
1591  messages);
1592  if (assignBackendsResult.m_Error)
1593  {
1594  // Failed to assign a backend to each layer
1595  throw InvalidArgumentException("Failed to assign a backend to each layer");
1596  }
1597 
1600 
1601  // Apply the backend-specific optimizations
1602  OptimizationResult backendOptimizationResult = ApplyBackendOptimizations(optNetObjPtr->pOptimizedNetworkImpl.get(),
1603  backendSettings,
1604  backends,
1605  options.m_ModelOptions,
1606  messages);
1607  if (backendOptimizationResult.m_Error)
1608  {
1609  // Failed to apply the backend-specific optimizations
1610  throw InvalidArgumentException("Failed to apply the backend-specific optimizations");
1611  }
1612 
1613  // If the debug flag is set, then insert a DebugLayer after each layer
1614  // Doing this after applying the backend optimizations as they might have changed some layers
1615  if (options.m_Debug)
1616  {
1618  }
1619 
1620  // Calculate the compatibility strategies for tensor handles
1621  OptimizationResult strategyResult = SelectTensorHandleStrategy(optGraph,
1622  backends,
1623  tensorHandleFactoryRegistry,
1624  options.m_ImportEnabled,
1625  messages);
1626  if (strategyResult.m_Error)
1627  {
1628  // Failed to apply the backend-specific optimizations
1630  }
1631 
1632  // Based on the tensor handle strategy determined above, insert copy layers where required.
1633  optGraph.AddCompatibilityLayers(backends, tensorHandleFactoryRegistry);
1634 
1635  // Convert constants
1638 
1639  // Run backend specific optimizations (deprecated)
1640  for (auto&& chosenBackend : backendSettings.m_SelectedBackends)
1641  {
1642  auto factoryFun = BackendRegistryInstance().GetFactory(chosenBackend);
1643  auto backendPtr = factoryFun();
1644  ARMNN_ASSERT(backendPtr.get() != nullptr);
1645 
1647  auto backendSpecificOptimizations = backendPtr->GetOptimizations();
1649 
1650  if (!backendSpecificOptimizations.empty())
1651  {
1652  Optimizer::Pass(optNetObjPtr->pOptimizedNetworkImpl->GetGraph(), backendSpecificOptimizations);
1653  }
1654  }
1655 
1656  return optNet;
1657 }
OptimizeForConnection< Layer, PermuteLayer, SquashEqualSiblingsImpl< PermuteLayer > > SquashEqualPermuteSiblings
+
void ReportError(const std::string &errorMessage, Optional< std::vector< std::string > &> errorMessages)
Definition: Network.cpp:563
+
OptimizationResult AssignBackends(OptimizedNetworkImpl *optNetObjPtr, BackendSettings &backendSettings, Graph::Iterator &firstLayer, Graph::Iterator &lastLayer, Optional< std::vector< std::string > &> errMessages)
Definition: Network.cpp:869
+
FactoryFunction GetFactory(const BackendId &id) const
+
OptimizeForConnection< PermuteLayer, PermuteLayer, OptimizeInversePermutesImpl< PermuteLayer > > OptimizeInversePermutes
+
Optimizer::Optimizations MakeOptimizations(Args &&... args)
Definition: Optimizer.hpp:43
+
OptimizeForConnection< TransposeLayer, TransposeLayer, OptimizeInversePermutesImpl< TransposeLayer > > OptimizeInverseTransposes
+
OptimizeForConnection< TransposeLayer, BatchToSpaceNdLayer, PermuteAndBatchToSpaceAsDepthToSpaceImpl< TransposeLayer > > TransposeAndBatchToSpaceAsDepthToSpace
+
OptimizeForExclusiveConnection< DepthwiseConvolution2dLayer, BatchNormalizationLayer, FuseBatchNorm< DepthwiseConvolution2dLayer, armnn::DataType::Float32 > > FuseBatchNormIntoDepthwiseConvolution2DFloat32
+
#define ARMNN_NO_DEPRECATE_WARN_BEGIN
Definition: Deprecated.hpp:33
+
static void Pass(Graph &graph, const Optimizations &optimizations)
Definition: Optimizer.cpp:16
+
OptimizeForExclusiveConnection< DepthwiseConvolution2dLayer, BatchNormalizationLayer, FuseBatchNorm< DepthwiseConvolution2dLayer, armnn::DataType::Float16 > > FuseBatchNormIntoDepthwiseConvolution2DFloat16
+
OptimizeForExclusiveConnection< Convolution2dLayer, BatchNormalizationLayer, FuseBatchNorm< Convolution2dLayer, armnn::DataType::Float16 > > FuseBatchNormIntoConvolution2DFloat16
+
OptimizeForExclusiveConnection< Convolution2dLayer, BatchNormalizationLayer, FuseBatchNorm< Convolution2dLayer, armnn::DataType::Float32 > > FuseBatchNormIntoConvolution2DFloat32
+
BackendRegistry & BackendRegistryInstance()
+
OptimizeForConnection< Layer, ReshapeLayer, SquashEqualSiblingsImpl< ReshapeLayer > > SquashEqualReshapeSiblings
+
OptimizeForConnection< Layer, TransposeLayer, MoveTransposeUpImpl > MoveTransposeUp
+
OptimizeForConnection< PadLayer, Convolution2dLayer, FoldPadIntoConvolution2dImpl > FoldPadIntoConvolution2d
+
LayerList::const_iterator Iterator
Definition: Graph.hpp:50
+
OptimizeForType< Layer, AddDebugImpl > InsertDebugLayer
Definition: AddDebug.hpp:34
+
OptimizeForConnection< ReshapeLayer, ReshapeLayer, OptimizeConsecutiveReshapesImpl > OptimizeConsecutiveReshapes
+
OptimizeForConnection< ConvertFp16ToFp32Layer, ConvertFp32ToFp16Layer, OptimizeInverseConversionsImpl > OptimizeInverseConversionsFp16
+
OptimizeForConnection< PermuteLayer, BatchToSpaceNdLayer, PermuteAndBatchToSpaceAsDepthToSpaceImpl< PermuteLayer > > PermuteAndBatchToSpaceAsDepthToSpace
+
OptimizeForConnection< Layer, PermuteLayer, MovePermuteUpImpl > MovePermuteUp
+
IOptimizedNetwork(std::unique_ptr< Graph > graph)
Definition: Network.cpp:521
+
ConvertConstants< Float32ToFloat16, IsFloat16Layer > ConvertConstantsFloatToHalf
+
OptimizeForType< TransposeLayer, TransposeAsReshapeImpl > TransposeAsReshape
+
#define ARMNN_NO_DEPRECATE_WARN_END
Definition: Deprecated.hpp:34
+
OptimizationResult ApplyBackendOptimizations(OptimizedNetworkImpl *optNetObjPtr, BackendSettings &backendSettings, BackendsMap &backends, const ModelOptions &modelOptions, Optional< std::vector< std::string > &> errMessages)
Definition: Network.cpp:1028
+
std::unique_ptr< IOptimizedNetwork, void(*)(IOptimizedNetwork *network)> IOptimizedNetworkPtr
Definition: INetwork.hpp:174
+
#define ARMNN_ASSERT(COND)
Definition: Assert.hpp:14
+
OptimizeForType< PermuteLayer, PermuteAsReshapeImpl > PermuteAsReshape
+
OptimizeForConnection< Layer, TransposeLayer, SquashEqualSiblingsImpl< TransposeLayer > > SquashEqualTransposeSiblings
+
ConvertConstants< Float16ToFloat32, IsFloat32Layer > ConvertConstantsHalfToFloat
+
BackendsMap CreateSupportedBackends(TensorHandleFactoryRegistry &handleFactoryRegistry, BackendSettings &backendSettings)
Definition: Network.cpp:1009
+
OptimizeForConnection< ConvertFp32ToFp16Layer, ConvertFp16ToFp32Layer, OptimizeInverseConversionsImpl > OptimizeInverseConversionsFp32
+
OptimizeForType< Layer, ConvertFp32NetworkToFp16Impl > Fp32NetworkToFp16Converter
+
OptimizationResult SelectTensorHandleStrategy(Graph &optGraph, BackendsMap &backends, TensorHandleFactoryRegistry &registry, bool importEnabled, Optional< std::vector< std::string > &> errMessages)
Definition: Network.cpp:1434
+
OptimizeForType< Layer, AddBroadcastReshapeLayerImpl > AddBroadcastReshapeLayer
+
static void Destroy(IOptimizedNetwork *network)
Definition: Network.cpp:532
+
OptimizeForType< Layer, ConvertFp32NetworkToBf16Impl > Fp32NetworkToBf16Converter
+
std::map< BackendId, std::unique_ptr< class IBackendInternal > > BackendsMap
Definition: Network.hpp:310
+
+
+
+

Member Data Documentation

+ +

◆ pOptimizedNetworkImpl

+ +
+
+ + + + + +
+ + + + +
std::unique_ptr<OptimizedNetworkImpl> pOptimizedNetworkImpl
+
+protected
+
+
+
The documentation for this class was generated from the following files: +
+
+ + + + -- cgit v1.2.1