blob: ace0859f7ebc0b6e78ab541dd4870df3a9df33b9 [file] [log] [blame]
Sadik Armagan3c24f432020-10-19 17:35:30 +01001//
2// Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
8#include <armnn/ArmNN.hpp>
Jan Eilers2cd18472020-12-15 10:42:38 +00009#include <armnn/Logging.hpp>
10#include <armnn/Optional.hpp>
Sadik Armagan3c24f432020-10-19 17:35:30 +010011
12#include <set>
13#include <string>
14#include <vector>
15
16namespace armnnDelegate
17{
18
19class DelegateOptions
20{
21public:
Jan Eilers2cd18472020-12-15 10:42:38 +000022 DelegateOptions(armnn::Compute computeDevice,
23 const std::vector<armnn::BackendOptions>& backendOptions = {},
24 armnn::Optional<armnn::LogSeverity> logSeverityLevel = armnn::EmptyOptional());
Sadik Armagan3c24f432020-10-19 17:35:30 +010025
Sadik Armagan4189cc52020-11-11 18:01:48 +000026 DelegateOptions(const std::vector<armnn::BackendId>& backends,
Jan Eilers2cd18472020-12-15 10:42:38 +000027 const std::vector<armnn::BackendOptions>& backendOptions = {},
28 armnn::Optional<armnn::LogSeverity> logSeverityLevel = armnn::EmptyOptional());
Sadik Armagan3c24f432020-10-19 17:35:30 +010029
Narumol Prangnawarat0b51d5a2021-01-20 15:58:29 +000030 DelegateOptions(armnn::Compute computeDevice,
31 const armnn::OptimizerOptions& optimizerOptions,
Narumol Prangnawarat0b51d5a2021-01-20 15:58:29 +000032 const armnn::Optional<armnn::LogSeverity>& logSeverityLevel = armnn::EmptyOptional(),
33 const armnn::Optional<armnn::DebugCallbackFunction>& func = armnn::EmptyOptional());
34
35 DelegateOptions(const std::vector<armnn::BackendId>& backends,
36 const armnn::OptimizerOptions& optimizerOptions,
Narumol Prangnawarat0b51d5a2021-01-20 15:58:29 +000037 const armnn::Optional<armnn::LogSeverity>& logSeverityLevel = armnn::EmptyOptional(),
38 const armnn::Optional<armnn::DebugCallbackFunction>& func = armnn::EmptyOptional());
39
Sadik Armagan3c24f432020-10-19 17:35:30 +010040 const std::vector<armnn::BackendId>& GetBackends() const { return m_Backends; }
41
42 void SetBackends(const std::vector<armnn::BackendId>& backends) { m_Backends = backends; }
43
Sadik Armagan4189cc52020-11-11 18:01:48 +000044 const std::vector<armnn::BackendOptions>& GetBackendOptions() const { return m_BackendOptions; }
45
Jan Eilers2cd18472020-12-15 10:42:38 +000046 /// Appends a backend option to the list of backend options
47 void AddBackendOption(const armnn::BackendOptions& option) { m_BackendOptions.push_back(option); }
48
49 /// Sets the severity level for logging within ArmNN that will be used on creation of the delegate
50 void SetLoggingSeverity(const armnn::LogSeverity& level) { m_LoggingSeverity = level; }
51 void SetLoggingSeverity(const std::string& level) { m_LoggingSeverity = armnn::StringToLogLevel(level); }
52
53 /// Returns the severity level for logging within ArmNN
54 armnn::LogSeverity GetLoggingSeverity() { return m_LoggingSeverity.value(); }
55
56 bool IsLoggingEnabled() { return m_LoggingSeverity.has_value(); }
57
Narumol Prangnawarat0b51d5a2021-01-20 15:58:29 +000058 const armnn::OptimizerOptions& GetOptimizerOptions() const { return m_OptimizerOptions; }
59
Narumol Prangnawarat74a3cf52021-01-29 15:38:54 +000060 void SetOptimizerOptions(const armnn::OptimizerOptions& optimizerOptions) { m_OptimizerOptions = optimizerOptions; }
61
Narumol Prangnawarat0b51d5a2021-01-20 15:58:29 +000062 const armnn::Optional<armnn::DebugCallbackFunction>& GetDebugCallbackFunction() const
63 { return m_DebugCallbackFunc; }
64
Sadik Armagan3c24f432020-10-19 17:35:30 +010065private:
66 /// Which backend to run Delegate on.
67 /// Examples of possible values are: CpuRef, CpuAcc, GpuAcc.
68 /// CpuRef as default.
69 std::vector<armnn::BackendId> m_Backends = { armnn::Compute::CpuRef };
Sadik Armagan4189cc52020-11-11 18:01:48 +000070
71 /// Pass backend specific options to Delegate
72 ///
73 /// For example, tuning can be enabled on GpuAcc like below
74 /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
75 /// m_BackendOptions.emplace_back(
76 /// BackendOptions{"GpuAcc",
77 /// {
78 /// {"TuningLevel", 2},
79 /// {"TuningFile", filename}
80 /// }
81 /// });
82 /// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
83 /// The following backend options are available:
84 /// GpuAcc:
85 /// "TuningLevel" : int [0..3] (0=UseOnly(default) | 1=RapidTuning | 2=NormalTuning | 3=ExhaustiveTuning)
86 /// "TuningFile" : string [filenameString]
87 /// "KernelProfilingEnabled" : bool [true | false]
88 std::vector<armnn::BackendOptions> m_BackendOptions;
Jan Eilers2cd18472020-12-15 10:42:38 +000089
Narumol Prangnawarat0b51d5a2021-01-20 15:58:29 +000090 /// OptimizerOptions
91 /// Reduce Fp32 data to Fp16 for faster processing
92 /// bool m_ReduceFp32ToFp16;
93 /// Add debug data for easier troubleshooting
94 /// bool m_Debug;
95 /// Reduce Fp32 data to Bf16 for faster processing
96 /// bool m_ReduceFp32ToBf16;
Narumol Prangnawarat0b51d5a2021-01-20 15:58:29 +000097 /// Enable Import
98 /// bool m_ImportEnabled;
99 /// Enable Model Options
100 /// ModelOptions m_ModelOptions;
101 armnn::OptimizerOptions m_OptimizerOptions;
102
Jan Eilers2cd18472020-12-15 10:42:38 +0000103 /// Severity level for logging within ArmNN that will be used on creation of the delegate
104 armnn::Optional<armnn::LogSeverity> m_LoggingSeverity;
Narumol Prangnawarat0b51d5a2021-01-20 15:58:29 +0000105
106 /// A callback function to debug layers performing custom computations on intermediate tensors.
107 /// If a function is not registered, and debug is enabled in OptimizerOptions,
108 /// debug will print information of the intermediate tensors.
109 armnn::Optional<armnn::DebugCallbackFunction> m_DebugCallbackFunc;
Sadik Armagan3c24f432020-10-19 17:35:30 +0100110};
111
112} // namespace armnnDelegate