mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-07-24 19:43:35 +00:00
Disable delayload for cuda dlls (#3147)
This change fixes #3129. When running onnxruntime as dll on Windows, CUDA does some internal cleanups when process exits. After this, any call to CUDA would cause crash. Delayload makes thread_local destructor to happen after CUDA cleanup, thus the crash.
This commit is contained in:
parent
2c446a7f2f
commit
ade4fa108f
2 changed files with 16 additions and 6 deletions
|
|
@ -724,12 +724,13 @@ if (onnxruntime_USE_CUDA)
|
|||
if (WIN32)
|
||||
link_directories(${onnxruntime_CUDNN_HOME}/lib/x64)
|
||||
|
||||
file(GLOB cuda_dll_paths "${onnxruntime_CUDA_HOME}/bin/cublas64_*" "${onnxruntime_CUDA_HOME}/bin/cudart64_*" "${onnxruntime_CUDA_HOME}/bin/curand64_*")
|
||||
set(onnxruntime_DELAYLOAD_FLAGS "${onnxruntime_DELAYLOAD_FLAGS} /DELAYLOAD:cudnn64_7.dll")
|
||||
foreach(cuda_dll_path ${cuda_dll_paths})
|
||||
get_filename_component(cuda_dll_file_name ${cuda_dll_path} NAME)
|
||||
set(onnxruntime_DELAYLOAD_FLAGS "${onnxruntime_DELAYLOAD_FLAGS} /DELAYLOAD:${cuda_dll_file_name}")
|
||||
endforeach(cuda_dll_path)
|
||||
# delayload causes crash on exit, so disable for now
|
||||
#file(GLOB cuda_dll_paths "${onnxruntime_CUDA_HOME}/bin/cublas64_*" "${onnxruntime_CUDA_HOME}/bin/cudart64_*" "${onnxruntime_CUDA_HOME}/bin/curand64_*")
|
||||
#set(onnxruntime_DELAYLOAD_FLAGS "${onnxruntime_DELAYLOAD_FLAGS} /DELAYLOAD:cudnn64_7.dll")
|
||||
#foreach(cuda_dll_path ${cuda_dll_paths})
|
||||
# get_filename_component(cuda_dll_file_name ${cuda_dll_path} NAME)
|
||||
# set(onnxruntime_DELAYLOAD_FLAGS "${onnxruntime_DELAYLOAD_FLAGS} /DELAYLOAD:${cuda_dll_file_name}")
|
||||
#endforeach(cuda_dll_path)
|
||||
|
||||
else()
|
||||
link_directories(${onnxruntime_CUDNN_HOME}/lib64)
|
||||
|
|
|
|||
|
|
@ -2,6 +2,9 @@
|
|||
// Licensed under the MIT License.
|
||||
|
||||
#include "core/session/onnxruntime_cxx_api.h"
|
||||
#ifdef USE_CUDA
|
||||
#include "core/providers/cuda/cuda_provider_factory.h"
|
||||
#endif
|
||||
#include <fstream>
|
||||
#include "test_fixture.h"
|
||||
#include "file_util.h"
|
||||
|
|
@ -25,6 +28,12 @@ TEST(CApiTest, model_from_array) {
|
|||
|
||||
Ort::SessionOptions so;
|
||||
Ort::Session session(*ort_env.get(), buffer.data(), buffer.size(), so);
|
||||
|
||||
#ifdef USE_CUDA
|
||||
// test with CUDA provider when using onnxruntime as dll
|
||||
Ort::ThrowOnError(OrtSessionOptionsAppendExecutionProvider_CUDA(so, 0));
|
||||
Ort::Session session_cuda(*ort_env.get(), buffer.data(), buffer.size(), so);
|
||||
#endif
|
||||
}
|
||||
} // namespace test
|
||||
} // namespace onnxruntime
|
||||
|
|
|
|||
Loading…
Reference in a new issue