blob: 6e6d47fc9041540331040a23a43a8b6420809fc9 [file] [log] [blame]
David Becke97c6e02018-10-03 13:09:28 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5#pragma once
6
David Beck9efb57d2018-11-05 13:40:33 +00007#include <armnn/Types.hpp>
David Beck1b61be52018-11-08 09:19:14 +00008#include <armnn/IRuntime.hpp>
Matteo Martincigh49124022019-01-11 13:25:59 +00009
10#include <ISubGraphConverter.hpp>
11#include <SubGraph.hpp>
12
David Beck263e3492018-11-09 14:46:40 +000013#include <vector>
David Becke97c6e02018-10-03 13:09:28 +010014
15namespace armnn
16{
David Beck29c75de2018-10-23 13:35:58 +010017class IWorkloadFactory;
David Beck1b61be52018-11-08 09:19:14 +000018class IBackendContext;
Aron Virginas-Tar56055192018-11-12 18:10:43 +000019class IMemoryManager;
David Beck263e3492018-11-09 14:46:40 +000020class Optimization;
David Beck111b5d92018-11-12 14:59:37 +000021class ILayerSupport;
David Becke97c6e02018-10-03 13:09:28 +010022
23class IBackendInternal : public IBackend
24{
25protected:
David Beck9efb57d2018-11-05 13:40:33 +000026 // Creation must be done through a specific
27 // backend interface.
David Beck6b779f02018-10-09 17:20:21 +010028 IBackendInternal() = default;
David Becke97c6e02018-10-03 13:09:28 +010029
30public:
David Beck29c75de2018-10-23 13:35:58 +010031 // Allow backends created by the factory function
32 // to be destroyed through IBackendInternal.
33 ~IBackendInternal() override = default;
34
35 using IWorkloadFactoryPtr = std::unique_ptr<IWorkloadFactory>;
David Beck1b61be52018-11-08 09:19:14 +000036 using IBackendContextPtr = std::unique_ptr<IBackendContext>;
David Beck263e3492018-11-09 14:46:40 +000037 using OptimizationPtr = std::unique_ptr<Optimization>;
38 using Optimizations = std::vector<OptimizationPtr>;
David Beck111b5d92018-11-12 14:59:37 +000039 using ILayerSupportSharedPtr = std::shared_ptr<ILayerSupport>;
David Beck1b61be52018-11-08 09:19:14 +000040
Aron Virginas-Tar56055192018-11-12 18:10:43 +000041 using IMemoryManagerUniquePtr = std::unique_ptr<IMemoryManager>;
42 using IMemoryManagerSharedPtr = std::shared_ptr<IMemoryManager>;
43
Matteo Martincigh49124022019-01-11 13:25:59 +000044 using ISubGraphConverterPtr = std::unique_ptr<ISubGraphConverter>;
45
Matteo Martincighadddddb2019-01-24 14:06:23 +000046 using SubGraphUniquePtr = std::unique_ptr<SubGraph>;
47
Aron Virginas-Tar56055192018-11-12 18:10:43 +000048 virtual IMemoryManagerUniquePtr CreateMemoryManager() const = 0;
49
50 virtual IWorkloadFactoryPtr CreateWorkloadFactory(
51 const IMemoryManagerSharedPtr& memoryManager = nullptr) const = 0;
52
David Beck1b61be52018-11-08 09:19:14 +000053 virtual IBackendContextPtr CreateBackendContext(const IRuntime::CreationOptions&) const = 0;
Aron Virginas-Tar56055192018-11-12 18:10:43 +000054
Matteo Martincigh49124022019-01-11 13:25:59 +000055 virtual ISubGraphConverterPtr CreateSubGraphConverter(const std::shared_ptr<SubGraph>& subGraph) const = 0;
56
David Beck263e3492018-11-09 14:46:40 +000057 virtual Optimizations GetOptimizations() const = 0;
David Beck111b5d92018-11-12 14:59:37 +000058 virtual ILayerSupportSharedPtr GetLayerSupport() const = 0;
Matteo Martincighadddddb2019-01-24 14:06:23 +000059
60 virtual SubGraphUniquePtr OptimizeSubGraph(const SubGraph& subGraph, bool& optimizationAttempted) const = 0;
David Becke97c6e02018-10-03 13:09:28 +010061};
62
David Beck29c75de2018-10-23 13:35:58 +010063using IBackendInternalUniquePtr = std::unique_ptr<IBackendInternal>;
64
David Becke97c6e02018-10-03 13:09:28 +010065} // namespace armnn