ArmNN
 25.11
Loading...
Searching...
No Matches
ClBackendContext Class Reference

#include <ClBackendContext.hpp>

Inheritance diagram for ClBackendContext:
[legend]
Collaboration diagram for ClBackendContext:
[legend]

Public Member Functions

 ClBackendContext (const IRuntime::CreationOptions &options)
bool BeforeLoadNetwork (NetworkId networkId) override
 Before and after Load network events.
bool AfterLoadNetwork (NetworkId networkId) override
bool BeforeUnloadNetwork (NetworkId networkId) override
 Before and after Unload network events.
bool AfterUnloadNetwork (NetworkId networkId) override
bool AfterEnqueueWorkload (NetworkId networkId) override
 ~ClBackendContext () override
Public Member Functions inherited from IBackendContext
virtual ~IBackendContext ()

Protected Attributes

arm_compute::CLGEMMHeuristicsHandle m_MLGOTuner
std::string m_MLGOTuningFile

Additional Inherited Members

Protected Member Functions inherited from IBackendContext
 IBackendContext (const IRuntime::CreationOptions &)

Detailed Description

Definition at line 17 of file ClBackendContext.hpp.

Constructor & Destructor Documentation

◆ ClBackendContext()

Definition at line 61 of file ClBackendContext.cpp.

