ArmNN
 22.02
MockBackend Class Reference

#include <MockBackend.hpp>

Inheritance diagram for MockBackend:
IBackendInternal IBackendInternal IBackend IBackend

Public Member Functions

 MockBackend ()=default
 
 ~MockBackend ()=default
 
const BackendIdGetId () const override
 
IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory (const IBackendInternal::IMemoryManagerSharedPtr &memoryManager=nullptr) const override
 
IBackendInternal::ILayerSupportSharedPtr GetLayerSupport () const override
 
 MockBackend ()=default
 
 ~MockBackend ()=default
 
const BackendIdGetId () const override
 
IBackendInternal::IMemoryManagerUniquePtr CreateMemoryManager () const override
 
IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory (const IBackendInternal::IMemoryManagerSharedPtr &memoryManager=nullptr) const override
 
IBackendInternal::IBackendContextPtr CreateBackendContext (const IRuntime::CreationOptions &) const override
 Create the runtime context of the backend. More...
 
IBackendInternal::IBackendProfilingContextPtr CreateBackendProfilingContext (const IRuntime::CreationOptions &creationOptions, IBackendProfilingPtr &backendProfiling) override
 Create context specifically used for profiling interaction from backends. More...
 
IBackendInternal::ILayerSupportSharedPtr GetLayerSupport () const override
 
OptimizationViews OptimizeSubgraphView (const SubgraphView &subgraph) const override
 
std::unique_ptr< ICustomAllocatorGetDefaultAllocator () const override
 Returns the default memory allocator for the backend. More...
 
- Public Member Functions inherited from IBackendInternal
 ~IBackendInternal () override=default
 Allow backends created by the factory function to be destroyed through IBackendInternal. More...
 
virtual IWorkloadFactoryPtr CreateWorkloadFactory (class TensorHandleFactoryRegistry &tensorHandleFactoryRegistry) const
 
virtual IWorkloadFactoryPtr CreateWorkloadFactory (const IMemoryManagerSharedPtr &memoryManager, const ModelOptions &modelOptions) const
 
virtual IWorkloadFactoryPtr CreateWorkloadFactory (class TensorHandleFactoryRegistry &tensorHandleFactoryRegistry, const ModelOptions &modelOptions) const
 
virtual IWorkloadFactoryPtr CreateWorkloadFactory (class TensorHandleFactoryRegistry &tensorHandleFactoryRegistry, const ModelOptions &modelOptions, MemorySourceFlags inputFlags, MemorySourceFlags outputFlags) const
 
virtual IBackendSpecificModelContextPtr CreateBackendSpecificModelContext (const ModelOptions &modelOptions) const
 
virtual ILayerSupportSharedPtr GetLayerSupport (const ModelOptions &modelOptions) const
 
virtual OptimizationViews OptimizeSubgraphView (const SubgraphView &subgraph, const ModelOptions &modelOptions) const
 
bool SupportsTensorAllocatorAPI () const
 
ITensorHandleFactory::FactoryId GetBackwardCompatibleFavoriteHandleFactory ()
 
virtual std::vector< ITensorHandleFactory::FactoryIdGetHandleFactoryPreferences () const
 (Optional) Returns a vector of supported TensorHandleFactory ids in preference order. More...
 
virtual void RegisterTensorHandleFactories (class TensorHandleFactoryRegistry &)
 (Optional) Register TensorHandleFactories Either this method or CreateMemoryManager() and IWorkloadFactory::CreateTensor()/IWorkloadFactory::CreateSubtensor() methods must be implemented. More...
 
virtual void RegisterTensorHandleFactories (class TensorHandleFactoryRegistry &registry, MemorySourceFlags inputFlags, MemorySourceFlags outputFlags)
 (Optional) Register TensorHandleFactories Either this method or CreateMemoryManager() and IWorkloadFactory::CreateTensor()/IWorkloadFactory::CreateSubtensor() methods must be implemented. More...
 
virtual BackendCapabilities GetCapabilities () const
 Returns a BackendCapability if the backend lists the capability The BackendCapability must then be inspected to check whether or not that BackendCapability is supported Otherwise returns an EmptyOptional if the BackendCapability is unlisted. More...
 
virtual bool HasCapability (BackendCapability) const
 Returns true if backend support the capability false otherwise. More...
 
virtual bool UseCustomMemoryAllocator (std::shared_ptr< ICustomAllocator > allocator, armnn::Optional< std::string &> errMsg)
 Signals the backend to use a custom memory allocator provided by the user. More...
 
virtual unsigned int GetNumberOfCacheFiles () const
 Returns the number of files cached if backend supports caching. More...
 

