ArmNN
 20.11
ClBackendContext Class Reference

#include <ClBackendContext.hpp>

Inheritance diagram for ClBackendContext:
IBackendContext

Public Member Functions

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

Additional Inherited Members

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

Detailed Description

Definition at line 16 of file ClBackendContext.hpp.

Constructor & Destructor Documentation

◆ ClBackendContext()

Definition at line 136 of file ClBackendContext.cpp.

References ARMNN_ASSERT_MSG, ARMNN_LOG, armnn::ConfigureTuner(), armnn::Exhaustive, IGpuAccTunedParameters::Exhaustive, IRuntime::CreationOptions::m_BackendOptions, IRuntime::CreationOptions::m_EnableGpuProfiling, IRuntime::CreationOptions::m_GpuAccTunedParameters, armnn::None, armnn::Normal, IGpuAccTunedParameters::Normal, armnn::ParseFile(), armnn::ParseOptions(), armnn::ParseTuningLevel(), armnn::Rapid, IGpuAccTunedParameters::Rapid, IGpuAccTunedParameters::UseTunedParameters, and armnn::warning.

137  : IBackendContext(options)
138  , m_TuningFile()
139 {
140  bool kernelProfiling = options.m_EnableGpuProfiling;
141 
142  arm_compute::CLTuner* tuner = nullptr;
143  bool useLegacyTunerAPI = options.m_GpuAccTunedParameters.get() != nullptr;
144  if (useLegacyTunerAPI)
145  {
146  auto clTunerParams = PolymorphicDowncast<ClTunedParameters*>(
147  options.m_GpuAccTunedParameters.get());
148  tuner = &clTunerParams->m_Tuner;
149 
150  if (tuner)
151  {
152  auto ConvertTuningLevel = [](IGpuAccTunedParameters::TuningLevel level,
154  {
156  {
157  return TuningLevel::None;
158  }
159 
160  switch(level)
161  {
163  return TuningLevel::Rapid;
165  return TuningLevel::Normal;
168  default:
169  {
170  ARMNN_ASSERT_MSG(false, "Tuning level not recognised.");
171  return TuningLevel::None;
172  }
173  }
174  };
175 
176  TuningLevel tuningLevel = ConvertTuningLevel(clTunerParams->m_TuningLevel, clTunerParams->m_Mode);
177  ConfigureTuner(*tuner, tuningLevel);
178  }
179  }
180  else //New backend options API
181  {
182  const TuningLevel defaultTuningLevel = TuningLevel::None;
183  auto tuningLevel = defaultTuningLevel;
184 
185  ParseOptions(options.m_BackendOptions, "GpuAcc", [&](std::string name, const BackendOptions::Var& value)
186  {
187  if (name == "KernelProfilingEnabled")
188  {
189  kernelProfiling |= ParseBoolean(value, false);
190  } else if (name == "TuningFile")
191  {
192  m_TuningFile = ParseFile(value, "");
193  } else if (name == "TuningLevel")
194  {
195  tuningLevel = ParseTuningLevel(value, defaultTuningLevel);
196  }
197  });
198 
199  // Create the tuner, in tuning mode initially.
200  m_Tuner = std::make_unique<arm_compute::CLTuner>(true);
201 
202  ConfigureTuner(*(m_Tuner.get()), tuningLevel);
203 
204  if (!m_TuningFile.empty() && tuningLevel == TuningLevel::None)
205  {
206  try
207  {
208  m_Tuner->load_from_file(m_TuningFile.c_str());
209  }
210  catch (const std::exception& e)
211  {
212  ARMNN_LOG(warning) << "Could not load GpuAcc tuner data file.";
213  }
214  }
215  tuner = m_Tuner.get();
216  }
217 
218  m_ClContextControlWrapper = std::make_unique<ClContextControlWrapper>(
219  tuner,
220  kernelProfiling
221  );
222 }
void ParseOptions(const std::vector< BackendOptions > &options, BackendId backend, F f)
#define ARMNN_LOG(severity)
Definition: Logging.hpp:163
void ConfigureTuner(arm_compute::CLTuner &tuner, TuningLevel level)
#define ARMNN_ASSERT_MSG(COND, MSG)
Definition: Assert.hpp:15
std::string ParseFile(const BackendOptions::Var &value, std::string defaultValue)
TuningLevel ParseTuningLevel(const BackendOptions::Var &value, TuningLevel defaultValue)
IBackendContext(const IRuntime::CreationOptions &)

◆ ~ClBackendContext()

~ClBackendContext ( )
override

Definition at line 260 of file ClBackendContext.cpp.

References ARMNN_LOG, and armnn::warning.

261 {
262  if (m_Tuner && !m_TuningFile.empty())
263  {
264  try
265  {
266  m_Tuner->save_to_file(m_TuningFile.c_str());
267  }
268  catch(const std::exception& e)
269  {
270  ARMNN_LOG(warning) << "Could not save GpuAcc tuner data to file " << m_TuningFile;
271  }
272  }
273 }
#define ARMNN_LOG(severity)
Definition: Logging.hpp:163

Member Function Documentation

◆ AfterLoadNetwork()

bool AfterLoadNetwork ( NetworkId  networkId)
overridevirtual

Implements IBackendContext.

Definition at line 229 of file ClBackendContext.cpp.

230 {
231  {
232  std::lock_guard<std::mutex> lockGuard(m_Mutex);
233  m_NetworkIds.insert(networkId);
234  }
235  return true;
236 }

◆ AfterUnloadNetwork()

bool AfterUnloadNetwork ( NetworkId  networkId)
overridevirtual

Implements IBackendContext.

Definition at line 243 of file ClBackendContext.cpp.

244 {
245  bool clearCache = false;
246  {
247  std::lock_guard<std::mutex> lockGuard(m_Mutex);
248  m_NetworkIds.erase(networkId);
249  clearCache = m_NetworkIds.empty();
250  }
251 
252  if (clearCache)
253  {
254  m_ClContextControlWrapper->ClearClCache();
255  }
256 
257  return true;
258 }

◆ BeforeLoadNetwork()

bool BeforeLoadNetwork ( NetworkId  networkId)
overridevirtual

Before and after Load network events.

Implements IBackendContext.

Definition at line 224 of file ClBackendContext.cpp.

225 {
226  return true;
227 }

◆ BeforeUnloadNetwork()

bool BeforeUnloadNetwork ( NetworkId  networkId)
overridevirtual

Before and after Unload network events.

Implements IBackendContext.

Definition at line 238 of file ClBackendContext.cpp.

239 {
240  return m_ClContextControlWrapper->Sync();
241 }

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