ArmNN
 24.08
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. More...
 
bool AfterLoadNetwork (NetworkId networkId) override
 
bool BeforeUnloadNetwork (NetworkId networkId) override
 Before and after Unload network events. More...
 
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  {
89  return TuningLevel::Rapid;
91  return TuningLevel::Normal;
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  {
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 }

References ARMNN_LOG, armnn::ConfigureTuner(), armnn::Exhaustive, IGpuAccTunedParameters::Exhaustive, armnn::info, IRuntime::CreationOptions::m_BackendOptions, IRuntime::CreationOptions::m_EnableGpuProfiling, IRuntime::CreationOptions::m_GpuAccTunedParameters, ClBackendContext::m_MLGOTuner, ClBackendContext::m_MLGOTuningFile, armnn::None, armnn::Normal, IGpuAccTunedParameters::Normal, armnn::ParseOptions(), armnn::ParseStringBackendOption(), armnn::ParseTuningLevel(), armnn::Rapid, IGpuAccTunedParameters::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, and armnn::warning.

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 }

◆ 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 }

◆ 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 }

◆ 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 }

◆ 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 }

Member Data Documentation

◆ m_MLGOTuner

arm_compute::CLGEMMHeuristicsHandle m_MLGOTuner
protected

Definition at line 43 of file ClBackendContext.hpp.

Referenced by ClBackendContext::ClBackendContext().

◆ m_MLGOTuningFile

std::string m_MLGOTuningFile
protected

Definition at line 44 of file ClBackendContext.hpp.

Referenced by ClBackendContext::ClBackendContext().


The documentation for this class was generated from the following files:
armnn::TuningLevel::Exhaustive
@ Exhaustive
armnn::IGpuAccTunedParameters::Mode
Mode
Definition: IRuntime.hpp:317
armnn::IGpuAccTunedParameters::TuningLevel::Rapid
@ Rapid
armnn::TuningLevel::None
@ None
armnn::ParseStringBackendOption
std::string ParseStringBackendOption(const armnn::BackendOptions::Var &value, std::string defaultValue)
Definition: BackendOptions.hpp:321
armnn::IGpuAccTunedParameters::TuningLevel
TuningLevel
Definition: IRuntime.hpp:323
armnn::IGpuAccTunedParameters::TuningLevel::Exhaustive
@ Exhaustive
ARMNN_LOG
#define ARMNN_LOG(severity)
Definition: Logging.hpp:212
armnn::IGpuAccTunedParameters::Mode::UseTunedParameters
@ UseTunedParameters
armnn::ClBackendContext::m_MLGOTuningFile
std::string m_MLGOTuningFile
Definition: ClBackendContext.hpp:44
armnn::ParseTuningLevel
TuningLevel ParseTuningLevel(const BackendOptions::Var &value, TuningLevel defaultValue)
Definition: ArmComputeTuningUtils.hpp:26
armnn::ConfigureTuner
void ConfigureTuner(arm_compute::CLTuner &tuner, TuningLevel level)
Definition: ArmComputeTuningUtils.hpp:44
armnn::IGpuAccTunedParameters::TuningLevel::Normal
@ Normal
armnn::IBackendContext::IBackendContext
IBackendContext(const IRuntime::CreationOptions &)
Definition: IBackendContext.hpp:17
armnn::ParseOptions
void ParseOptions(const std::vector< BackendOptions > &options, BackendId backend, F f)
Definition: BackendOptions.hpp:297
armnn::ClBackendContext::m_MLGOTuner
arm_compute::CLGEMMHeuristicsHandle m_MLGOTuner
Definition: ClBackendContext.hpp:43
armnn::TuningLevel::Rapid
@ Rapid
armnn::TuningLevel::Normal
@ Normal
armnn::TuningLevel
TuningLevel
Definition: ArmComputeTuningUtils.hpp:18