62 : IBackendContext(options)
63 , m_TuningFile()
64{
65 bool kernelProfiling = options.m_EnableGpuProfiling;
66
67 arm_compute::CLTuner* tuner = nullptr;
68 arm_compute::CLGEMMHeuristicsHandle* mlgoTuner = nullptr;
69 bool useLegacyTunerAPI = options.m_GpuAccTunedParameters.get() != nullptr;
70 if (useLegacyTunerAPI)
71 {
72 auto clTunerParams = PolymorphicDowncast<ClTunedParameters*>(
73 options.m_GpuAccTunedParameters.get());
74 tuner = &clTunerParams->m_Tuner;
75
76 if (tuner)
77 {
78 auto ConvertTuningLevel = [](IGpuAccTunedParameters::TuningLevel level,
80 {
82 {
83 return TuningLevel::None;
84 }
85
86 switch(level)
87 {
88 case IGpuAccTunedParameters::TuningLevel::Rapid:
89 return TuningLevel::Rapid;
90 case IGpuAccTunedParameters::TuningLevel::Normal:
91 return TuningLevel::Normal;
92 case IGpuAccTunedParameters::TuningLevel::Exhaustive:
93 return TuningLevel::Exhaustive;
94 default:
95 {
96 throw InvalidArgumentException("Invalid value of tuning level specified.");
97 }
98 }
99 };
100
101 TuningLevel tuningLevel = ConvertTuningLevel(clTunerParams->m_TuningLevel, clTunerParams->m_Mode);
102 ConfigureTuner(*tuner, tuningLevel);
103 }
104 }
105 else //New backend options API
106 {
107 const TuningLevel defaultTuningLevel = TuningLevel::None;
108 auto tuningLevel = defaultTuningLevel;
109
110 ParseOptions(options.m_BackendOptions, "GpuAcc", [&](std::string name, const BackendOptions::Var& value)
111 {
112 if (name == "KernelProfilingEnabled")
113 {
114 kernelProfiling |= ParseBooleanBackendOption(value, false);
115 } else if (name == "TuningFile")
116 {
117 m_TuningFile = ParseStringBackendOption(value, "");
118 } else if (name == "TuningLevel")
119 {
120 tuningLevel = ParseTuningLevel(value, defaultTuningLevel);
121 }
122 else if (name == "MLGOTuningFilePath")
123 {
124 m_MLGOTuningFile = ParseStringBackendOption(value, "");
125 }
126 });
127
128 // Create the tuner, in tuning mode initially.
129 m_Tuner = std::make_unique<arm_compute::CLTuner>(true);
130
131 ConfigureTuner(*(m_Tuner.get()), tuningLevel);
132
133 if (!m_TuningFile.empty())
134 {
135 try
136 {
137 ARMNN_LOG(info) << "Loading Gpu tuning data from file: " << m_TuningFile;
138 m_Tuner->load_from_file(m_TuningFile.c_str());
139 }
140 catch (const std::exception& e)
141 {
142 // Warn if not tuning, otherwise tuning will generate new params
143 if (tuningLevel == TuningLevel::None)
144 {
145 ARMNN_LOG(warning) << "Could not load GpuAcc tuner data file.";
146 }
147 }
148 }
149
150 if (!m_MLGOTuningFile.empty())
151 {
152 try
153 {
154 ARMNN_LOG(info) << "Loading Gpu MLGO tuning data from file: " << m_TuningFile;
155 if(m_MLGOTuner.reload_from_file(m_MLGOTuningFile.c_str()))
156 {
157 mlgoTuner = &m_MLGOTuner;
158 }
159 }
160 catch (const std::exception& e)
161 {
162 ARMNN_LOG(warning) << "Could not load GpuAcc MLGO tuner data file.";
163 }
164 }
165
166 tuner = m_Tuner.get();
167 }
168
169 m_ClContextControlWrapper = std::make_unique<ClContextControlWrapper>(
170 tuner,
171 mlgoTuner,
172 kernelProfiling
173 );
174}
#define ARMNN_LOG(severity)
Definition Logging.hpp:212
void ConfigureTuner(arm_compute::CLTuner &tuner, TuningLevel level)
std::string ParseStringBackendOption(const armnn::BackendOptions::Var &value, std::string defaultValue)
TuningLevel ParseTuningLevel(const BackendOptions::Var &value, TuningLevel defaultValue)
void ParseOptions(const std::vector< BackendOptions > &options, BackendId backend, F f)

References ARMNN_LOG, armnn::ConfigureTuner(), IGpuAccTunedParameters::Exhaustive, armnn::Exhaustive, IBackendContext::IBackendContext(), armnn::info, IRuntime::CreationOptions::m_BackendOptions, IRuntime::CreationOptions::m_EnableGpuProfiling, IRuntime::CreationOptions::m_GpuAccTunedParameters, m_MLGOTuner, m_MLGOTuningFile, armnn::None, IGpuAccTunedParameters::Normal, armnn::Normal, armnn::ParseOptions(), armnn::ParseStringBackendOption(), armnn::ParseTuningLevel(), armnn::PolymorphicDowncast(), IGpuAccTunedParameters::Rapid, armnn::Rapid, IGpuAccTunedParameters::UseTunedParameters, and armnn::warning.

◆ ~ClBackendContext()

~ClBackendContext ( )
override

Definition at line 217 of file ClBackendContext.cpp.

218{
219 if (m_Tuner && !m_TuningFile.empty())
220 {
221 try
222 {
223 m_Tuner->save_to_file(m_TuningFile.c_str());
224 }
225 catch(const std::exception& e)
226 {
227 ARMNN_LOG(warning) << "Could not save GpuAcc tuner data to file " << m_TuningFile;
228 }
229 }
230}

References ARMNN_LOG, armnn::warning, and ~ClBackendContext().

Referenced by ~ClBackendContext().

Member Function Documentation

◆ AfterEnqueueWorkload()

bool AfterEnqueueWorkload ( NetworkId networkId)
overridevirtual

Implements IBackendContext.

Definition at line 212 of file ClBackendContext.cpp.

213{
214 return m_ClContextControlWrapper->Sync();
215}

References AfterEnqueueWorkload().

Referenced by AfterEnqueueWorkload().

◆ AfterLoadNetwork()

bool AfterLoadNetwork ( NetworkId networkId)
overridevirtual

Implements IBackendContext.

Definition at line 181 of file ClBackendContext.cpp.

182{
183 {
184 std::lock_guard<std::mutex> lockGuard(m_Mutex);
185 m_NetworkIds.insert(networkId);
186 }
187 return true;
188}

References AfterLoadNetwork().

Referenced by AfterLoadNetwork().

◆ AfterUnloadNetwork()

bool AfterUnloadNetwork ( NetworkId networkId)
overridevirtual

Implements IBackendContext.

Definition at line 195 of file ClBackendContext.cpp.

196{
197 bool clearCache = false;
198 {
199 std::lock_guard<std::mutex> lockGuard(m_Mutex);
200 m_NetworkIds.erase(networkId);
201 clearCache = m_NetworkIds.empty();
202 }
203
204 if (clearCache)
205 {
206 m_ClContextControlWrapper->ClearClCache();
207 }
208
209 return true;
210}

References AfterUnloadNetwork().

Referenced by AfterUnloadNetwork().

◆ BeforeLoadNetwork()

bool BeforeLoadNetwork ( NetworkId networkId)
overridevirtual

Before and after Load network events.

Implements IBackendContext.

Definition at line 176 of file ClBackendContext.cpp.

177{
178 return true;
179}

References BeforeLoadNetwork().

Referenced by BeforeLoadNetwork().

◆ BeforeUnloadNetwork()

bool BeforeUnloadNetwork ( NetworkId networkId)
overridevirtual

Before and after Unload network events.

Implements IBackendContext.

Definition at line 190 of file ClBackendContext.cpp.

191{
192 return m_ClContextControlWrapper->Sync();
193}

References BeforeUnloadNetwork().

Referenced by BeforeUnloadNetwork().

Member Data Documentation

◆ m_MLGOTuner

arm_compute::CLGEMMHeuristicsHandle m_MLGOTuner
protected

Definition at line 43 of file ClBackendContext.hpp.

Referenced by ClBackendContext().

◆ m_MLGOTuningFile

std::string m_MLGOTuningFile
protected

Definition at line 44 of file ClBackendContext.hpp.

Referenced by ClBackendContext().


The documentation for this class was generated from the following files: