ArmNN
 21.08
NetworkExecutionUtils.cpp File Reference

Go to the source code of this file.

Typedefs

using TContainer = mapbox::util::variant< std::vector< float >, std::vector< int >, std::vector< unsigned char >, std::vector< int8_t > >
 
using QuantizationParams = std::pair< float, int32_t >
 

Functions

template<armnn::DataType NonQuantizedType>
auto ParseDataArray (std::istream &stream)
 
template<armnn::DataType QuantizedType>
auto ParseDataArray (std::istream &stream, const float &quantizationScale, const int32_t &quantizationOffset)
 
template<>
auto ParseDataArray< armnn::DataType::Float32 > (std::istream &stream)
 
template<>
auto ParseDataArray< armnn::DataType::Signed32 > (std::istream &stream)
 
template<>
auto ParseDataArray< armnn::DataType::QAsymmS8 > (std::istream &stream)
 
template<>
auto ParseDataArray< armnn::DataType::QAsymmU8 > (std::istream &stream)
 
template<>
auto ParseDataArray< armnn::DataType::QSymmS8 > (std::istream &stream)
 
template<>
auto ParseDataArray< armnn::DataType::QAsymmS8 > (std::istream &stream, const float &quantizationScale, const int32_t &quantizationOffset)
 
template<>
auto ParseDataArray< armnn::DataType::QAsymmU8 > (std::istream &stream, const float &quantizationScale, const int32_t &quantizationOffset)
 
template<armnn::DataType ArmnnType, typename T = armnn::ResolveType<ArmnnType>>
std::vector< T > GenerateDummyTensorData (unsigned int numElements)
 
std::vector< unsigned int > ParseArray (std::istream &stream)
 
std::vector< std::string > ParseStringList (const std::string &inputString, const char *delimiter)
 Splits a given string at every accurance of delimiter into a vector of string. More...
 
void PopulateTensorWithData (TContainer &tensorData, unsigned int numElements, const std::string &dataTypeStr, const armnn::Optional< QuantizationParams > &qParams, const armnn::Optional< std::string > &dataFile)
 
bool ValidatePath (const std::string &file, const bool expectFile)
 Verifies if the given string is a valid path. More...
 
bool ValidatePaths (const std::vector< std::string > &fileVec, const bool expectFile)
 Verifies if a given vector of strings are valid paths. More...
 

Typedef Documentation

◆ QuantizationParams

using QuantizationParams = std::pair<float, int32_t>

Definition at line 208 of file NetworkExecutionUtils.cpp.

◆ TContainer

using TContainer = mapbox::util::variant<std::vector<float>, std::vector<int>, std::vector<unsigned char>, std::vector<int8_t> >

Definition at line 207 of file NetworkExecutionUtils.cpp.

Function Documentation

◆ GenerateDummyTensorData()

std::vector<T> GenerateDummyTensorData ( unsigned int  numElements)

Definition at line 95 of file NetworkExecutionUtils.cpp.

96 {
97  return std::vector<T>(numElements, static_cast<T>(0));
98 }

◆ ParseArray()

std::vector<unsigned int> ParseArray ( std::istream &  stream)

Definition at line 101 of file NetworkExecutionUtils.cpp.

References armnn::numeric_cast().

Referenced by ProgramOptions::ParseOptions().

102 {
103  return ParseArrayImpl<unsigned int>(
104  stream,
105  [](const std::string& s) { return armnn::numeric_cast<unsigned int>(std::stoi(s)); });
106 }
std::enable_if_t< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > numeric_cast(Source source)
Definition: NumericCast.hpp:35

◆ ParseDataArray() [1/2]

auto ParseDataArray ( std::istream &  stream)

◆ ParseDataArray() [2/2]

auto ParseDataArray ( std::istream &  stream,
const float &  quantizationScale,
const int32_t &  quantizationOffset 
)

◆ ParseDataArray< armnn::DataType::Float32 >()

auto ParseDataArray< armnn::DataType::Float32 > ( std::istream &  stream)

Definition at line 31 of file NetworkExecutionUtils.cpp.

32 {
33  return ParseArrayImpl<float>(stream, [](const std::string& s) { return std::stof(s); });
34 }

◆ ParseDataArray< armnn::DataType::QAsymmS8 >() [1/2]

auto ParseDataArray< armnn::DataType::QAsymmS8 > ( std::istream &  stream)

Definition at line 43 of file NetworkExecutionUtils.cpp.

References armnn::numeric_cast().

44 {
45  return ParseArrayImpl<int8_t>(stream,
46  [](const std::string& s) { return armnn::numeric_cast<int8_t>(std::stoi(s)); });
47 }
std::enable_if_t< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > numeric_cast(Source source)
Definition: NumericCast.hpp:35

