From aefb2cc49b56aa680509213ceaa8d252ebee6052 Mon Sep 17 00:00:00 2001 From: stevenlix <38092805+stevenlix@users.noreply.github.com> Date: Sun, 20 Sep 2020 05:55:21 -0700 Subject: [PATCH] Create profile for all dynamic shape input tensors (#5229) --- .../tensorrt/tensorrt_execution_provider.cc | 24 ++++++++----------- 1 file changed, 10 insertions(+), 14 deletions(-) diff --git a/onnxruntime/core/providers/tensorrt/tensorrt_execution_provider.cc b/onnxruntime/core/providers/tensorrt/tensorrt_execution_provider.cc index 225a17703a..1e9d8a9918 100644 --- a/onnxruntime/core/providers/tensorrt/tensorrt_execution_provider.cc +++ b/onnxruntime/core/providers/tensorrt/tensorrt_execution_provider.cc @@ -995,14 +995,12 @@ common::Status TensorrtExecutionProvider::Provider_Compile(const std::vectorcreateOptimizationProfile(); - } - trt_profile->setShapeValues(input_name.c_str(), nvinfer1::OptProfileSelector::kMIN, &shapes_min[0], shape_size); - trt_profile->setShapeValues(input_name.c_str(), nvinfer1::OptProfileSelector::kOPT, &shapes_opt[0], shape_size); - trt_profile->setShapeValues(input_name.c_str(), nvinfer1::OptProfileSelector::kMAX, &shapes_max[0], shape_size); + if (trt_profile == nullptr) { + trt_profile = trt_builder->createOptimizationProfile(); } + trt_profile->setShapeValues(input_name.c_str(), nvinfer1::OptProfileSelector::kMIN, &shapes_min[0], shape_size); + trt_profile->setShapeValues(input_name.c_str(), nvinfer1::OptProfileSelector::kOPT, &shapes_opt[0], shape_size); + trt_profile->setShapeValues(input_name.c_str(), nvinfer1::OptProfileSelector::kMAX, &shapes_max[0], shape_size); } else { // execution tensor nvinfer1::Dims dims_min(dims), dims_opt(dims), dims_max(dims); for (int j = 0, end = nb_dims; j < end; ++j) { @@ -1030,14 +1028,12 @@ common::Status TensorrtExecutionProvider::Provider_Compile(const std::vectorcreateOptimizationProfile(); - } - trt_profile->setDimensions(input_name.c_str(), nvinfer1::OptProfileSelector::kMIN, dims_min); - trt_profile->setDimensions(input_name.c_str(), nvinfer1::OptProfileSelector::kOPT, dims_opt); - trt_profile->setDimensions(input_name.c_str(), nvinfer1::OptProfileSelector::kMAX, dims_max); + if (trt_profile == nullptr) { + trt_profile = trt_builder->createOptimizationProfile(); } + trt_profile->setDimensions(input_name.c_str(), nvinfer1::OptProfileSelector::kMIN, dims_min); + trt_profile->setDimensions(input_name.c_str(), nvinfer1::OptProfileSelector::kOPT, dims_opt); + trt_profile->setDimensions(input_name.c_str(), nvinfer1::OptProfileSelector::kMAX, dims_max); } ort.ReleaseTensorTypeAndShapeInfo(tensor_info); }