blob: f8892c4665d1179c9d0aad359d42cc5053e269bd [file] [log] [blame]
Sadik Armagan3c24f432020-10-19 17:35:30 +01001//
Colm Donelan35a06892023-02-06 15:01:57 +00002// Copyright © 2020-2023 Arm Ltd and Contributors. All rights reserved.
Sadik Armagan3c24f432020-10-19 17:35:30 +01003// SPDX-License-Identifier: MIT
4//
5
6#include <DelegateOptions.hpp>
Jan Eilersf39f8d82021-10-26 16:57:34 +01007#include <armnn/utility/NumericCast.hpp>
8#include <armnn/utility/StringUtils.hpp>
Sadik Armagan3c24f432020-10-19 17:35:30 +01009
10namespace armnnDelegate
11{
12
John McLoughlin1bae8652023-03-14 11:47:15 +000013struct DelegateOptionsImpl
14{
15 ~DelegateOptionsImpl() = default;
16 DelegateOptionsImpl() = default;
17
18 explicit DelegateOptionsImpl(armnn::Compute computeDevice,
19 const std::vector<armnn::BackendOptions>& backendOptions,
20 const armnn::Optional<armnn::LogSeverity> logSeverityLevel)
21 : p_Backends({computeDevice}), p_RuntimeOptions(), m_LoggingSeverity(logSeverityLevel)
22 {
23 p_RuntimeOptions.m_BackendOptions = backendOptions;
24 }
25
26 explicit DelegateOptionsImpl(const std::vector<armnn::BackendId>& backends,
27 const std::vector<armnn::BackendOptions>& backendOptions,
28 const armnn::Optional<armnn::LogSeverity> logSeverityLevel)
29 : p_Backends(backends), p_RuntimeOptions(), m_LoggingSeverity(logSeverityLevel)
30 {
31 p_RuntimeOptions.m_BackendOptions = backendOptions;
32 }
33
34 explicit DelegateOptionsImpl(armnn::Compute computeDevice,
John Mcloughlinc5ee0d72023-03-24 12:07:25 +000035 const armnn::OptimizerOptionsOpaque& optimizerOptions,
John McLoughlin1bae8652023-03-14 11:47:15 +000036 const armnn::Optional<armnn::LogSeverity>& logSeverityLevel,
37 const armnn::Optional<armnn::DebugCallbackFunction>& func)
38 : p_Backends({computeDevice}),
39 p_RuntimeOptions(),
40 p_OptimizerOptions(optimizerOptions),
41 m_LoggingSeverity(logSeverityLevel),
42 p_DebugCallbackFunc(func)
43 {
44 }
45
46 explicit DelegateOptionsImpl(const std::vector<armnn::BackendId>& backends,
John Mcloughlinc5ee0d72023-03-24 12:07:25 +000047 const armnn::OptimizerOptionsOpaque& optimizerOptions,
John McLoughlin1bae8652023-03-14 11:47:15 +000048 const armnn::Optional<armnn::LogSeverity>& logSeverityLevel,
49 const armnn::Optional<armnn::DebugCallbackFunction>& func)
50 : p_Backends(backends),
51 p_RuntimeOptions(),
52 p_OptimizerOptions(optimizerOptions),
53 m_LoggingSeverity(logSeverityLevel),
54 p_DebugCallbackFunc(func)
55 {
56 }
57
58 /// Which backend to run Delegate on.
59 /// Examples of possible values are: CpuRef, CpuAcc, GpuAcc.
60 /// CpuRef as default.
61 std::vector<armnn::BackendId> p_Backends = {armnn::Compute::CpuRef };
62
63 /// Creation options for the ArmNN runtime
64 /// Contains options for global settings that are valid for the whole lifetime of ArmNN
65 /// i.e. BackendOptions, DynamicBackendPath, ExternalProfilingOptions and more
66 armnn::IRuntime::CreationOptions p_RuntimeOptions;
67
68 /// Options for the optimization step for the network
John Mcloughlinc5ee0d72023-03-24 12:07:25 +000069 armnn::OptimizerOptionsOpaque p_OptimizerOptions;
John McLoughlin1bae8652023-03-14 11:47:15 +000070
71 /// Internal profiling options. Written to INetworkProperties during model load.
72 /// Indicates whether internal profiling is enabled or not.
73 bool m_InternalProfilingEnabled = false;
74
75 /// Sets the level of detail output by the profiling. Options are DetailsWithEvents = 1 and DetailsOnly = 2
76 armnn::ProfilingDetailsMethod p_InternalProfilingDetail = armnn::ProfilingDetailsMethod::DetailsWithEvents;
77
78 /// Severity level for logging within ArmNN that will be used on creation of the delegate
79 armnn::Optional<armnn::LogSeverity> m_LoggingSeverity;
80
81 /// A callback function to debug layers performing custom computations on intermediate tensors.
82 /// If a function is not registered, and debug is enabled in OptimizerOptions,
83 /// debug will print information of the intermediate tensors.
84 armnn::Optional<armnn::DebugCallbackFunction> p_DebugCallbackFunc;
85
86 /// If not empty then the optimized model will be serialized to a file with this file name in "dot" format.
87 std::string m_SerializeToDot = "";
88
89 /// Option to disable TfLite Runtime fallback for unsupported operators.
90 bool m_DisableTfLiteRuntimeFallback = false;
91
92};
93
94DelegateOptions::~DelegateOptions() = default;
95
96DelegateOptions::DelegateOptions()
97 : p_DelegateOptionsImpl(std::make_unique<DelegateOptionsImpl>())
98{
99}
100
101DelegateOptions::DelegateOptions(DelegateOptions const &other)
102 : p_DelegateOptionsImpl(std::make_unique<DelegateOptionsImpl>(*other.p_DelegateOptionsImpl))
103{
104}
105
Sadik Armagan4189cc52020-11-11 18:01:48 +0000106DelegateOptions::DelegateOptions(armnn::Compute computeDevice,
Jan Eilers2cd18472020-12-15 10:42:38 +0000107 const std::vector<armnn::BackendOptions>& backendOptions,
108 const armnn::Optional<armnn::LogSeverity> logSeverityLevel)
John McLoughlin1bae8652023-03-14 11:47:15 +0000109 : p_DelegateOptionsImpl(std::make_unique<DelegateOptionsImpl>(computeDevice, backendOptions, logSeverityLevel))
Sadik Armagan3c24f432020-10-19 17:35:30 +0100110{
111}
112
Sadik Armagan4189cc52020-11-11 18:01:48 +0000113DelegateOptions::DelegateOptions(const std::vector<armnn::BackendId>& backends,
Jan Eilers2cd18472020-12-15 10:42:38 +0000114 const std::vector<armnn::BackendOptions>& backendOptions,
115 const armnn::Optional<armnn::LogSeverity> logSeverityLevel)
John McLoughlin1bae8652023-03-14 11:47:15 +0000116 : p_DelegateOptionsImpl(std::make_unique<DelegateOptionsImpl>(backends, backendOptions, logSeverityLevel))
Sadik Armagan3c24f432020-10-19 17:35:30 +0100117{
118}
119
Narumol Prangnawarat0b51d5a2021-01-20 15:58:29 +0000120DelegateOptions::DelegateOptions(armnn::Compute computeDevice,
John Mcloughlinc5ee0d72023-03-24 12:07:25 +0000121 const armnn::OptimizerOptionsOpaque& optimizerOptions,
Narumol Prangnawarat0b51d5a2021-01-20 15:58:29 +0000122 const armnn::Optional<armnn::LogSeverity>& logSeverityLevel,
123 const armnn::Optional<armnn::DebugCallbackFunction>& func)
John McLoughlin1bae8652023-03-14 11:47:15 +0000124 : p_DelegateOptionsImpl(std::make_unique<DelegateOptionsImpl>(computeDevice, optimizerOptions,
125 logSeverityLevel, func))
Narumol Prangnawarat0b51d5a2021-01-20 15:58:29 +0000126{
127}
128
129DelegateOptions::DelegateOptions(const std::vector<armnn::BackendId>& backends,
John Mcloughlinc5ee0d72023-03-24 12:07:25 +0000130 const armnn::OptimizerOptionsOpaque& optimizerOptions,
Narumol Prangnawarat0b51d5a2021-01-20 15:58:29 +0000131 const armnn::Optional<armnn::LogSeverity>& logSeverityLevel,
132 const armnn::Optional<armnn::DebugCallbackFunction>& func)
John McLoughlin1bae8652023-03-14 11:47:15 +0000133 : p_DelegateOptionsImpl(std::make_unique<DelegateOptionsImpl>(backends, optimizerOptions,
134 logSeverityLevel, func))
Narumol Prangnawarat0b51d5a2021-01-20 15:58:29 +0000135{
136}
137
Jan Eilersf39f8d82021-10-26 16:57:34 +0100138DelegateOptions::DelegateOptions(char const* const* options_keys,
139 char const* const* options_values,
140 size_t num_options,
141 void (*report_error)(const char*))
John McLoughlin1bae8652023-03-14 11:47:15 +0000142 : p_DelegateOptionsImpl(std::make_unique<DelegateOptionsImpl>())
Jan Eilersf39f8d82021-10-26 16:57:34 +0100143{
144 armnn::IRuntime::CreationOptions runtimeOptions;
John Mcloughlinc5ee0d72023-03-24 12:07:25 +0000145 armnn::OptimizerOptionsOpaque optimizerOptions;
Jan Eilersf39f8d82021-10-26 16:57:34 +0100146 bool internalProfilingState = false;
147 armnn::ProfilingDetailsMethod internalProfilingDetail = armnn::ProfilingDetailsMethod::DetailsWithEvents;
Jan Eilersf39f8d82021-10-26 16:57:34 +0100148 for (size_t i = 0; i < num_options; ++i)
149 {
150 // Process backends
151 if (std::string(options_keys[i]) == std::string("backends"))
152 {
153 // The backend option is a comma separated string of backendIDs that needs to be split
154 std::vector<armnn::BackendId> backends;
155 char* dup = strdup(options_values[i]);
156 char* pch = std::strtok(dup, ",");
157 while (pch != NULL)
158 {
159 backends.push_back(pch);
160 pch = strtok (NULL, ",");
161 }
John McLoughlin1bae8652023-03-14 11:47:15 +0000162 SetBackends(backends);
Jan Eilersf39f8d82021-10-26 16:57:34 +0100163 }
164 // Process dynamic-backends-path
165 else if (std::string(options_keys[i]) == std::string("dynamic-backends-path"))
166 {
167 runtimeOptions.m_DynamicBackendsPath = std::string(options_values[i]);
168 }
169 // Process logging level
170 else if (std::string(options_keys[i]) == std::string("logging-severity"))
171 {
John McLoughlin1bae8652023-03-14 11:47:15 +0000172 SetLoggingSeverity(options_values[i]);
Jan Eilersf39f8d82021-10-26 16:57:34 +0100173 }
174 // Process GPU backend options
175 else if (std::string(options_keys[i]) == std::string("gpu-tuning-level"))
176 {
John McLoughlin1bae8652023-03-14 11:47:15 +0000177 armnn::BackendOptions option("GpuAcc", {{"TuningLevel",
178 atoi(options_values[i])}});
Jan Eilersf39f8d82021-10-26 16:57:34 +0100179 runtimeOptions.m_BackendOptions.push_back(option);
180 }
181 else if (std::string(options_keys[i]) == std::string("gpu-mlgo-tuning-file"))
182 {
John McLoughlin1bae8652023-03-14 11:47:15 +0000183 armnn::BackendOptions option("GpuAcc", {{"MLGOTuningFilePath",
184 std::string(options_values[i])}});
John Mcloughlinc5ee0d72023-03-24 12:07:25 +0000185 optimizerOptions.AddModelOption(option);
Jan Eilersf39f8d82021-10-26 16:57:34 +0100186 }
187 else if (std::string(options_keys[i]) == std::string("gpu-tuning-file"))
188 {
John McLoughlin1bae8652023-03-14 11:47:15 +0000189 armnn::BackendOptions option("GpuAcc", {{"TuningFile",
190 std::string(options_values[i])}});
Jan Eilersf39f8d82021-10-26 16:57:34 +0100191 runtimeOptions.m_BackendOptions.push_back(option);
192 }
193 else if (std::string(options_keys[i]) == std::string("gpu-enable-profiling"))
194 {
195 runtimeOptions.m_EnableGpuProfiling = (*options_values[i] != '0');
196 }
197 else if (std::string(options_keys[i]) == std::string("gpu-kernel-profiling-enabled"))
198 {
199 armnn::BackendOptions option("GpuAcc", {{"KernelProfilingEnabled",
200 armnn::stringUtils::StringToBool(options_values[i])}});
201 runtimeOptions.m_BackendOptions.push_back(option);
202 }
203 else if (std::string(options_keys[i]) == std::string("save-cached-network"))
204 {
205 armnn::BackendOptions option("GpuAcc", {{"SaveCachedNetwork",
206 armnn::stringUtils::StringToBool(options_values[i])}});
John Mcloughlinc5ee0d72023-03-24 12:07:25 +0000207 optimizerOptions.AddModelOption(option);
Jan Eilersf39f8d82021-10-26 16:57:34 +0100208 }
209 else if (std::string(options_keys[i]) == std::string("cached-network-filepath"))
210 {
John McLoughlin1bae8652023-03-14 11:47:15 +0000211 armnn::BackendOptions option("GpuAcc", {{"CachedNetworkFilePath",
212 std::string(options_values[i])}});
John Mcloughlinc5ee0d72023-03-24 12:07:25 +0000213 optimizerOptions.AddModelOption(option);
Jan Eilersf39f8d82021-10-26 16:57:34 +0100214 }
215 // Process GPU & CPU backend options
216 else if (std::string(options_keys[i]) == std::string("enable-fast-math"))
217 {
218 armnn::BackendOptions modelOptionGpu("GpuAcc", {{"FastMathEnabled",
John Mcloughlinc5ee0d72023-03-24 12:07:25 +0000219 armnn::stringUtils::StringToBool(options_values[i])}});
220 optimizerOptions.AddModelOption(modelOptionGpu);
Jan Eilersf39f8d82021-10-26 16:57:34 +0100221
222 armnn::BackendOptions modelOptionCpu("CpuAcc", {{"FastMathEnabled",
John Mcloughlinc5ee0d72023-03-24 12:07:25 +0000223 armnn::stringUtils::StringToBool(options_values[i])}});
224 optimizerOptions.AddModelOption(modelOptionCpu);
Jan Eilersf39f8d82021-10-26 16:57:34 +0100225 }
226 // Process CPU backend options
227 else if (std::string(options_keys[i]) == std::string("number-of-threads"))
228 {
229 unsigned int numberOfThreads = armnn::numeric_cast<unsigned int>(atoi(options_values[i]));
John McLoughlin1bae8652023-03-14 11:47:15 +0000230 armnn::BackendOptions modelOption("CpuAcc",
231 {{"NumberOfThreads", numberOfThreads}});
John Mcloughlinc5ee0d72023-03-24 12:07:25 +0000232 optimizerOptions.AddModelOption(modelOption);
Jan Eilersf39f8d82021-10-26 16:57:34 +0100233 }
234 // Process reduce-fp32-to-fp16 option
235 else if (std::string(options_keys[i]) == std::string("reduce-fp32-to-fp16"))
236 {
John Mcloughlinc5ee0d72023-03-24 12:07:25 +0000237 optimizerOptions.SetReduceFp32ToFp16(armnn::stringUtils::StringToBool(options_values[i]));
Jan Eilersf39f8d82021-10-26 16:57:34 +0100238 }
Jan Eilersf39f8d82021-10-26 16:57:34 +0100239 // Process debug-data
240 else if (std::string(options_keys[i]) == std::string("debug-data"))
241 {
John Mcloughlinc5ee0d72023-03-24 12:07:25 +0000242 optimizerOptions.SetDebugEnabled(armnn::stringUtils::StringToBool(options_values[i]));
Jan Eilersf39f8d82021-10-26 16:57:34 +0100243 }
Mike Kelly80512b02022-05-16 23:10:42 +0100244 // Infer output-shape
245 else if (std::string(options_keys[i]) == std::string("infer-output-shape"))
246 {
247 armnn::BackendOptions backendOption("ShapeInferenceMethod",
248 {
249 { "InferAndValidate", armnn::stringUtils::StringToBool(options_values[i]) }
250 });
John Mcloughlinc5ee0d72023-03-24 12:07:25 +0000251 optimizerOptions.AddModelOption(backendOption);
Mike Kelly80512b02022-05-16 23:10:42 +0100252 }
253 // Allow expanded dims
254 else if (std::string(options_keys[i]) == std::string("allow-expanded-dims"))
255 {
256 armnn::BackendOptions backendOption("AllowExpandedDims",
257 {
258 { "AllowExpandedDims", armnn::stringUtils::StringToBool(options_values[i]) }
259 });
John Mcloughlinc5ee0d72023-03-24 12:07:25 +0000260 optimizerOptions.AddModelOption(backendOption);
Mike Kelly80512b02022-05-16 23:10:42 +0100261 }
Jan Eilersf39f8d82021-10-26 16:57:34 +0100262 // Process memory-import
263 else if (std::string(options_keys[i]) == std::string("memory-import"))
264 {
John Mcloughlinc5ee0d72023-03-24 12:07:25 +0000265 optimizerOptions.SetImportEnabled(armnn::stringUtils::StringToBool(options_values[i]));
Jan Eilersf39f8d82021-10-26 16:57:34 +0100266 }
267 // Process enable-internal-profiling
268 else if (std::string(options_keys[i]) == std::string("enable-internal-profiling"))
269 {
270 internalProfilingState = *options_values[i] != '0';
John Mcloughlinc5ee0d72023-03-24 12:07:25 +0000271 optimizerOptions.SetProfilingEnabled(internalProfilingState);
Jan Eilersf39f8d82021-10-26 16:57:34 +0100272 }
273 // Process internal-profiling-detail
274 else if (std::string(options_keys[i]) == std::string("internal-profiling-detail"))
275 {
276 uint32_t detailLevel = static_cast<uint32_t>(std::stoul(options_values[i]));
277 switch (detailLevel)
278 {
279 case 1:
280 internalProfilingDetail = armnn::ProfilingDetailsMethod::DetailsWithEvents;
281 break;
282 case 2:
283 internalProfilingDetail = armnn::ProfilingDetailsMethod::DetailsOnly;
284 break;
285 default:
286 internalProfilingDetail = armnn::ProfilingDetailsMethod::Undefined;
287 break;
288 }
289 }
290 // Process enable-external-profiling
291 else if (std::string(options_keys[i]) == std::string("enable-external-profiling"))
292 {
Colm Donelan35a06892023-02-06 15:01:57 +0000293 runtimeOptions.m_ProfilingOptions.m_EnableProfiling =
294 armnn::stringUtils::StringToBool(options_values[i]);
Jan Eilersf39f8d82021-10-26 16:57:34 +0100295 }
Colm Donelan35a06892023-02-06 15:01:57 +0000296 // Process timeline-profiling
Jan Eilersf39f8d82021-10-26 16:57:34 +0100297 else if (std::string(options_keys[i]) == std::string("timeline-profiling"))
298 {
John McLoughlin1bae8652023-03-14 11:47:15 +0000299 runtimeOptions.m_ProfilingOptions.m_TimelineEnabled =
300 armnn::stringUtils::StringToBool(options_values[i]);
Jan Eilersf39f8d82021-10-26 16:57:34 +0100301 }
Colm Donelan35a06892023-02-06 15:01:57 +0000302 // Process outgoing-capture-file
Jan Eilersf39f8d82021-10-26 16:57:34 +0100303 else if (std::string(options_keys[i]) == std::string("outgoing-capture-file"))
304 {
Colm Donelan35a06892023-02-06 15:01:57 +0000305 runtimeOptions.m_ProfilingOptions.m_OutgoingCaptureFile = options_values[i];
Jan Eilersf39f8d82021-10-26 16:57:34 +0100306 }
Colm Donelan35a06892023-02-06 15:01:57 +0000307 // Process incoming-capture-file
Jan Eilersf39f8d82021-10-26 16:57:34 +0100308 else if (std::string(options_keys[i]) == std::string("incoming-capture-file"))
309 {
Colm Donelan35a06892023-02-06 15:01:57 +0000310 runtimeOptions.m_ProfilingOptions.m_IncomingCaptureFile = options_values[i];
Jan Eilersf39f8d82021-10-26 16:57:34 +0100311 }
Colm Donelan35a06892023-02-06 15:01:57 +0000312 // Process file-only-external-profiling
Jan Eilersf39f8d82021-10-26 16:57:34 +0100313 else if (std::string(options_keys[i]) == std::string("file-only-external-profiling"))
314 {
John Mcloughlinc5ee0d72023-03-24 12:07:25 +0000315 runtimeOptions.m_ProfilingOptions.m_FileOnly =
316 armnn::stringUtils::StringToBool(options_values[i]);
Jan Eilersf39f8d82021-10-26 16:57:34 +0100317 }
Colm Donelan35a06892023-02-06 15:01:57 +0000318 // Process counter-capture-period
Jan Eilersf39f8d82021-10-26 16:57:34 +0100319 else if (std::string(options_keys[i]) == std::string("counter-capture-period"))
320 {
John McLoughlin1bae8652023-03-14 11:47:15 +0000321 runtimeOptions.m_ProfilingOptions.m_CapturePeriod =
322 static_cast<uint32_t>(std::stoul(options_values[i]));
Jan Eilersf39f8d82021-10-26 16:57:34 +0100323 }
Colm Donelan35a06892023-02-06 15:01:57 +0000324 // Process profiling-file-format
Jan Eilersf39f8d82021-10-26 16:57:34 +0100325 else if (std::string(options_keys[i]) == std::string("profiling-file-format"))
326 {
Colm Donelan35a06892023-02-06 15:01:57 +0000327 runtimeOptions.m_ProfilingOptions.m_FileFormat = options_values[i];
Jan Eilersf39f8d82021-10-26 16:57:34 +0100328 }
Colm Donelan35a06892023-02-06 15:01:57 +0000329 // Process serialize-to-dot
Jan Eilersf39f8d82021-10-26 16:57:34 +0100330 else if (std::string(options_keys[i]) == std::string("serialize-to-dot"))
331 {
John McLoughlin1bae8652023-03-14 11:47:15 +0000332 SetSerializeToDot(options_values[i]);
Jan Eilersf39f8d82021-10-26 16:57:34 +0100333 }
Sadik Armaganca565c12022-08-16 12:17:24 +0100334
John McLoughlin1bae8652023-03-14 11:47:15 +0000335 // Process disable-tflite-runtime-fallback
Sadik Armaganca565c12022-08-16 12:17:24 +0100336 else if (std::string(options_keys[i]) == std::string("disable-tflite-runtime-fallback"))
337 {
338 this->DisableTfLiteRuntimeFallback(armnn::stringUtils::StringToBool(options_values[i]));
339 }
Jan Eilersf39f8d82021-10-26 16:57:34 +0100340 else
341 {
John McLoughlin1bae8652023-03-14 11:47:15 +0000342 throw armnn::Exception("Unknown option for the ArmNN Delegate given: " +
343 std::string(options_keys[i]));
Jan Eilersf39f8d82021-10-26 16:57:34 +0100344 }
345 }
346
John McLoughlin1bae8652023-03-14 11:47:15 +0000347 SetRuntimeOptions(runtimeOptions);
348 SetOptimizerOptions(optimizerOptions);
349 SetInternalProfilingParams(internalProfilingState, internalProfilingDetail);
Jan Eilersf39f8d82021-10-26 16:57:34 +0100350}
John McLoughlin1bae8652023-03-14 11:47:15 +0000351
352const std::vector<armnn::BackendId>& DelegateOptions::GetBackends() const
353{
354 return p_DelegateOptionsImpl->p_Backends;
355}
356
357void DelegateOptions::SetBackends(const std::vector<armnn::BackendId>& backends)
358{
359 p_DelegateOptionsImpl->p_Backends = backends;
360}
361
362void DelegateOptions::SetDynamicBackendsPath(const std::string& dynamicBackendsPath)
363{
364 p_DelegateOptionsImpl->p_RuntimeOptions.m_DynamicBackendsPath = dynamicBackendsPath;
365}
366
367const std::string& DelegateOptions::GetDynamicBackendsPath() const
368{
369 return p_DelegateOptionsImpl->p_RuntimeOptions.m_DynamicBackendsPath;
370}
371
372void DelegateOptions::SetGpuProfilingState(bool gpuProfilingState)
373{
374 p_DelegateOptionsImpl->p_RuntimeOptions.m_EnableGpuProfiling = gpuProfilingState;
375}
376
377bool DelegateOptions::GetGpuProfilingState()
378{
379 return p_DelegateOptionsImpl->p_RuntimeOptions.m_EnableGpuProfiling;
380}
381
382const std::vector<armnn::BackendOptions>& DelegateOptions::GetBackendOptions() const
383{
384 return p_DelegateOptionsImpl->p_RuntimeOptions.m_BackendOptions;
385}
386
387void DelegateOptions::AddBackendOption(const armnn::BackendOptions& option)
388{
389 p_DelegateOptionsImpl->p_RuntimeOptions.m_BackendOptions.push_back(option);
390}
391
392void DelegateOptions::SetLoggingSeverity(const armnn::LogSeverity& level)
393{
394 p_DelegateOptionsImpl->m_LoggingSeverity = level;
395}
396
397void DelegateOptions::SetLoggingSeverity(const std::string& level)
398{
399 p_DelegateOptionsImpl->m_LoggingSeverity = armnn::StringToLogLevel(level);
400}
401
402armnn::LogSeverity DelegateOptions::GetLoggingSeverity()
403{
404 return p_DelegateOptionsImpl->m_LoggingSeverity.value();
405}
406
407bool DelegateOptions::IsLoggingEnabled()
408{
409 return p_DelegateOptionsImpl->m_LoggingSeverity.has_value();
410}
411
John Mcloughlinc5ee0d72023-03-24 12:07:25 +0000412const armnn::OptimizerOptionsOpaque& DelegateOptions::GetOptimizerOptions() const
John McLoughlin1bae8652023-03-14 11:47:15 +0000413{
414 return p_DelegateOptionsImpl->p_OptimizerOptions;
415}
416
John Mcloughlinc5ee0d72023-03-24 12:07:25 +0000417void DelegateOptions::SetOptimizerOptions(const armnn::OptimizerOptionsOpaque& optimizerOptions)
John McLoughlin1bae8652023-03-14 11:47:15 +0000418{
419 p_DelegateOptionsImpl->p_OptimizerOptions = optimizerOptions;
420}
421
422const armnn::Optional<armnn::DebugCallbackFunction>& DelegateOptions::GetDebugCallbackFunction() const
423{
424 return p_DelegateOptionsImpl->p_DebugCallbackFunc;
425}
426
427void DelegateOptions::SetInternalProfilingParams(bool internalProfilingState,
428 const armnn::ProfilingDetailsMethod& internalProfilingDetail)
429{
430 p_DelegateOptionsImpl->m_InternalProfilingEnabled = internalProfilingState;
431 p_DelegateOptionsImpl->p_InternalProfilingDetail = internalProfilingDetail;
432}
433
434bool DelegateOptions::GetInternalProfilingState() const
435{
436 return p_DelegateOptionsImpl->m_InternalProfilingEnabled;
437}
438
439const armnn::ProfilingDetailsMethod& DelegateOptions::GetInternalProfilingDetail() const
440{
441 return p_DelegateOptionsImpl->p_InternalProfilingDetail;
442}
443
444void DelegateOptions::SetSerializeToDot(const std::string& serializeToDotFile)
445{
446 p_DelegateOptionsImpl->m_SerializeToDot = serializeToDotFile;
447}
448
449const std::string& DelegateOptions::GetSerializeToDot() const
450{
451 return p_DelegateOptionsImpl->m_SerializeToDot;
452}
453
454void DelegateOptions::SetRuntimeOptions(const armnn::IRuntime::CreationOptions& runtimeOptions)
455{
456 p_DelegateOptionsImpl->p_RuntimeOptions = runtimeOptions;
457}
458
459const armnn::IRuntime::CreationOptions& DelegateOptions::GetRuntimeOptions()
460{
461 return p_DelegateOptionsImpl->p_RuntimeOptions;
462}
463
464void DelegateOptions::DisableTfLiteRuntimeFallback(bool fallbackState)
465{
466 p_DelegateOptionsImpl->m_DisableTfLiteRuntimeFallback = fallbackState;
467}
468
469bool DelegateOptions::TfLiteRuntimeFallbackDisabled()
470{
471 return p_DelegateOptionsImpl->m_DisableTfLiteRuntimeFallback;
472}
473
Sadik Armagan3c24f432020-10-19 17:35:30 +0100474} // namespace armnnDelegate