◆ ParseDataArray< armnn::DataType::QAsymmS8 >() [2/2]

auto ParseDataArray< armnn::DataType::QAsymmS8 > ( std::istream &  stream,
const float &  quantizationScale,
const int32_t &  quantizationOffset 
)

Definition at line 65 of file NetworkExecutionUtils.cpp.

References armnn::numeric_cast().

68 {
69  return ParseArrayImpl<int8_t>(stream,
70  [&quantizationScale, &quantizationOffset](const std::string& s)
71  {
72  return armnn::numeric_cast<int8_t>(
73  armnn::Quantize<int8_t>(std::stof(s),
74  quantizationScale,
75  quantizationOffset));
76  });
77 }
std::enable_if_t< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > numeric_cast(Source source)
Definition: NumericCast.hpp:35

◆ ParseDataArray< armnn::DataType::QAsymmU8 >() [1/2]

auto ParseDataArray< armnn::DataType::QAsymmU8 > ( std::istream &  stream)

Definition at line 50 of file NetworkExecutionUtils.cpp.

References armnn::numeric_cast().

51 {
52  return ParseArrayImpl<uint8_t>(stream,
53  [](const std::string& s) { return armnn::numeric_cast<uint8_t>(std::stoi(s)); });
54 }
std::enable_if_t< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > numeric_cast(Source source)
Definition: NumericCast.hpp:35

◆ ParseDataArray< armnn::DataType::QAsymmU8 >() [2/2]

auto ParseDataArray< armnn::DataType::QAsymmU8 > ( std::istream &  stream,
const float &  quantizationScale,
const int32_t &  quantizationOffset 
)

Definition at line 80 of file NetworkExecutionUtils.cpp.

References armnn::numeric_cast().

83 {
84  return ParseArrayImpl<uint8_t>(stream,
85  [&quantizationScale, &quantizationOffset](const std::string& s)
86  {
87  return armnn::numeric_cast<uint8_t>(
88  armnn::Quantize<uint8_t>(std::stof(s),
89  quantizationScale,
90  quantizationOffset));
91  });
92 }
std::enable_if_t< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > numeric_cast(Source source)
Definition: NumericCast.hpp:35

◆ ParseDataArray< armnn::DataType::QSymmS8 >()

auto ParseDataArray< armnn::DataType::QSymmS8 > ( std::istream &  stream)

Definition at line 58 of file NetworkExecutionUtils.cpp.

References armnn::numeric_cast().

59 {
60  return ParseArrayImpl<int8_t>(stream,
61  [](const std::string& s) { return armnn::numeric_cast<int8_t>(std::stoi(s)); });
62 }
std::enable_if_t< std::is_unsigned< Source >::value &&std::is_unsigned< Dest >::value, Dest > numeric_cast(Source source)
Definition: NumericCast.hpp:35

◆ ParseDataArray< armnn::DataType::Signed32 >()

auto ParseDataArray< armnn::DataType::Signed32 > ( std::istream &  stream)

Definition at line 37 of file NetworkExecutionUtils.cpp.

38 {
39  return ParseArrayImpl<int>(stream, [](const std::string& s) { return std::stoi(s); });
40 }

◆ ParseStringList()

std::vector<std::string> ParseStringList ( const std::string &  inputString,
const char *  delimiter 
)

Splits a given string at every accurance of delimiter into a vector of string.

Definition at line 108 of file NetworkExecutionUtils.cpp.

References armnn::stringUtils::StringTrimCopy().

Referenced by GetBackendIDs(), and ProgramOptions::ParseOptions().