Static Public Member Functions

static const BackendIdGetIdStatic ()
 
static const BackendIdGetIdStatic ()
 
- Static Public Member Functions inherited from IBackendInternal
static constexpr BackendVersion GetApiVersion ()
 Returns the version of the Backend API. More...
 

Additional Inherited Members

- Public Types inherited from IBackendInternal
using IWorkloadFactoryPtr = std::unique_ptr< IWorkloadFactory >
 
using IBackendContextPtr = std::unique_ptr< IBackendContext >
 
using IBackendProfilingContextPtr = std::shared_ptr< armnn::profiling::IBackendProfilingContext >
 This is the bridge between backend and backend profiling we'll keep it in the backend namespace. More...
 
using IBackendProfilingPtr = std::unique_ptr< armnn::profiling::IBackendProfiling >
 
using ILayerSupportSharedPtr = std::shared_ptr< ILayerSupport >
 
using IBackendSpecificModelContextPtr = std::shared_ptr< IBackendModelContext >
 
using IMemoryManagerUniquePtr = std::unique_ptr< IMemoryManager >
 
using IMemoryManagerSharedPtr = std::shared_ptr< IMemoryManager >
 
- Protected Member Functions inherited from IBackendInternal
 IBackendInternal ()=default
 Creation must be done through a specific backend interface. More...
 
- Protected Member Functions inherited from IBackend
 IBackend ()
 
virtual ~IBackend ()
 

Detailed Description

Definition at line 15 of file MockBackend.hpp.

Constructor & Destructor Documentation

◆ MockBackend() [1/2]

MockBackend ( )
default

◆ ~MockBackend() [1/2]

~MockBackend ( )
default

◆ MockBackend() [2/2]

MockBackend ( )
default

◆ ~MockBackend() [2/2]

~MockBackend ( )
default

Member Function Documentation

◆ CreateBackendContext()

IBackendInternal::IBackendContextPtr CreateBackendContext ( const IRuntime::CreationOptions ) const
overridevirtual

Create the runtime context of the backend.

Implementations may return a default-constructed IBackendContextPtr if no context is needed at runtime. Implementations must throw BackendUnavailableException if the backend cannot be used (for example, necessary accelerator hardware is not present). The default implementation always returns a default-constructed pointer.

Reimplemented from IBackendInternal.

Definition at line 101 of file MockBackend.cpp.

102 {
103  return IBackendContextPtr{};
104 }
std::unique_ptr< IBackendContext > IBackendContextPtr

◆ CreateBackendProfilingContext()

IBackendInternal::IBackendProfilingContextPtr CreateBackendProfilingContext ( const IRuntime::CreationOptions creationOptions,
IBackendProfilingPtr backendProfiling 
)
overridevirtual

Create context specifically used for profiling interaction from backends.

Reimplemented from IBackendInternal.

Definition at line 106 of file MockBackend.cpp.

References armnn::IgnoreUnused(), MockBackendProfilingService::Instance(), and MockBackendProfilingService::SetProfilingContextPtr().

108 {
109  IgnoreUnused(options);
110  std::shared_ptr<armnn::MockBackendProfilingContext> context =
111  std::make_shared<MockBackendProfilingContext>(backendProfiling);
113  return context;
114 }
void SetProfilingContextPtr(std::shared_ptr< MockBackendProfilingContext > shared)
void IgnoreUnused(Ts &&...)
static MockBackendProfilingService & Instance()

◆ CreateMemoryManager()

IBackendInternal::IMemoryManagerUniquePtr CreateMemoryManager ( ) const
overridevirtual

Reimplemented from IBackendInternal.

Definition at line 116 of file MockBackend.cpp.

References MockBackend::GetLayerSupport().

117 {
118  return IMemoryManagerUniquePtr{};
119 }
std::unique_ptr< IMemoryManager > IMemoryManagerUniquePtr

◆ CreateWorkloadFactory() [1/2]

IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory ( const IBackendInternal::IMemoryManagerSharedPtr memoryManager = nullptr) const
inlineoverridevirtual

Implements IBackendInternal.

Definition at line 29 of file MockBackend.hpp.

References armnn::IgnoreUnused().

Referenced by MockBackendInitialiser::~MockBackendInitialiser().

30  {
31  IgnoreUnused(memoryManager);
32  return nullptr;
33  }
void IgnoreUnused(Ts &&...)

◆ CreateWorkloadFactory() [2/2]

IBackendInternal::IWorkloadFactoryPtr CreateWorkloadFactory ( const IBackendInternal::IMemoryManagerSharedPtr memoryManager = nullptr) const
overridevirtual

Implements IBackendInternal.

