2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
8 #include "INetwork.hpp"
9 #include "IProfiler.hpp"
12 #include "TypesUtils.hpp"
19 using NetworkId = int;
21 class IGpuAccTunedParameters;
24 using IRuntimePtr = std::unique_ptr<IRuntime, void(*)(IRuntime* runtime)>;
26 struct INetworkProperties
28 INetworkProperties(bool importEnabled = false, bool exportEnabled = false)
29 : m_ImportEnabled(importEnabled),
30 m_ExportEnabled(exportEnabled) {}
32 const bool m_ImportEnabled;
33 const bool m_ExportEnabled;
35 virtual ~INetworkProperties() {}
41 struct CreationOptions
44 : m_GpuAccTunedParameters(nullptr)
45 , m_EnableGpuProfiling(false)
46 , m_DynamicBackendsPath("")
49 /// If set, uses the GpuAcc tuned parameters from the given object when executing GPU workloads.
50 /// It will also be updated with new tuned parameters if it is configured to do so.
51 std::shared_ptr<IGpuAccTunedParameters> m_GpuAccTunedParameters;
53 // Setting this flag will allow the user to obtain GPU profiling information from the runtime.
54 bool m_EnableGpuProfiling;
56 // Setting this value will override the paths set by the DYNAMIC_BACKEND_PATHS compiler directive
57 // Only a single path is allowed for the override
58 std::string m_DynamicBackendsPath;
60 struct ExternalProfilingOptions
62 ExternalProfilingOptions()
63 : m_EnableProfiling(false)
64 , m_OutgoingCaptureFile("")
65 , m_IncomingCaptureFile("")
67 , m_CapturePeriod(LOWEST_CAPTURE_PERIOD)
70 bool m_EnableProfiling;
71 std::string m_OutgoingCaptureFile;
72 std::string m_IncomingCaptureFile;
74 uint32_t m_CapturePeriod;
77 ExternalProfilingOptions m_ProfilingOptions;
80 static IRuntime* CreateRaw(const CreationOptions& options);
81 static IRuntimePtr Create(const CreationOptions& options);
82 static void Destroy(IRuntime* runtime);
84 /// Loads a complete network into the IRuntime.
85 /// @param [out] networkIdOut - Unique identifier for the network is returned in this reference.
86 /// @param [in] network - Complete network to load into the IRuntime.
87 /// The runtime takes ownership of the network once passed in.
88 /// @return armnn::Status
89 virtual Status LoadNetwork(NetworkId& networkIdOut, IOptimizedNetworkPtr network) = 0;
91 /// Load a complete network into the IRuntime.
92 /// @param [out] networkIdOut Unique identifier for the network is returned in this reference.
93 /// @param [in] network Complete network to load into the IRuntime.
94 /// @param [out] errorMessage Error message if there were any errors.
95 /// The runtime takes ownership of the network once passed in.
96 /// @return armnn::Status
97 virtual Status LoadNetwork(NetworkId& networkIdOut,
98 IOptimizedNetworkPtr network,
99 std::string& errorMessage) = 0;
101 virtual Status LoadNetwork(NetworkId& networkIdOut,
102 IOptimizedNetworkPtr network,
103 std::string& errorMessage,
104 const INetworkProperties& networkProperties) = 0;
106 virtual TensorInfo GetInputTensorInfo(NetworkId networkId, LayerBindingId layerId) const = 0;
107 virtual TensorInfo GetOutputTensorInfo(NetworkId networkId, LayerBindingId layerId) const = 0;
109 /// Evaluates a network using input in inputTensors and outputs filled into outputTensors
110 virtual Status EnqueueWorkload(NetworkId networkId,
111 const InputTensors& inputTensors,
112 const OutputTensors& outputTensors) = 0;
114 /// Unloads a network from the IRuntime.
115 /// At the moment this only removes the network from the m_Impl->m_Network.
116 /// This might need more work in the future to be AndroidNN compliant.
117 /// @param [in] networkId - Unique identifier for the network to be unloaded. Generated in LoadNetwork().
118 /// @return armnn::Status
119 virtual Status UnloadNetwork(NetworkId networkId) = 0;
121 virtual const IDeviceSpec& GetDeviceSpec() const = 0;
123 /// Gets the profiler corresponding to the given network id.
124 /// @param networkId The id of the network for which to get the profile.
125 /// @return A pointer to the requested profiler, or nullptr if not found.
126 virtual const std::shared_ptr<IProfiler> GetProfiler(NetworkId networkId) const = 0;
128 /// Registers a callback function to debug layers performing custom computations on intermediate tensors.
129 /// @param networkId The id of the network to register the callback.
130 /// @param func callback function to pass to the debug layer.
131 virtual void RegisterDebugCallback(NetworkId networkId, const DebugCallbackFunction& func) = 0;
137 using IGpuAccTunedParametersPtr = std::shared_ptr<IGpuAccTunedParameters>;
139 /// Manages a set of GpuAcc parameters which have been tuned for maximum performance.
140 /// Passes an instance of this object to the IRuntime::Create() method (via IRuntime::CreationOptions) to use it
141 /// for all GPU workload execution.
143 /// Can be created in two modes:
144 /// - In UseTunedParameters mode, the parameters stored in this object are used to execute GPU workloads.
145 /// - In UpdateTunedParameters mode, additionally, whenever a GPU workload is executed for the first time, the
146 /// optimum parameters will be found and stored in this object. WARNING - This tuning can be slow.
148 /// The parameters can be loaded from and saved to a file so that you can first run a slow initial read-write
149 /// execution, save the parameters for later and then run fast read-only executions using the optimised parameters.
150 class IGpuAccTunedParameters
156 UpdateTunedParameters
159 enum class TuningLevel
166 /// Creates an IClTunedParameters with the given mode.
168 static IGpuAccTunedParameters* CreateRaw(Mode mode, TuningLevel tunerMode);
169 static IGpuAccTunedParametersPtr Create(Mode mode, TuningLevel tunerMode);
171 static void Destroy(IGpuAccTunedParameters* params);
173 /// Loads an existing set of tuned parameters from the given file.
174 /// If there is an error loading the file, an armnn::Exception is thrown.
175 virtual void Load(const char* filename) = 0;
177 /// Saves the current set of tuned parameters to the given file.
178 /// If there is an error saving to the file, an armnn::Exception is thrown.
179 virtual void Save(const char* filename) const = 0;
182 virtual ~IGpuAccTunedParameters() {};