Add default C++ initialization to OrtCUDAProviderOptions (#9064)

* Add default C++ initialization to OrtCUDAProviderOptions
This commit is contained in:
Ryan Hill 2021-09-16 15:03:58 -07:00 committed by GitHub
parent 12515552d1
commit 26509465f0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 32 additions and 76 deletions

View file

@ -336,6 +336,10 @@ typedef enum OrtCudnnConvAlgoSearch {
* \see OrtApi::SessionOptionsAppendExecutionProvider_CUDA
*/
typedef struct OrtCUDAProviderOptions {
#ifdef __cplusplus
OrtCUDAProviderOptions() : device_id{}, cudnn_conv_algo_search{EXHAUSTIVE}, gpu_mem_limit{SIZE_MAX}, arena_extend_strategy{}, do_copy_in_default_stream{}, has_user_compute_stream{}, user_compute_stream{}, default_memory_arena_cfg{} {}
#endif
int device_id; ///< CUDA device id (0 = default device)
OrtCudnnConvAlgoSearch cudnn_conv_algo_search;

View file

@ -310,16 +310,10 @@ int real_main(int argc, char* argv[], Ort::Env& env) {
if (enable_tensorrt) {
#ifdef USE_TENSORRT
OrtCUDAProviderOptions cuda_options{
device_id,
OrtCudnnConvAlgoSearch::EXHAUSTIVE,
std::numeric_limits<size_t>::max(),
0,
true,
0,
nullptr,
nullptr}; // TODO: Support arena configuration for users of test runner
OrtCUDAProviderOptions cuda_options;
cuda_options.device_id=device_id;
cuda_options.do_copy_in_default_stream=true;
// TODO: Support arena configuration for users of test runner
Ort::ThrowOnError(OrtSessionOptionsAppendExecutionProvider_Tensorrt(sf, device_id));
sf.AppendExecutionProvider_CUDA(cuda_options);
#else
@ -339,15 +333,9 @@ int real_main(int argc, char* argv[], Ort::Env& env) {
}
if (enable_cuda) {
#ifdef USE_CUDA
OrtCUDAProviderOptions cuda_options{
0,
OrtCudnnConvAlgoSearch::EXHAUSTIVE,
std::numeric_limits<size_t>::max(),
0,
true,
0,
nullptr,
nullptr}; // TODO: Support arena configuration for users of test runner
OrtCUDAProviderOptions cuda_options;
cuda_options.do_copy_in_default_stream=true;
// TODO: Support arena configuration for users of test runner
sf.AppendExecutionProvider_CUDA(cuda_options);
#else
fprintf(stderr, "CUDA is not supported in this build");

View file

@ -42,15 +42,10 @@ OnnxRuntimeTestSession::OnnxRuntimeTestSession(Ort::Env& env, std::random_device
#endif
} else if (provider_name == onnxruntime::kCudaExecutionProvider) {
#ifdef USE_CUDA
OrtCUDAProviderOptions cuda_options{
0,
static_cast<OrtCudnnConvAlgoSearch>(performance_test_config.run_config.cudnn_conv_algo),
std::numeric_limits<size_t>::max(),
0,
!performance_test_config.run_config.do_cuda_copy_in_separate_stream,
0,
nullptr,
nullptr}; // TODO: Support arena configuration for users of perf test
OrtCUDAProviderOptions cuda_options;
cuda_options.cudnn_conv_algo_search = static_cast<OrtCudnnConvAlgoSearch>(performance_test_config.run_config.cudnn_conv_algo);
cuda_options.do_copy_in_default_stream = !performance_test_config.run_config.do_cuda_copy_in_separate_stream;
// TODO: Support arena configuration for users of perf test
session_options.AppendExecutionProvider_CUDA(cuda_options);
#else
ORT_THROW("CUDA is not supported in this build\n");
@ -235,15 +230,11 @@ OnnxRuntimeTestSession::OnnxRuntimeTestSession(Ort::Env& env, std::random_device
tensorrt_options.trt_force_sequential_engine_build = trt_force_sequential_engine_build;
session_options.AppendExecutionProvider_TensorRT(tensorrt_options);
OrtCUDAProviderOptions cuda_options{
device_id,
static_cast<OrtCudnnConvAlgoSearch>(performance_test_config.run_config.cudnn_conv_algo),
std::numeric_limits<size_t>::max(),
0,
!performance_test_config.run_config.do_cuda_copy_in_separate_stream,
0,
nullptr,
nullptr}; // TODO: Support arena configuration for users of perf test
OrtCUDAProviderOptions cuda_options;
cuda_options.device_id=device_id;
cuda_options.cudnn_conv_algo_search=static_cast<OrtCudnnConvAlgoSearch>(performance_test_config.run_config.cudnn_conv_algo);
cuda_options.do_copy_in_default_stream=!performance_test_config.run_config.do_cuda_copy_in_separate_stream;
// TODO: Support arena configuration for users of perf test
session_options.AppendExecutionProvider_CUDA(cuda_options);
#else
ORT_THROW("TensorRT is not supported in this build\n");

View file

@ -2,17 +2,11 @@
// Licensed under the MIT License.
#include "utils.h"
#include <limits>
OrtCUDAProviderOptions CreateDefaultOrtCudaProviderOptionsWithCustomStream(void* cuda_compute_stream) {
OrtCUDAProviderOptions cuda_options{
0,
OrtCudnnConvAlgoSearch::EXHAUSTIVE,
std::numeric_limits<size_t>::max(),
0,
true,
cuda_compute_stream != nullptr ? 1 : 0,
cuda_compute_stream != nullptr ? cuda_compute_stream : nullptr,
nullptr};
OrtCUDAProviderOptions cuda_options;
cuda_options.do_copy_in_default_stream = true;
cuda_options.has_user_compute_stream = cuda_compute_stream != nullptr ? 1 : 0;
cuda_options.user_compute_stream = cuda_compute_stream;
return cuda_options;
}

View file

@ -609,15 +609,9 @@ void setup_training_params(BertParameters& params) {
#ifdef USE_CUDA
{
OrtCUDAProviderOptions info{
gsl::narrow<OrtDevice::DeviceId>(MPIContext::GetInstance().GetLocalRank()),
OrtCudnnConvAlgoSearch::EXHAUSTIVE,
std::numeric_limits<size_t>::max(),
0,
true,
0,
nullptr,
nullptr};
OrtCUDAProviderOptions info;
info.device_id = gsl::narrow<OrtDevice::DeviceId>(MPIContext::GetInstance().GetLocalRank());
info.do_copy_in_default_stream = true;
if (params.gpu_mem_limit_in_gb > 0) {
info.gpu_mem_limit = gsl::narrow<size_t>(params.gpu_mem_limit_in_gb * 1024 * 1024 * 1024);

View file

@ -352,16 +352,9 @@ void setup_training_params(GPT2Parameters& params) {
#ifdef USE_CUDA
{
OrtCUDAProviderOptions info{
gsl::narrow<OrtDevice::DeviceId>(MPIContext::GetInstance().GetLocalRank()),
OrtCudnnConvAlgoSearch::EXHAUSTIVE,
std::numeric_limits<size_t>::max(),
0,
true,
0,
nullptr,
nullptr};
OrtCUDAProviderOptions info;
info.device_id=gsl::narrow<OrtDevice::DeviceId>(MPIContext::GetInstance().GetLocalRank());
info.do_copy_in_default_stream=true;
params.providers.emplace(kCudaExecutionProvider, CreateExecutionProviderFactory_Cuda(&info));
params.input_allocator = CreateCUDAPinnedAllocator(info.device_id, CUDA_PINNED);
}

View file

@ -169,16 +169,8 @@ Status ParseArguments(int argc, char* argv[], MnistParameters& params) {
#ifdef USE_CUDA
bool use_cuda = flags.count("use_cuda") > 0;
if (use_cuda) {
OrtCUDAProviderOptions info{
0,
OrtCudnnConvAlgoSearch::EXHAUSTIVE,
std::numeric_limits<size_t>::max(),
0,
true,
0,
nullptr,
nullptr};
OrtCUDAProviderOptions info;
info.do_copy_in_default_stream = true;
params.providers.emplace(kCudaExecutionProvider, CreateExecutionProviderFactory_Cuda(&info));
}
#endif