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