◆ GetDefaultAllocator()

std::unique_ptr< ICustomAllocator > GetDefaultAllocator ( ) const
overridevirtual

Returns the default memory allocator for the backend.

Returns
- Returns unique pointer to the Default Allocator of the Backend

Reimplemented from IBackendInternal.

Definition at line 266 of file MockBackend.cpp.

267 {
268  return std::make_unique<DefaultAllocator>();
269 }

◆ GetId() [1/2]

const BackendId& GetId ( ) const
inlineoverridevirtual

Implements IBackend.

Definition at line 24 of file MockBackend.hpp.

References MockBackend::GetIdStatic().

25  {
26  return GetIdStatic();
27  }
static const BackendId & GetIdStatic()
Definition: MockBackend.cpp:18

◆ GetId() [2/2]

const BackendId& GetId ( ) const
inlineoverridevirtual

Implements IBackend.

Definition at line 150 of file MockBackend.hpp.

151  {
152  return GetIdStatic();
153  }
static const BackendId & GetIdStatic()
Definition: MockBackend.cpp:18

◆ GetIdStatic() [1/2]

const BackendId & GetIdStatic ( )
static

Definition at line 18 of file MockBackend.cpp.

References armnn::MockBackendId().

Referenced by MockBackend::GetId(), MockBackendInitialiser::MockBackendInitialiser(), TEST_SUITE(), and MockBackendInitialiser::~MockBackendInitialiser().

19 {
20  static const BackendId s_Id{MockBackendId()};
21  return s_Id;
22 }
constexpr const char * MockBackendId()
Definition: MockBackend.cpp:13

◆ GetIdStatic() [2/2]

static const BackendId& GetIdStatic ( )
static

◆ GetLayerSupport() [1/2]

IBackendInternal::ILayerSupportSharedPtr GetLayerSupport ( ) const
inlineoverridevirtual

Implements IBackendInternal.

Definition at line 35 of file MockBackend.hpp.

Referenced by MockBackend::CreateMemoryManager().

36  {
37  return nullptr;
38  };

◆ GetLayerSupport() [2/2]

IBackendInternal::ILayerSupportSharedPtr GetLayerSupport ( ) const
overridevirtual

Implements IBackendInternal.

◆ OptimizeSubgraphView()

OptimizationViews OptimizeSubgraphView ( const SubgraphView subgraph) const
overridevirtual

Reimplemented from IBackendInternal.

Definition at line 127 of file MockBackend.cpp.

References OptimizationViews::AddFailedSubgraph(), OptimizationViews::AddSubstitution(), OptimizationViews::AddUntouchedSubgraph(), ARMNN_ASSERT, SubgraphView::GetIConnectableLayers(), OptimizationViews::GetINetwork(), Layer::GetType(), armnn::Input, armnn::MockBackendId(), armnn::Output, and SubgraphViewSelector::SelectSubgraphs().