109 {
110  std::stringstream stream(inputString);
111  return ParseArrayImpl<std::string>(stream, [](const std::string& s) {
112  return armnn::stringUtils::StringTrimCopy(s); }, delimiter);
113 }
std::string StringTrimCopy(const std::string &str, const std::string &chars="\\\")
Trim from both the start and the end of a string, returns a trimmed copy of the string.
Definition: StringUtils.hpp:85

◆ PopulateTensorWithData()

void PopulateTensorWithData ( TContainer tensorData,
unsigned int  numElements,
const std::string &  dataTypeStr,
const armnn::Optional< QuantizationParams > &  qParams,
const armnn::Optional< std::string > &  dataFile 
)

Definition at line 210 of file NetworkExecutionUtils.cpp.

References ARMNN_LOG, OptionalBase::has_value(), OptionalReferenceSwitch< std::is_reference< T >::value, T >::value(), and OptionalReferenceSwitch< IsReference, T >::value().

Referenced by MainImpl().

215 {
216  const bool readFromFile = dataFile.has_value() && !dataFile.value().empty();
217  const bool quantizeData = qParams.has_value();
218 
219  std::ifstream inputTensorFile;
220  if (readFromFile)
221  {
222  inputTensorFile = std::ifstream(dataFile.value());
223  }
224 
225  if (dataTypeStr.compare("float") == 0)
226  {
227  if (quantizeData)
228  {
229  const float qScale = qParams.value().first;
230  const int qOffset = qParams.value().second;
231 
232  tensorData = readFromFile ?
233  ParseDataArray<armnn::DataType::QAsymmU8>(inputTensorFile, qScale, qOffset) :
234  GenerateDummyTensorData<armnn::DataType::QAsymmU8>(numElements);
235  }
236  else
237  {
238  tensorData = readFromFile ?
239  ParseDataArray<armnn::DataType::Float32>(inputTensorFile) :
240  GenerateDummyTensorData<armnn::DataType::Float32>(numElements);
241  }
242  }
243  else if (dataTypeStr.compare("int") == 0)
244  {
245  tensorData = readFromFile ?
246  ParseDataArray<armnn::DataType::Signed32>(inputTensorFile) :
247  GenerateDummyTensorData<armnn::DataType::Signed32>(numElements);
248  }
249  else if (dataTypeStr.compare("qsymms8") == 0)
250  {
251  tensorData = readFromFile ?
252  ParseDataArray<armnn::DataType::QSymmS8>(inputTensorFile) :
253  GenerateDummyTensorData<armnn::DataType::QSymmS8>(numElements);
254  }
255  else if (dataTypeStr.compare("qasymm8") == 0 || dataTypeStr.compare("qasymmu8") == 0)
256  {
257  tensorData = readFromFile ?
258  ParseDataArray<armnn::DataType::QAsymmU8>(inputTensorFile) :
259  GenerateDummyTensorData<armnn::DataType::QAsymmU8>(numElements);
260  }
261  else if (dataTypeStr.compare("qasymms8") == 0)
262  {
263  tensorData = readFromFile ?
264  ParseDataArray<armnn::DataType::QAsymmS8>(inputTensorFile) :
265  GenerateDummyTensorData<armnn::DataType::QAsymmS8>(numElements);
266  }
267  else
268  {
269  std::string errorMessage = "Unsupported tensor data type " + dataTypeStr;
270  ARMNN_LOG(fatal) << errorMessage;
271 
272  inputTensorFile.close();
273  throw armnn::Exception(errorMessage);
274  }
275 
276  inputTensorFile.close();
277 }
#define ARMNN_LOG(severity)
Definition: Logging.hpp:202
bool has_value() const noexcept
Definition: Optional.hpp:53
Base class for all ArmNN exceptions so that users can filter to just those.
Definition: Exceptions.hpp:46

◆ ValidatePath()

bool ValidatePath ( const std::string &  file,
const bool  expectFile 
)

Verifies if the given string is a valid path.

Reports invalid paths to std::err.

Parameters
filestring - A string containing the path to check
expectFilebool - If true, checks for a regular file.
Returns
bool - True if given string is a valid path., false otherwise.

Definition at line 279 of file NetworkExecutionUtils.cpp.

Referenced by CheckClTuningParameter(), and ValidatePaths().

280 {
281  if (!fs::exists(file))
282  {
283  std::cerr << "Given file path '" << file << "' does not exist" << std::endl;
284  return false;
285  }
286  if (!fs::is_regular_file(file) && expectFile)
287  {
288  std::cerr << "Given file path '" << file << "' is not a regular file" << std::endl;
289  return false;
290  }
291  return true;
292 }

◆ ValidatePaths()

bool ValidatePaths ( const std::vector< std::string > &  fileVec,
const bool  expectFile 
)

Verifies if a given vector of strings are valid paths.

Reports invalid paths to std::err.

Parameters
fileVecvector of string - A vector of string containing the paths to check
expectFilebool - If true, checks for a regular file.
Returns
bool - True if all given strings are valid paths., false otherwise.

Definition at line 294 of file NetworkExecutionUtils.cpp.

References ValidatePath().

Referenced by ExecuteNetworkParams::ValidateParams().

295 {
296  bool allPathsValid = true;
297  for (auto const& file : fileVec)
298  {
299  if(!ValidatePath(file, expectFile))
300  {
301  allPathsValid = false;
302  }
303  }
304  return allPathsValid;
305 }
bool ValidatePath(const std::string &file, const bool expectFile)
Verifies if the given string is a valid path.