xref: /aosp_15_r20/external/armnn/delegate/common/include/DelegateOptions.hpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
1*89c4ff92SAndroid Build Coastguard Worker //
2*89c4ff92SAndroid Build Coastguard Worker // Copyright © 2020-2023 Arm Ltd and Contributors. All rights reserved.
3*89c4ff92SAndroid Build Coastguard Worker // SPDX-License-Identifier: MIT
4*89c4ff92SAndroid Build Coastguard Worker //
5*89c4ff92SAndroid Build Coastguard Worker 
6*89c4ff92SAndroid Build Coastguard Worker #pragma once
7*89c4ff92SAndroid Build Coastguard Worker 
8*89c4ff92SAndroid Build Coastguard Worker #include <armnn/ArmNN.hpp>
9*89c4ff92SAndroid Build Coastguard Worker #include <armnn/Optional.hpp>
10*89c4ff92SAndroid Build Coastguard Worker 
11*89c4ff92SAndroid Build Coastguard Worker #include <string>
12*89c4ff92SAndroid Build Coastguard Worker #include <vector>
13*89c4ff92SAndroid Build Coastguard Worker 
14*89c4ff92SAndroid Build Coastguard Worker namespace armnnDelegate
15*89c4ff92SAndroid Build Coastguard Worker {
16*89c4ff92SAndroid Build Coastguard Worker 
17*89c4ff92SAndroid Build Coastguard Worker struct DelegateOptionsImpl;
18*89c4ff92SAndroid Build Coastguard Worker 
19*89c4ff92SAndroid Build Coastguard Worker class DelegateOptions
20*89c4ff92SAndroid Build Coastguard Worker {
21*89c4ff92SAndroid Build Coastguard Worker public:
22*89c4ff92SAndroid Build Coastguard Worker     ~DelegateOptions();
23*89c4ff92SAndroid Build Coastguard Worker     DelegateOptions();
24*89c4ff92SAndroid Build Coastguard Worker     DelegateOptions(const DelegateOptions& other);
25*89c4ff92SAndroid Build Coastguard Worker 
26*89c4ff92SAndroid Build Coastguard Worker     DelegateOptions(armnn::Compute computeDevice,
27*89c4ff92SAndroid Build Coastguard Worker                     const std::vector<armnn::BackendOptions>& backendOptions = {},
28*89c4ff92SAndroid Build Coastguard Worker                     armnn::Optional<armnn::LogSeverity> logSeverityLevel = armnn::EmptyOptional());
29*89c4ff92SAndroid Build Coastguard Worker 
30*89c4ff92SAndroid Build Coastguard Worker     DelegateOptions(const std::vector<armnn::BackendId>& backends,
31*89c4ff92SAndroid Build Coastguard Worker                     const std::vector<armnn::BackendOptions>& backendOptions = {},
32*89c4ff92SAndroid Build Coastguard Worker                     armnn::Optional<armnn::LogSeverity> logSeverityLevel = armnn::EmptyOptional());
33*89c4ff92SAndroid Build Coastguard Worker 
34*89c4ff92SAndroid Build Coastguard Worker     DelegateOptions(armnn::Compute computeDevice,
35*89c4ff92SAndroid Build Coastguard Worker                     const armnn::OptimizerOptionsOpaque& optimizerOptions,
36*89c4ff92SAndroid Build Coastguard Worker                     const armnn::Optional<armnn::LogSeverity>& logSeverityLevel = armnn::EmptyOptional(),
37*89c4ff92SAndroid Build Coastguard Worker                     const armnn::Optional<armnn::DebugCallbackFunction>& func = armnn::EmptyOptional());
38*89c4ff92SAndroid Build Coastguard Worker 
39*89c4ff92SAndroid Build Coastguard Worker     DelegateOptions(const std::vector<armnn::BackendId>& backends,
40*89c4ff92SAndroid Build Coastguard Worker                     const armnn::OptimizerOptionsOpaque& optimizerOptions,
41*89c4ff92SAndroid Build Coastguard Worker                     const armnn::Optional<armnn::LogSeverity>& logSeverityLevel = armnn::EmptyOptional(),
42*89c4ff92SAndroid Build Coastguard Worker                     const armnn::Optional<armnn::DebugCallbackFunction>& func = armnn::EmptyOptional());
43*89c4ff92SAndroid Build Coastguard Worker 
44*89c4ff92SAndroid Build Coastguard Worker     /**
45*89c4ff92SAndroid Build Coastguard Worker      * This constructor processes delegate options in form of command line arguments.
46*89c4ff92SAndroid Build Coastguard Worker      * It works in conjunction with the TfLite external delegate plugin.
47*89c4ff92SAndroid Build Coastguard Worker      *
48*89c4ff92SAndroid Build Coastguard Worker      * Available options:
49*89c4ff92SAndroid Build Coastguard Worker      *
50*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "backends" \n
51*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: ["EthosNPU"/"GpuAcc"/"CpuAcc"/"CpuRef"] \n
52*89c4ff92SAndroid Build Coastguard Worker      *    Descriptions: A comma separated list without whitespaces of
53*89c4ff92SAndroid Build Coastguard Worker      *                  backends which should be used for execution. Falls
54*89c4ff92SAndroid Build Coastguard Worker      *                  back to next backend in list if previous doesn't
55*89c4ff92SAndroid Build Coastguard Worker      *                  provide support for operation. e.g. "GpuAcc,CpuAcc"
56*89c4ff92SAndroid Build Coastguard Worker      *
57*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "dynamic-backends-path" \n
58*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: [filenameString] \n
59*89c4ff92SAndroid Build Coastguard Worker      *    Descriptions: This is the directory that will be searched for any dynamic backends.
60*89c4ff92SAndroid Build Coastguard Worker      *
61*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "logging-severity" \n
62*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: ["trace"/"debug"/"info"/"warning"/"error"/"fatal"] \n
63*89c4ff92SAndroid Build Coastguard Worker      *    Description: Sets the logging severity level for ArmNN. Logging
64*89c4ff92SAndroid Build Coastguard Worker      *                 is turned off if this option is not provided.
65*89c4ff92SAndroid Build Coastguard Worker      *
66*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "gpu-tuning-level" \n
67*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: ["0"/"1"/"2"/"3"] \n
68*89c4ff92SAndroid Build Coastguard Worker      *    Description: 0=UseOnly(default), 1=RapidTuning, 2=NormalTuning,
69*89c4ff92SAndroid Build Coastguard Worker      *                 3=ExhaustiveTuning. Requires option gpu-tuning-file.
70*89c4ff92SAndroid Build Coastguard Worker      *                 1,2 and 3 will create a tuning-file, 0 will apply the
71*89c4ff92SAndroid Build Coastguard Worker      *                 tunings from an existing file
72*89c4ff92SAndroid Build Coastguard Worker      *
73*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "gpu-mlgo-tuning-file" \n
74*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: [filenameString] \n
75*89c4ff92SAndroid Build Coastguard Worker      *    Description: File name for the MLGO tuning file
76*89c4ff92SAndroid Build Coastguard Worker      *
77*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "gpu-tuning-file" \n
78*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: [filenameString] \n
79*89c4ff92SAndroid Build Coastguard Worker      *    Description: File name for the tuning file.
80*89c4ff92SAndroid Build Coastguard Worker      *
81*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "gpu-enable-profiling" \n
82*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: ["true"/"false"] \n
83*89c4ff92SAndroid Build Coastguard Worker      *    Description: Enables GPU profiling
84*89c4ff92SAndroid Build Coastguard Worker      *
85*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "gpu-kernel-profiling-enabled" \n
86*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: ["true"/"false"] \n
87*89c4ff92SAndroid Build Coastguard Worker      *    Description: Enables GPU kernel profiling
88*89c4ff92SAndroid Build Coastguard Worker      *
89*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "save-cached-network" \n
90*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: ["true"/"false"] \n
91*89c4ff92SAndroid Build Coastguard Worker      *    Description: Enables saving of the cached network to a file,
92*89c4ff92SAndroid Build Coastguard Worker      *                 specified with the cached-network-filepath option
93*89c4ff92SAndroid Build Coastguard Worker      *
94*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "cached-network-filepath" \n
95*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: [filenameString] \n
96*89c4ff92SAndroid Build Coastguard Worker      *    Description: If non-empty, the given file will be used to load/save the cached network.
97*89c4ff92SAndroid Build Coastguard Worker      *                 If save-cached-network is given then the cached network will be saved to the given file.
98*89c4ff92SAndroid Build Coastguard Worker      *                 To save the cached network a file must already exist.
99*89c4ff92SAndroid Build Coastguard Worker      *                 If save-cached-network is not given then the cached network will be loaded from the given file.
100*89c4ff92SAndroid Build Coastguard Worker      *                 This will remove initial compilation time of kernels and speed up the first execution.
101*89c4ff92SAndroid Build Coastguard Worker      *
102*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "enable-fast-math" \n
103*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: ["true"/"false"] \n
104*89c4ff92SAndroid Build Coastguard Worker      *    Description: Enables fast_math options in backends that support it
105*89c4ff92SAndroid Build Coastguard Worker      *
106*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "number-of-threads" \n
107*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: ["1"-"64"] \n
108*89c4ff92SAndroid Build Coastguard Worker      *    Description: Assign the number of threads used by the CpuAcc backend.
109*89c4ff92SAndroid Build Coastguard Worker      *                 Default is set to 0 (Backend will decide number of threads to use).
110*89c4ff92SAndroid Build Coastguard Worker      *
111*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "reduce-fp32-to-fp16" \n
112*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: ["true"/"false"] \n
113*89c4ff92SAndroid Build Coastguard Worker      *    Description: Reduce Fp32 data to Fp16 for faster processing
114*89c4ff92SAndroid Build Coastguard Worker      *
115*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "reduce-fp32-to-bf16" \n
116*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: ["true"/"false"] \n
117*89c4ff92SAndroid Build Coastguard Worker      *    Description: This option is currently ignored. Please enable Fast Math in the CpuAcc or GpuAcc backends.
118*89c4ff92SAndroid Build Coastguard Worker      *
119*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "debug-data" \n
120*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: ["true"/"false"] \n
121*89c4ff92SAndroid Build Coastguard Worker      *    Description: Add debug data for easier troubleshooting
122*89c4ff92SAndroid Build Coastguard Worker      *
123*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "memory-import" \n
124*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: ["true"/"false"] \n
125*89c4ff92SAndroid Build Coastguard Worker      *    Description: Enable memory import
126*89c4ff92SAndroid Build Coastguard Worker      *
127*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "enable-internal-profiling" \n
128*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: ["true"/"false"] \n
129*89c4ff92SAndroid Build Coastguard Worker      *    Description: Enable the internal profiling feature.
130*89c4ff92SAndroid Build Coastguard Worker      *
131*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "internal-profiling-detail" \n
132*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: [1/2] \n
133*89c4ff92SAndroid Build Coastguard Worker      *    Description: Set the detail on the internal profiling. 1 = DetailsWithEvents, 2 = DetailsOnly.
134*89c4ff92SAndroid Build Coastguard Worker      *
135*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "enable-external-profiling" \n
136*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: ["true"/"false"] \n
137*89c4ff92SAndroid Build Coastguard Worker      *    Description: Enable the external profiling feature.
138*89c4ff92SAndroid Build Coastguard Worker      *
139*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "timeline-profiling" \n
140*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: ["true"/"false"] \n
141*89c4ff92SAndroid Build Coastguard Worker      *    Description: Indicates whether external timeline profiling is enabled or not.
142*89c4ff92SAndroid Build Coastguard Worker      *
143*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "outgoing-capture-file" \n
144*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: [filenameString] \n
145*89c4ff92SAndroid Build Coastguard Worker      *    Description: Path to a file in which outgoing timeline profiling messages will be stored.
146*89c4ff92SAndroid Build Coastguard Worker      *
147*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "incoming-capture-file" \n
148*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: [filenameString] \n
149*89c4ff92SAndroid Build Coastguard Worker      *    Description: Path to a file in which incoming timeline profiling messages will be stored.
150*89c4ff92SAndroid Build Coastguard Worker      *
151*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "file-only-external-profiling" \n
152*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: ["true"/"false"] \n
153*89c4ff92SAndroid Build Coastguard Worker      *    Description: Enable profiling output to file only.
154*89c4ff92SAndroid Build Coastguard Worker      *
155*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "counter-capture-period" \n
156*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: Integer, Default is 10000u
157*89c4ff92SAndroid Build Coastguard Worker      *    Description: Value in microseconds of the profiling capture period. \n
158*89c4ff92SAndroid Build Coastguard Worker      *
159*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "profiling-file-format" \n
160*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: String of ["binary"] \n
161*89c4ff92SAndroid Build Coastguard Worker      *    Description: The format of the file used for outputting profiling data. Currently on "binary" is supported.
162*89c4ff92SAndroid Build Coastguard Worker      *
163*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "serialize-to-dot" \n
164*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: [filenameString] \n
165*89c4ff92SAndroid Build Coastguard Worker      *    Description: Serialize the optimized network to the file specified in "dot" format.
166*89c4ff92SAndroid Build Coastguard Worker      *
167*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "infer-output-shape" \n
168*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: ["true"/"false"] \n
169*89c4ff92SAndroid Build Coastguard Worker      *    Description: Infers output tensor shape from input tensor shape and validate where applicable.
170*89c4ff92SAndroid Build Coastguard Worker      *
171*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "allow-expanded-dims" \n
172*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: ["true"/"false"] \n
173*89c4ff92SAndroid Build Coastguard Worker      *    Description: If true will disregard dimensions with a size of 1 when validating tensor shapes but tensor
174*89c4ff92SAndroid Build Coastguard Worker      *                 sizes must still match. \n
175*89c4ff92SAndroid Build Coastguard Worker      *                 This is an Experimental parameter that is incompatible with "infer-output-shape". \n
176*89c4ff92SAndroid Build Coastguard Worker      *                 This parameter may be removed in a later update.
177*89c4ff92SAndroid Build Coastguard Worker      *
178*89c4ff92SAndroid Build Coastguard Worker      *    Option key: "disable-tflite-runtime-fallback" \n
179*89c4ff92SAndroid Build Coastguard Worker      *    Possible values: ["true"/"false"] \n
180*89c4ff92SAndroid Build Coastguard Worker      *    Description: Disable TfLite Runtime fallback in the Arm NN TfLite delegate.
181*89c4ff92SAndroid Build Coastguard Worker      *                 An exception will be thrown if unsupported operators are encountered.
182*89c4ff92SAndroid Build Coastguard Worker      *                 This option is only for testing purposes.
183*89c4ff92SAndroid Build Coastguard Worker      *
184*89c4ff92SAndroid Build Coastguard Worker      * @param[in]     option_keys     Delegate option names
185*89c4ff92SAndroid Build Coastguard Worker      * @param[in]     options_values  Delegate option values
186*89c4ff92SAndroid Build Coastguard Worker      * @param[in]     num_options     Number of delegate options
187*89c4ff92SAndroid Build Coastguard Worker      * @param[in,out] report_error    Error callback function
188*89c4ff92SAndroid Build Coastguard Worker      *
189*89c4ff92SAndroid Build Coastguard Worker      */
190*89c4ff92SAndroid Build Coastguard Worker     DelegateOptions(char const* const* options_keys,
191*89c4ff92SAndroid Build Coastguard Worker                     char const* const* options_values,
192*89c4ff92SAndroid Build Coastguard Worker                     size_t num_options,
193*89c4ff92SAndroid Build Coastguard Worker                     void (*report_error)(const char*));
194*89c4ff92SAndroid Build Coastguard Worker 
195*89c4ff92SAndroid Build Coastguard Worker     const std::vector<armnn::BackendId>& GetBackends() const;
196*89c4ff92SAndroid Build Coastguard Worker 
197*89c4ff92SAndroid Build Coastguard Worker     void SetBackends(const std::vector<armnn::BackendId>& backends);
198*89c4ff92SAndroid Build Coastguard Worker 
199*89c4ff92SAndroid Build Coastguard Worker     void SetDynamicBackendsPath(const std::string& dynamicBackendsPath);
200*89c4ff92SAndroid Build Coastguard Worker 
201*89c4ff92SAndroid Build Coastguard Worker     const std::string& GetDynamicBackendsPath() const;
202*89c4ff92SAndroid Build Coastguard Worker 
203*89c4ff92SAndroid Build Coastguard Worker     void SetGpuProfilingState(bool gpuProfilingState);
204*89c4ff92SAndroid Build Coastguard Worker 
205*89c4ff92SAndroid Build Coastguard Worker     bool GetGpuProfilingState();
206*89c4ff92SAndroid Build Coastguard Worker 
207*89c4ff92SAndroid Build Coastguard Worker     const std::vector<armnn::BackendOptions>& GetBackendOptions() const;
208*89c4ff92SAndroid Build Coastguard Worker 
209*89c4ff92SAndroid Build Coastguard Worker     /// Appends a backend option to the list of backend options
210*89c4ff92SAndroid Build Coastguard Worker     void AddBackendOption(const armnn::BackendOptions& option);
211*89c4ff92SAndroid Build Coastguard Worker 
212*89c4ff92SAndroid Build Coastguard Worker     /// Sets the severity level for logging within ArmNN that will be used on creation of the delegate
213*89c4ff92SAndroid Build Coastguard Worker     void SetLoggingSeverity(const armnn::LogSeverity& level);
214*89c4ff92SAndroid Build Coastguard Worker     void SetLoggingSeverity(const std::string& level);
215*89c4ff92SAndroid Build Coastguard Worker 
216*89c4ff92SAndroid Build Coastguard Worker     /// Returns the severity level for logging within ArmNN
217*89c4ff92SAndroid Build Coastguard Worker     armnn::LogSeverity GetLoggingSeverity();
218*89c4ff92SAndroid Build Coastguard Worker 
219*89c4ff92SAndroid Build Coastguard Worker     bool IsLoggingEnabled();
220*89c4ff92SAndroid Build Coastguard Worker 
221*89c4ff92SAndroid Build Coastguard Worker     const armnn::OptimizerOptionsOpaque& GetOptimizerOptions() const;
222*89c4ff92SAndroid Build Coastguard Worker 
223*89c4ff92SAndroid Build Coastguard Worker     void SetOptimizerOptions(const armnn::OptimizerOptionsOpaque& optimizerOptions);
224*89c4ff92SAndroid Build Coastguard Worker 
225*89c4ff92SAndroid Build Coastguard Worker     const armnn::Optional<armnn::DebugCallbackFunction>& GetDebugCallbackFunction() const;
226*89c4ff92SAndroid Build Coastguard Worker 
227*89c4ff92SAndroid Build Coastguard Worker     void SetInternalProfilingParams(bool internalProfilingState,
228*89c4ff92SAndroid Build Coastguard Worker                                     const armnn::ProfilingDetailsMethod& internalProfilingDetail);
229*89c4ff92SAndroid Build Coastguard Worker 
230*89c4ff92SAndroid Build Coastguard Worker     bool GetInternalProfilingState() const;
231*89c4ff92SAndroid Build Coastguard Worker 
232*89c4ff92SAndroid Build Coastguard Worker     const armnn::ProfilingDetailsMethod& GetInternalProfilingDetail() const;
233*89c4ff92SAndroid Build Coastguard Worker 
234*89c4ff92SAndroid Build Coastguard Worker     void SetSerializeToDot(const std::string& serializeToDotFile);
235*89c4ff92SAndroid Build Coastguard Worker 
236*89c4ff92SAndroid Build Coastguard Worker     const std::string& GetSerializeToDot() const;
237*89c4ff92SAndroid Build Coastguard Worker 
238*89c4ff92SAndroid Build Coastguard Worker     /// @Note: This might overwrite options that were set with other setter functions of DelegateOptions
239*89c4ff92SAndroid Build Coastguard Worker     void SetRuntimeOptions(const armnn::IRuntime::CreationOptions& runtimeOptions);
240*89c4ff92SAndroid Build Coastguard Worker 
241*89c4ff92SAndroid Build Coastguard Worker     const armnn::IRuntime::CreationOptions& GetRuntimeOptions();
242*89c4ff92SAndroid Build Coastguard Worker 
243*89c4ff92SAndroid Build Coastguard Worker     void DisableTfLiteRuntimeFallback(bool fallbackState);
244*89c4ff92SAndroid Build Coastguard Worker 
245*89c4ff92SAndroid Build Coastguard Worker     bool TfLiteRuntimeFallbackDisabled();
246*89c4ff92SAndroid Build Coastguard Worker 
247*89c4ff92SAndroid Build Coastguard Worker private:
248*89c4ff92SAndroid Build Coastguard Worker     std::unique_ptr<armnnDelegate::DelegateOptionsImpl> p_DelegateOptionsImpl;
249*89c4ff92SAndroid Build Coastguard Worker 
250*89c4ff92SAndroid Build Coastguard Worker };
251*89c4ff92SAndroid Build Coastguard Worker 
252*89c4ff92SAndroid Build Coastguard Worker } // namespace armnnDelegate
253