MCPcopy Create free account
hub / github.com/NVIDIA/TensorRT / setDynamicRange

Method setDynamicRange

samples/sampleINT8API/sampleINT8API.cpp:307–411  ·  view source on GitHub ↗

\brief Sets custom dynamic range for network tensors

Source from the content-addressed store, hash-verified

305//! \brief Sets custom dynamic range for network tensors
306//!
307bool SampleINT8API::setDynamicRange(SampleUniquePtr<nvinfer1::INetworkDefinition>& network)
308{
309 // populate per-tensor dynamic range
310 if (!readPerTensorDynamicRangeValues())
311 {
312 return false;
313 }
314
315 sample::gLogInfo << "Setting Per Tensor Dynamic Range" << std::endl;
316 if (mParams.verbose)
317 {
318 sample::gLogInfo << "If dynamic range for a tensor is missing, TensorRT will run inference assuming dynamic range for "
319 "the tensor as optional."
320 << std::endl;
321 sample::gLogInfo << "If dynamic range for a tensor is required then inference will fail. Follow README.md to generate "
322 "missing per-tensor dynamic range."
323 << std::endl;
324 }
325 // set dynamic range for network input tensors
326 for (int i = 0; i < network->getNbInputs(); ++i)
327 {
328 std::string tName = network->getInput(i)->getName();
329 if (mPerTensorDynamicRangeMap.find(tName) != mPerTensorDynamicRangeMap.end())
330 {
331 if (!network->getInput(i)->setDynamicRange(
332 -mPerTensorDynamicRangeMap.at(tName), mPerTensorDynamicRangeMap.at(tName)))
333 {
334 return false;
335 }
336 }
337 else
338 {
339 if (mParams.verbose)
340 {
341 sample::gLogWarning << "Missing dynamic range for tensor: " << tName << std::endl;
342 }
343 }
344 }
345
346 // set dynamic range for layer output tensors
347 for (int i = 0; i < network->getNbLayers(); ++i)
348 {
349 auto lyr = network->getLayer(i);
350 for (int j = 0, e = lyr->getNbOutputs(); j < e; ++j)
351 {
352 std::string tName = lyr->getOutput(j)->getName();
353 if (mPerTensorDynamicRangeMap.find(tName) != mPerTensorDynamicRangeMap.end())
354 {
355 // Calibrator generated dynamic range for network tensor can be overriden or set using below API
356 if (!lyr->getOutput(j)->setDynamicRange(
357 -mPerTensorDynamicRangeMap.at(tName), mPerTensorDynamicRangeMap.at(tName)))
358 {
359 return false;
360 }
361 }
362 else if (lyr->getType() == LayerType::kCONSTANT)
363 {
364 IConstantLayer* cLyr = static_cast<IConstantLayer*>(lyr);

Callers 3

setTensorDynamicRangeFunction · 0.45
setAllDynamicRangesFunction · 0.45

Calls 13

minFunction · 0.85
maxFunction · 0.85
getLayerMethod · 0.80
absFunction · 0.50
getNbInputsMethod · 0.45
getNameMethod · 0.45
getInputMethod · 0.45
findMethod · 0.45
getNbLayersMethod · 0.45
getNbOutputsMethod · 0.45
getOutputMethod · 0.45
getTypeMethod · 0.45

Tested by

no test coverage detected