\brief Create a BufferManager for handling buffer interactions with engine.
| 243 | //! \brief Create a BufferManager for handling buffer interactions with engine. |
| 244 | //! |
| 245 | BufferManager(std::shared_ptr<nvinfer1::ICudaEngine> engine, const int batchSize = 0, |
| 246 | const nvinfer1::IExecutionContext* context = nullptr) |
| 247 | : mEngine(engine) |
| 248 | , mBatchSize(batchSize) |
| 249 | { |
| 250 | // Full Dims implies no batch size. |
| 251 | assert(engine->hasImplicitBatchDimension() || mBatchSize == 0); |
| 252 | // Create host and device buffers |
| 253 | for (int i = 0; i < mEngine->getNbBindings(); i++) |
| 254 | { |
| 255 | auto dims = context ? context->getBindingDimensions(i) : mEngine->getBindingDimensions(i); |
| 256 | size_t vol = context || !mBatchSize ? 1 : static_cast<size_t>(mBatchSize); |
| 257 | nvinfer1::DataType type = mEngine->getBindingDataType(i); |
| 258 | int vecDim = mEngine->getBindingVectorizedDim(i); |
| 259 | if (-1 != vecDim) // i.e., 0 != lgScalarsPerVector |
| 260 | { |
| 261 | int scalarsPerVec = mEngine->getBindingComponentsPerElement(i); |
| 262 | dims.d[vecDim] = divUp(dims.d[vecDim], scalarsPerVec); |
| 263 | vol *= scalarsPerVec; |
| 264 | } |
| 265 | vol *= samplesCommon::volume(dims); |
| 266 | std::unique_ptr<ManagedBuffer> manBuf{new ManagedBuffer()}; |
| 267 | manBuf->deviceBuffer = DeviceBuffer(vol, type); |
| 268 | manBuf->hostBuffer = HostBuffer(vol, type); |
| 269 | mDeviceBindings.emplace_back(manBuf->deviceBuffer.data()); |
| 270 | mManagedBuffers.emplace_back(std::move(manBuf)); |
| 271 | } |
| 272 | } |
| 273 | |
| 274 | //! |
| 275 | //! \brief Returns a vector of device buffers that you can use directly as |
nothing calls this directly
no test coverage detected