28 #ifndef NVNEURAL_COREHELPERS_H 
   29 #define NVNEURAL_COREHELPERS_H 
   35 #include <type_traits> 
   84 NeuralResult TensorDimensionFromString(TensorDimension& outDim, 
const std::string& dimStr, TensorDimensionParseOrder parseOrder, 
size_t fillValue) noexcept;
 
   92 std::string TensorDimensionToString(
const TensorDimension& dim) noexcept;
 
  101     const auto alignComponent = [](
size_t x, 
size_t y) -> 
size_t { 
return ((x + y - 1) / y) * y; };
 
  104         alignComponent(dim.n, stepping.n),
 
  105         alignComponent(dim.c, stepping.c),
 
  106         alignComponent(dim.h, stepping.h),
 
  107         alignComponent(dim.w, stepping.w),
 
  122 template<
typename TDiv
idend, 
typename TDivisor>
 
  125     return ((dividend + divisor - TDivisor{1}) / divisor);
 
  138         case TensorDataType::Float:   
return sizeof(float);
 
  139         case TensorDataType::Half:    
return sizeof(
Float16);
 
  155 inline std::vector<std::string> 
split(std::string strToSplit, 
char delimiter, 
bool skip_empty = 
false)
 
  157     std::vector<std::string> splitStrings;
 
  159     for(
size_t i = 0; i < strToSplit.size(); i++)
 
  161         if(strToSplit[i] == delimiter)
 
  163             if(!skip_empty || (i - j))
 
  165                 splitStrings.push_back(strToSplit.substr(j, i - j));
 
  170         if(i == strToSplit.size() - 1)
 
  172             if(!skip_empty || (strToSplit.size() - j))
 
  174                 splitStrings.push_back(strToSplit.substr(j, strToSplit.size() - j));
 
  193 inline std::vector<std::string> 
splitEscape(std::string strToSplit, 
char delimiter, 
bool skip_empty = 
false)
 
  195     std::vector<std::string> splitStrings;
 
  197     std::string buildString;
 
  198     bool lastCharEscape = 
false;
 
  199     for (
size_t newSplitNdx = 0; newSplitNdx < strToSplit.size(); newSplitNdx++)
 
  201         if ((strToSplit[newSplitNdx] == 
'\\') && (!lastCharEscape))
 
  203             lastCharEscape = 
true; 
 
  207             if ((strToSplit[newSplitNdx] == delimiter) && (!lastCharEscape))
 
  209                 if (!skip_empty || !buildString.empty())
 
  211                     splitStrings.push_back(buildString);
 
  219                     buildString += strToSplit[newSplitNdx];
 
  221                 catch (
const std::exception& ex)
 
  226                 lastCharEscape = 
false;
 
  231     if (!skip_empty || !buildString.empty())
 
  233         splitStrings.push_back(buildString);
 
  254     for (
size_t index = 0; index < pInputList->layerCount(); ++index)
 
  256         const auto pInput = pInputList->getLayerByIndex(index);
 
  257         if (pInput == pInputLayer)
 
  260             return NeuralResult::Success;
 
  264     return NeuralResult::Failure;
 
  274 template<> 
struct hash<nvneural::NetworkBackendId>
 
  281         return std::hash<uint32_t>()(
static_cast<std::uint32_t
>(backendId));
 
std::vector< std::string > split(std::string strToSplit, char delimiter, bool skip_empty=false)
Splits a string by a delimiter, returns a vector of the split strings.
Definition: CoreHelpers.h:155
 
std::vector< std::string > splitEscape(std::string strToSplit, char delimiter, bool skip_empty=false)
Splits a string by a delimiter, returns a vector of the split strings.
Definition: CoreHelpers.h:193
 
void SetDefaultLogger(ILogger *pDefaultLogger)
Sets a default logger for the module.
Definition: Logging.cpp:43
 
constexpr auto DivideRoundingUp(TDividend dividend, TDivisor divisor) noexcept
Division operation, rounding up.
Definition: CoreHelpers.h:123
 
ILogger * DefaultLogger()
Returns a pointer to the default logger for this module.
Definition: Logging.cpp:38
 
constexpr std::size_t dataSize(TensorDataType dataType) noexcept
Returns the size of an individual tensor element of a particular type, similar to sizeof.
Definition: CoreHelpers.h:134
 
TensorDimension align(const TensorDimension &dim, const TensorDimension &stepping) noexcept
Rounds a TensorDimension object up to be a multiple of a provided set of strides.
Definition: CoreHelpers.h:99
 
TensorDimensionParseOrder
Order to read TensorDimension components in for TensorDimensionFromString.
Definition: CoreHelpers.h:54
 
@ Tensor
This order is used for parameters that typically describe tensor dimensions.
 
NeuralResult getInputLayerIndex(ILayer *pLayer, ILayer *pInputLayer, size_t *pIndex)
Retrieves the layer index in the input list.
Definition: CoreHelpers.h:246
 
Fundamental NvNeural data types are declared here.
 
constexpr bool failed(NeuralResult result) noexcept
Helper function akin to COM's FAILED() macro.
Definition: CoreTypes.h:289
 
TensorDataType
Enumeration describing common tensor element types.
Definition: CoreTypes.h:60
 
NetworkBackendId
Enumeration describing common network backends.
Definition: CoreTypes.h:239
 
NeuralResult
NeuralResult is a generic success/failure result type similar to COM HRESULT.
Definition: CoreTypes.h:275
 
Interface types needed by layer objects.
 
Standard implementation for IRefObject-derived objects.
 
Smart pointer class for tracking IRefObject instances.
 
Float16 is a CPU-side implementation of half-precision floating point (aka FP16).
Definition: CoreTypes.h:201
 
ILayer is the base class for neural network layers.
Definition: LayerTypes.h:59
 
virtual NeuralResult getInputLayers(ILayerList **ppInputLayers) const noexcept=0
Retrieves the inputs for this layer.
 
virtual NeuralResult logWarning(VerbosityLevel verbosity, const char *format,...) noexcept=0
Logs a warning message.
 
Standard implementation for IFileImage.
Definition: CpuImage.h:113
 
Intrusive pointer using IRefObject's reference counting system.
Definition: RefPtr.h:46
 
OutputWrapper put() &noexcept
Returns an expression proxy that acts like a TObject** for receiving new pointers.
Definition: RefPtr.h:337
 
TensorDimension describes the dimensions of a four-dimensional image tensor.
Definition: CoreTypes.h:136