Skip to content

Commit 3812b90

Browse files
committed
cuDNNが使うランタイムよりCUDAランタイムのバージョンが古くないかのチェックを入れた
1 parent c365977 commit 3812b90

File tree

3 files changed

+23
-6
lines changed

3 files changed

+23
-6
lines changed

common/waifu2x.cpp

+19-6
Original file line numberDiff line numberDiff line change
@@ -465,21 +465,34 @@ Waifu2x::eWaifu2xcuDNNError Waifu2x::can_use_cuDNN()
465465
typedef cudnnStatus_t(CUDNNWINAPI* cudnnCreateType)(cudnnHandle_t *);
466466
typedef cudnnStatus_t(CUDNNWINAPI* cudnnDestroyType)(cudnnHandle_t);
467467
typedef size_t(CUDNNWINAPI* cudnnGetVersionType)();
468+
typedef size_t(CUDNNWINAPI* cudnnGetCudartVersionType)();
468469

469470
cudnnCreateType cudnnCreateFunc = (cudnnCreateType)GetProcAddress(hModule, "cudnnCreate");
470471
cudnnDestroyType cudnnDestroyFunc = (cudnnDestroyType)GetProcAddress(hModule, "cudnnDestroy");
471472
cudnnGetVersionType cudnnGetVersionFunc = (cudnnGetVersionType)GetProcAddress(hModule, "cudnnGetVersion");
472-
if (cudnnCreateFunc != nullptr && cudnnDestroyFunc != nullptr && cudnnGetVersionFunc != nullptr)
473+
cudnnGetCudartVersionType cudnnGetCudartVersionFunc = (cudnnGetCudartVersionType)GetProcAddress(hModule, "cudnnGetCudartVersion");
474+
if (cudnnCreateFunc != nullptr && cudnnDestroyFunc != nullptr && cudnnGetVersionFunc != nullptr && cudnnGetCudartVersionFunc != nullptr)
473475
{
474476
if (cudnnGetVersionFunc() >= CUDNN_REQUIRE_VERION)
475477
{
476-
cudnnHandle_t h;
477-
if (cudnnCreateFunc(&h) == CUDNN_STATUS_SUCCESS)
478+
int runtimeVersion;
479+
if (cudaRuntimeGetVersion(&runtimeVersion) == cudaSuccess)
478480
{
479-
if (cudnnDestroyFunc(h) == CUDNN_STATUS_SUCCESS)
480-
cuDNNFlag = eWaifu2xcuDNNError_OK;
481+
if (cudnnGetCudartVersionFunc() >= runtimeVersion)
482+
{
483+
cudnnHandle_t h;
484+
if (cudnnCreateFunc(&h) == CUDNN_STATUS_SUCCESS)
485+
{
486+
if (cudnnDestroyFunc(h) == CUDNN_STATUS_SUCCESS)
487+
cuDNNFlag = eWaifu2xcuDNNError_OK;
488+
else
489+
cuDNNFlag = eWaifu2xcuDNNError_CannotCreate;
490+
}
491+
else
492+
cuDNNFlag = eWaifu2xcuDNNError_CannotCreate;
493+
}
481494
else
482-
cuDNNFlag = eWaifu2xcuDNNError_CannotCreate;
495+
cuDNNFlag = eWaifu2xcuDNNError_OldCudaVersion;
483496
}
484497
else
485498
cuDNNFlag = eWaifu2xcuDNNError_CannotCreate;

common/waifu2x.h

+1
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,7 @@ class Waifu2x
122122
eWaifu2xcuDNNError_NotFind,
123123
eWaifu2xcuDNNError_OldVersion,
124124
eWaifu2xcuDNNError_CannotCreate,
125+
eWaifu2xcuDNNError_OldCudaVersion,
125126
};
126127

127128
typedef std::function<bool()> waifu2xCancelFunc;

waifu2x-caffe-gui/MainDialog.cpp

+3
Original file line numberDiff line numberDiff line change
@@ -2737,6 +2737,9 @@ void DialogEvent::CheckCUDNN(HWND hWnd, WPARAM wParam, LPARAM lParam, LPVOID lpD
27372737
case Waifu2x::eWaifu2xcuDNNError_CannotCreate:
27382738
MessageBox(dh, langStringList.GetString(L"MessagecuDNNCannotCreateError").c_str(), langStringList.GetString(L"MessageTitleResult").c_str(), MB_OK | MB_ICONERROR);
27392739
break;
2740+
case Waifu2x::eWaifu2xcuDNNError_OldCudaVersion:
2741+
MessageBox(dh, langStringList.GetString(L"MessageCudaOldVersionError").c_str(), langStringList.GetString(L"MessageTitleResult").c_str(), MB_OK | MB_ICONERROR);
2742+
break;
27402743
default:
27412744
MessageBox(dh, langStringList.GetString(L"MessagecuDNNDefautlError").c_str(), langStringList.GetString(L"MessageTitleResult").c_str(), MB_OK | MB_ICONERROR);
27422745
}

0 commit comments

Comments
 (0)