In the TensorRT Sample "TensorRT-7.0.0.11/samples/trtexec/trtexec.cpp"
1 Save Engine to file
bool saveEngine(const ICudaEngine& engine, const std::string& fileName, std::ostream& err)
{
std::ofstream engineFile(fileName, std::ios::binary);
if (!engineFile)
{
err << "Cannot open engine file: " << fileName << std::endl;
return false;
}
TrtUniquePtr<IHostMemory> serializedEngine{engine.serialize()};
if (serializedEngine == nullptr)
{
err << "Engine serialization failed" << std::endl;
return false;
}
engineFile.write(static_cast<char*>(serializedEngine->data()), serializedEngine->size());
return !engineFile.fail();
}
2 Load Engine from file
TrtUniquePtr<nvinfer1::ICudaEngine> getEngine(const ModelOptions& model, const BuildOptions& build, const SystemOptions& sys, std::ostream& err)
{
TrtUniquePtr<nvinfer1::ICudaEngine> engine;
if (build.load)
{
engine.reset(loadEngine(build.engine, sys.DLACore, err));//.trt file
}
else
{
engine.reset(modelToEngine(model, build, sys, err));//other file such as .onnx
}
if (!engine)
{
err << "Engine creation failed" << std::endl;
return nullptr;
}
if (build.save && !saveEngine(*engine, build.engine, err))
{
err << "Saving engine to file failed" << std::endl;
return nullptr;
}
return engine;
}
2.1 Load Engine from .trt file
ICudaEng