128 {
129  // Prepare the optimization views
130  OptimizationViews optimizationViews;
131 
132  // Get the layers of the input sub-graph
133  const SubgraphView::IConnectableLayers& subgraphLayers = subgraph.GetIConnectableLayers();
134 
135  // Parse the layers
136  SubgraphView::IConnectableLayers supportedLayers;
137  SubgraphView::IConnectableLayers unsupportedLayers;
138  SubgraphView::IConnectableLayers untouchedLayers;
139  std::for_each(subgraphLayers.begin(),
140  subgraphLayers.end(),
141  [&](IConnectableLayer* layer)
142  {
143  bool supported = IsLayerSupported(PolymorphicDowncast<Layer*>(layer));
144  if (supported)
145  {
146  // Layer supported, check if it's optimizable
147  bool optimizable = IsLayerOptimizable(PolymorphicDowncast<Layer*>(layer));
148  if (optimizable)
149  {
150  // Layer fully supported
151  supportedLayers.push_back(layer);
152  }
153  else
154  {
155  // Layer supported but not optimizable
156  untouchedLayers.push_back(layer);
157  }
158  }
159  else
160  {
161  // Layer unsupported
162  unsupportedLayers.push_back(layer);
163  }
164  });
165 
166  // Check if there are supported layers
167  if (!supportedLayers.empty())
168  {
169  // Select the layers that are neither inputs or outputs, but that are optimizable
170  auto supportedSubgraphSelector = [](const Layer& layer)
171  {
172  return layer.GetType() != LayerType::Input &&
173  layer.GetType() != LayerType::Output &&
174  IsLayerSupported(layer) &&
175  IsLayerOptimizable(layer);
176  };
177 
178  // Apply the subgraph selector to the supported layers to group them into sub-graphs were appropriate
179  SubgraphView mutableSubgraph(subgraph);
180  SubgraphViewSelector::Subgraphs supportedSubgraphs =
181  SubgraphViewSelector::SelectSubgraphs(mutableSubgraph, supportedSubgraphSelector);
182 
183  // Create a substitution pair for each supported sub-graph
184  std::for_each(supportedSubgraphs.begin(),
185  supportedSubgraphs.end(),
186  [&optimizationViews](const SubgraphView::SubgraphViewPtr& supportedSubgraph)
187  {
188  ARMNN_ASSERT(supportedSubgraph != nullptr);
189 
190  CompiledBlobPtr blobPtr;
191  BackendId backend = MockBackendId();
192 
193  IConnectableLayer* preCompiledLayer =
194  optimizationViews.GetINetwork()->AddPrecompiledLayer(
195  PreCompiledDescriptor(supportedSubgraph->GetNumInputSlots(),
196  supportedSubgraph->GetNumOutputSlots()),
197  std::move(blobPtr),
198  backend,
199  nullptr);
200 
201  SubgraphView substitutionSubgraph(*supportedSubgraph);
202  SubgraphView replacementSubgraph(preCompiledLayer);
203 
204  optimizationViews.AddSubstitution({ substitutionSubgraph, replacementSubgraph });
205  });
206  }
207 
208  // Check if there are unsupported layers
209  if (!unsupportedLayers.empty())
210  {
211  // Select the layers that are neither inputs or outputs, and are not optimizable
212  auto unsupportedSubgraphSelector = [](const Layer& layer)
213  {
214  return layer.GetType() != LayerType::Input &&
215  layer.GetType() != LayerType::Output &&
216  !IsLayerSupported(layer);
217  };
218 
219  // Apply the subgraph selector to the unsupported layers to group them into sub-graphs were appropriate
220  SubgraphView mutableSubgraph(subgraph);
221  SubgraphViewSelector::Subgraphs unsupportedSubgraphs =
222  SubgraphViewSelector::SelectSubgraphs(mutableSubgraph, unsupportedSubgraphSelector);
223 
224  // Add each unsupported sub-graph to the list of failed sub-graphs in the optimizization views
225  std::for_each(unsupportedSubgraphs.begin(),
226  unsupportedSubgraphs.end(),
227  [&optimizationViews](const SubgraphView::SubgraphViewPtr& unsupportedSubgraph)
228  {
229  ARMNN_ASSERT(unsupportedSubgraph != nullptr);
230 
231  optimizationViews.AddFailedSubgraph(SubgraphView(*unsupportedSubgraph));
232  });
233  }
234 
235  // Check if there are untouched layers
236  if (!untouchedLayers.empty())
237  {
238  // Select the layers that are neither inputs or outputs, that are supported but that and are not optimizable
239  auto untouchedSubgraphSelector = [](const Layer& layer)
240  {
241  return layer.GetType() != LayerType::Input &&
242  layer.GetType() != LayerType::Output &&
243  IsLayerSupported(layer) &&
244  !IsLayerOptimizable(layer);
245  };
246 
247  // Apply the subgraph selector to the untouched layers to group them into sub-graphs were appropriate
248  SubgraphView mutableSubgraph(subgraph);
249  SubgraphViewSelector::Subgraphs untouchedSubgraphs =
250  SubgraphViewSelector::SelectSubgraphs(mutableSubgraph, untouchedSubgraphSelector);
251 
252  // Add each untouched sub-graph to the list of untouched sub-graphs in the optimizization views
253  std::for_each(untouchedSubgraphs.begin(),
254  untouchedSubgraphs.end(),
255  [&optimizationViews](const SubgraphView::SubgraphViewPtr& untouchedSubgraph)
256  {
257  ARMNN_ASSERT(untouchedSubgraph != nullptr);
258 
259  optimizationViews.AddUntouchedSubgraph(SubgraphView(*untouchedSubgraph));
260  });
261  }
262 
263  return optimizationViews;
264 }
constexpr const char * MockBackendId()
Definition: MockBackend.cpp:13
std::unique_ptr< void, CompiledBlobDeleter > CompiledBlobPtr
Definition: INetwork.hpp:245
std::unique_ptr< SubgraphView > SubgraphViewPtr
std::list< IConnectableLayer * > IConnectableLayers
std::vector< SubgraphViewPtr > Subgraphs
#define ARMNN_ASSERT(COND)
Definition: Assert.hpp:14
static Subgraphs SelectSubgraphs(Graph &graph, const LayerSelectorFunction &selector)
Selects subgraphs from a graph based on the selector function and the algorithm.

The documentation for this class was generated from the following files: