8 #include <armnnTestUtils/MockBackend.hpp>
9 #include <armnnTestUtils/MockTensorHandle.hpp>
11 #include <backendsCommon/test/MockBackendId.hpp>
17 const BackendId& MockBackend::GetIdStatic()
19 static const BackendId s_Id{MockBackendId()};
25 static const BackendId s_Id{ MockBackendId() };
28 MockWorkloadFactory::MockWorkloadFactory(
const std::shared_ptr<MockMemoryManager>& memoryManager)
29 : m_MemoryManager(memoryManager)
32 MockWorkloadFactory::MockWorkloadFactory()
33 : m_MemoryManager(new MockMemoryManager())
41 std::unique_ptr<IWorkload> MockWorkloadFactory::CreateWorkload(
LayerType type,
42 const QueueDescriptor& descriptor,
43 const WorkloadInfo& info)
const
47 case LayerType::MemCopy: {
48 auto memCopyQueueDescriptor = PolymorphicDowncast<const MemCopyQueueDescriptor*>(&descriptor);
49 if (descriptor.m_Inputs.empty())
51 throw InvalidArgumentException(
"MockWorkloadFactory: CreateMemCopy() expected an input tensor.");
53 return std::make_unique<CopyMemGenericWorkload>(*memCopyQueueDescriptor, info);
90 const std::string layerName(layer->
GetName());
91 bool optimizable = layerName.find(
"unoptimizable") == std::string::npos;
106 MockBackendInitialiser::MockBackendInitialiser()
115 MockBackendInitialiser::~MockBackendInitialiser()
123 std::cerr <<
"could not deregister mock backend" << std::endl;
130 return IWorkloadFactoryPtr{};
135 return IBackendContextPtr{};
139 const IRuntime::CreationOptions& options, IBackendProfilingPtr& backendProfiling)
142 std::shared_ptr<armnn::MockBackendProfilingContext> context =
143 std::make_shared<MockBackendProfilingContext>(backendProfiling);
144 MockBackendProfilingService::Instance().SetProfilingContextPtr(context);
159 OptimizationViews MockBackend::OptimizeSubgraphView(
const SubgraphView& subgraph)
const
162 OptimizationViews optimizationViews;
171 std::for_each(subgraphLayers.begin(),
172 subgraphLayers.end(),
173 [&](IConnectableLayer* layer)
175 bool supported = IsLayerSupported(PolymorphicDowncast<Layer*>(layer));
179 bool optimizable = IsLayerOptimizable(PolymorphicDowncast<Layer*>(layer));
183 supportedLayers.push_back(layer);
188 untouchedLayers.push_back(layer);
194 unsupportedLayers.push_back(layer);
199 if (!supportedLayers.empty())
202 auto supportedSubgraphSelector = [](
const Layer& layer)
211 SubgraphView mutableSubgraph(subgraph);
216 std::for_each(supportedSubgraphs.begin(),
217 supportedSubgraphs.end(),
220 ARMNN_ASSERT(supportedSubgraph != nullptr);
222 CompiledBlobPtr blobPtr;
223 BackendId backend = MockBackendId();
225 IConnectableLayer* preCompiledLayer =
226 optimizationViews.GetINetwork()->AddPrecompiledLayer(
227 PreCompiledDescriptor(supportedSubgraph->GetNumInputSlots(),
228 supportedSubgraph->GetNumOutputSlots()),
233 SubgraphView substitutionSubgraph(*supportedSubgraph);
234 SubgraphView replacementSubgraph(preCompiledLayer);
236 optimizationViews.AddSubstitution({ substitutionSubgraph, replacementSubgraph });
241 if (!unsupportedLayers.empty())
244 auto unsupportedSubgraphSelector = [](
const Layer& layer)
246 return layer.GetType() != LayerType::Input &&
247 layer.GetType() != LayerType::Output &&
252 SubgraphView mutableSubgraph(subgraph);
253 SubgraphViewSelector::Subgraphs unsupportedSubgraphs =
254 SubgraphViewSelector::SelectSubgraphs(mutableSubgraph, unsupportedSubgraphSelector);
257 std::for_each(unsupportedSubgraphs.begin(),
258 unsupportedSubgraphs.end(),
259 [&optimizationViews](
const SubgraphView::SubgraphViewPtr& unsupportedSubgraph)
261 ARMNN_ASSERT(unsupportedSubgraph != nullptr);
263 optimizationViews.AddFailedSubgraph(SubgraphView(*unsupportedSubgraph));
268 if (!untouchedLayers.empty())
271 auto untouchedSubgraphSelector = [](
const Layer& layer)
273 return layer.GetType() != LayerType::Input &&
274 layer.GetType() != LayerType::Output &&
280 SubgraphView mutableSubgraph(subgraph);
281 SubgraphViewSelector::Subgraphs untouchedSubgraphs =
282 SubgraphViewSelector::SelectSubgraphs(mutableSubgraph, untouchedSubgraphSelector);
285 std::for_each(untouchedSubgraphs.begin(),
286 untouchedSubgraphs.end(),
287 [&optimizationViews](
const SubgraphView::SubgraphViewPtr& untouchedSubgraph)
289 ARMNN_ASSERT(untouchedSubgraph != nullptr);
291 optimizationViews.AddUntouchedSubgraph(SubgraphView(*untouchedSubgraph));
295 return optimizationViews;
298 std::unique_ptr<ICustomAllocator> MockBackend::GetDefaultAllocator()
const
300 return std::make_unique<DefaultAllocator>();