mirror of
https://github.com/lltcggie/waifu2x-caffe.git
synced 2025-06-26 21:52:49 +00:00
CUDAドライバーのバージョンチェックを入れた
This commit is contained in:
parent
75f258aae3
commit
cb2b1cfbf8
@ -35,8 +35,12 @@ const int layer_num = 7;
|
|||||||
const int ConvertMode = CV_RGB2YUV;
|
const int ConvertMode = CV_RGB2YUV;
|
||||||
const int ConvertInverseMode = CV_YUV2RGB;
|
const int ConvertInverseMode = CV_YUV2RGB;
|
||||||
|
|
||||||
|
// 最低限必要なCUDAドライバーのバージョン
|
||||||
|
const int MinCudaDriverVersion = 6050;
|
||||||
|
|
||||||
static std::once_flag waifu2x_once_flag;
|
static std::once_flag waifu2x_once_flag;
|
||||||
static std::once_flag waifu2x_cudnn_once_flag;
|
static std::once_flag waifu2x_cudnn_once_flag;
|
||||||
|
static std::once_flag waifu2x_cuda_once_flag;
|
||||||
|
|
||||||
#ifndef CUDA_CHECK_WAIFU2X
|
#ifndef CUDA_CHECK_WAIFU2X
|
||||||
#define CUDA_CHECK_WAIFU2X(condition) \
|
#define CUDA_CHECK_WAIFU2X(condition) \
|
||||||
@ -117,6 +121,38 @@ Waifu2x::eWaifu2xcuDNNError Waifu2x::can_use_cuDNN()
|
|||||||
return cuDNNFlag;
|
return cuDNNFlag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CUDAが使えるかチェック
|
||||||
|
Waifu2x::eWaifu2xCudaError Waifu2x::can_use_CUDA()
|
||||||
|
{
|
||||||
|
static eWaifu2xCudaError CudaFlag = eWaifu2xCudaError_NotFind;
|
||||||
|
std::call_once(waifu2x_cuda_once_flag, [&]()
|
||||||
|
{
|
||||||
|
int driverVersion = 0;
|
||||||
|
if (cudaDriverGetVersion(&driverVersion) == cudaSuccess)
|
||||||
|
{
|
||||||
|
if (driverVersion > 0)
|
||||||
|
{
|
||||||
|
int runtimeVersion;
|
||||||
|
if (cudaRuntimeGetVersion(&runtimeVersion) == cudaSuccess)
|
||||||
|
{
|
||||||
|
if (runtimeVersion >= MinCudaDriverVersion && driverVersion >= runtimeVersion)
|
||||||
|
CudaFlag = eWaifu2xCudaError_OK;
|
||||||
|
else
|
||||||
|
CudaFlag = eWaifu2xCudaError_OldVersion;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
CudaFlag = eWaifu2xCudaError_NotFind;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
CudaFlag = eWaifu2xCudaError_NotFind;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
CudaFlag = eWaifu2xCudaError_NotFind;
|
||||||
|
});
|
||||||
|
|
||||||
|
return CudaFlag;
|
||||||
|
}
|
||||||
|
|
||||||
// 画像を読み込んで値を0.0f~1.0fの範囲に変換
|
// 画像を読み込んで値を0.0f~1.0fの範囲に変換
|
||||||
Waifu2x::eWaifu2xError Waifu2x::LoadImage(cv::Mat &float_image, const std::string &input_file)
|
Waifu2x::eWaifu2xError Waifu2x::LoadImage(cv::Mat &float_image, const std::string &input_file)
|
||||||
{
|
{
|
||||||
@ -538,8 +574,10 @@ Waifu2x::eWaifu2xError Waifu2x::init(int argc, char** argv, const std::string &M
|
|||||||
|
|
||||||
if (process == "gpu")
|
if (process == "gpu")
|
||||||
{
|
{
|
||||||
|
if (can_use_CUDA() != eWaifu2xCudaError_OK)
|
||||||
|
return eWaifu2xError_FailedCudaCheck;
|
||||||
// cuDNNが使えそうならcuDNNを使う
|
// cuDNNが使えそうならcuDNNを使う
|
||||||
if (can_use_cuDNN() == eWaifu2xcuDNNError_OK)
|
else if (can_use_cuDNN() == eWaifu2xcuDNNError_OK)
|
||||||
process = "cudnn";
|
process = "cudnn";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,6 +30,14 @@ public:
|
|||||||
eWaifu2xError_FailedParseModelFile,
|
eWaifu2xError_FailedParseModelFile,
|
||||||
eWaifu2xError_FailedConstructModel,
|
eWaifu2xError_FailedConstructModel,
|
||||||
eWaifu2xError_FailedProcessCaffe,
|
eWaifu2xError_FailedProcessCaffe,
|
||||||
|
eWaifu2xError_FailedCudaCheck,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum eWaifu2xCudaError
|
||||||
|
{
|
||||||
|
eWaifu2xCudaError_OK = 0,
|
||||||
|
eWaifu2xCudaError_NotFind,
|
||||||
|
eWaifu2xCudaError_OldVersion,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum eWaifu2xcuDNNError
|
enum eWaifu2xcuDNNError
|
||||||
@ -89,6 +97,7 @@ public:
|
|||||||
~Waifu2x();
|
~Waifu2x();
|
||||||
|
|
||||||
static eWaifu2xcuDNNError can_use_cuDNN();
|
static eWaifu2xcuDNNError can_use_cuDNN();
|
||||||
|
static eWaifu2xCudaError can_use_CUDA();
|
||||||
|
|
||||||
// mode: noise or scale or noise_scale or auto_scale
|
// mode: noise or scale or noise_scale or auto_scale
|
||||||
// process: cpu or gpu or cudnn
|
// process: cpu or gpu or cudnn
|
||||||
|
@ -557,6 +557,20 @@ public:
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (process == "gpu" || process == "cudnn")
|
||||||
|
{
|
||||||
|
const auto flag = Waifu2x::can_use_CUDA();
|
||||||
|
switch (flag)
|
||||||
|
{
|
||||||
|
case Waifu2x::eWaifu2xCudaError_NotFind:
|
||||||
|
MessageBox(dh, TEXT("GPUで変換出来ません。\r\nCUDAドライバーがインストールされていない可能性があります。\r\nCUDAドライバーをインストールして下さい。"), TEXT("エラー"), MB_OK | MB_ICONERROR);
|
||||||
|
return;
|
||||||
|
case Waifu2x::eWaifu2xCudaError_OldVersion:
|
||||||
|
MessageBox(dh, TEXT("GPUで変換出来ません。\r\nCUDAドライバーのバージョンが古い可能性があります。\r\nCUDAドライバーを更新して下さい。"), TEXT("エラー"), MB_OK | MB_ICONERROR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
SendMessage(GetDlgItem(dh, IDC_PROGRESS), PBM_SETPOS, 0, 0);
|
SendMessage(GetDlgItem(dh, IDC_PROGRESS), PBM_SETPOS, 0, 0);
|
||||||
cancelFlag = false;
|
cancelFlag = false;
|
||||||
isLastError = false;
|
isLastError = false;
|
||||||
@ -714,19 +728,30 @@ public:
|
|||||||
|
|
||||||
void CheckCUDNN(HWND hWnd, WPARAM wParam, LPARAM lParam, LPVOID lpData)
|
void CheckCUDNN(HWND hWnd, WPARAM wParam, LPARAM lParam, LPVOID lpData)
|
||||||
{
|
{
|
||||||
|
const auto flag = Waifu2x::can_use_CUDA();
|
||||||
|
switch (flag)
|
||||||
|
{
|
||||||
|
case Waifu2x::eWaifu2xCudaError_NotFind:
|
||||||
|
MessageBox(dh, TEXT("cuDNNは使えません。\r\nCUDAドライバーがインストールされていない可能性があります。\r\nCUDAドライバーをインストールして下さい。"), TEXT("結果"), MB_OK | MB_ICONERROR);
|
||||||
|
return;
|
||||||
|
case Waifu2x::eWaifu2xCudaError_OldVersion:
|
||||||
|
MessageBox(dh, TEXT("cuDNNは使えません。\r\nCUDAドライバーのバージョンが古い可能性があります。\r\nCUDAドライバーを更新して下さい。"), TEXT("結果"), MB_OK | MB_ICONERROR);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch (Waifu2x::can_use_cuDNN())
|
switch (Waifu2x::can_use_cuDNN())
|
||||||
{
|
{
|
||||||
case Waifu2x::eWaifu2xcuDNNError_OK:
|
case Waifu2x::eWaifu2xcuDNNError_OK:
|
||||||
MessageBox(dh, TEXT("cuDNNが使えます"), TEXT("結果"), MB_OK | MB_ICONINFORMATION);
|
MessageBox(dh, TEXT("cuDNNが使えます。"), TEXT("結果"), MB_OK | MB_ICONINFORMATION);
|
||||||
break;
|
break;
|
||||||
case Waifu2x::eWaifu2xcuDNNError_NotFind:
|
case Waifu2x::eWaifu2xcuDNNError_NotFind:
|
||||||
MessageBox(dh, TEXT("cuDNNは使えません\r\n「cudnn64_65.dll」が見つかりません"), TEXT("結果"), MB_OK | MB_ICONERROR);
|
MessageBox(dh, TEXT("cuDNNは使えません。\r\n「cudnn64_65.dll」が見つかりません。"), TEXT("結果"), MB_OK | MB_ICONERROR);
|
||||||
break;
|
break;
|
||||||
case Waifu2x::eWaifu2xcuDNNError_OldVersion:
|
case Waifu2x::eWaifu2xcuDNNError_OldVersion:
|
||||||
MessageBox(dh, TEXT("cuDNNは使えません\r\n「cudnn64_65.dll」のバージョンが古いです。v2を使って下さい。"), TEXT("結果"), MB_OK | MB_ICONERROR);
|
MessageBox(dh, TEXT("cuDNNは使えません。\r\n「cudnn64_65.dll」のバージョンが古いです。v2を使って下さい。"), TEXT("結果"), MB_OK | MB_ICONERROR);
|
||||||
break;
|
break;
|
||||||
case Waifu2x::eWaifu2xcuDNNError_CannotCreate:
|
case Waifu2x::eWaifu2xcuDNNError_CannotCreate:
|
||||||
MessageBox(dh, TEXT("cuDNNは使えません\r\ncuDNNを初期化出来ません"), TEXT("結果"), MB_OK | MB_ICONERROR);
|
MessageBox(dh, TEXT("cuDNNは使えません。\r\ncuDNNを初期化出来ません。"), TEXT("結果"), MB_OK | MB_ICONERROR);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
MessageBox(dh, TEXT("cuDNN‚ÍŽg‚¦‚Ü‚¹‚ñ"), TEXT("Œ‹‰Ê"), MB_OK | MB_ICONERROR);
|
MessageBox(dh, TEXT("cuDNN‚ÍŽg‚¦‚Ü‚¹‚ñ"), TEXT("Œ‹‰Ê"), MB_OK | MB_ICONERROR);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user