mirror of
https://github.com/lltcggie/waifu2x-caffe.git
synced 2025-06-26 13:42:48 +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 ConvertInverseMode = CV_YUV2RGB;
|
||||
|
||||
// 最低限必要なCUDAドライバーのバージョン
|
||||
const int MinCudaDriverVersion = 6050;
|
||||
|
||||
static std::once_flag waifu2x_once_flag;
|
||||
static std::once_flag waifu2x_cudnn_once_flag;
|
||||
static std::once_flag waifu2x_cuda_once_flag;
|
||||
|
||||
#ifndef CUDA_CHECK_WAIFU2X
|
||||
#define CUDA_CHECK_WAIFU2X(condition) \
|
||||
@ -117,6 +121,38 @@ Waifu2x::eWaifu2xcuDNNError Waifu2x::can_use_cuDNN()
|
||||
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の範囲に変換
|
||||
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 (can_use_CUDA() != eWaifu2xCudaError_OK)
|
||||
return eWaifu2xError_FailedCudaCheck;
|
||||
// cuDNNが使えそうならcuDNNを使う
|
||||
if (can_use_cuDNN() == eWaifu2xcuDNNError_OK)
|
||||
else if (can_use_cuDNN() == eWaifu2xcuDNNError_OK)
|
||||
process = "cudnn";
|
||||
}
|
||||
|
||||
|
@ -30,6 +30,14 @@ public:
|
||||
eWaifu2xError_FailedParseModelFile,
|
||||
eWaifu2xError_FailedConstructModel,
|
||||
eWaifu2xError_FailedProcessCaffe,
|
||||
eWaifu2xError_FailedCudaCheck,
|
||||
};
|
||||
|
||||
enum eWaifu2xCudaError
|
||||
{
|
||||
eWaifu2xCudaError_OK = 0,
|
||||
eWaifu2xCudaError_NotFind,
|
||||
eWaifu2xCudaError_OldVersion,
|
||||
};
|
||||
|
||||
enum eWaifu2xcuDNNError
|
||||
@ -89,6 +97,7 @@ public:
|
||||
~Waifu2x();
|
||||
|
||||
static eWaifu2xcuDNNError can_use_cuDNN();
|
||||
static eWaifu2xCudaError can_use_CUDA();
|
||||
|
||||
// mode: noise or scale or noise_scale or auto_scale
|
||||
// process: cpu or gpu or cudnn
|
||||
|
@ -557,6 +557,20 @@ public:
|
||||
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);
|
||||
cancelFlag = false;
|
||||
isLastError = false;
|
||||
@ -714,19 +728,30 @@ public:
|
||||
|
||||
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())
|
||||
{
|
||||
case Waifu2x::eWaifu2xcuDNNError_OK:
|
||||
MessageBox(dh, TEXT("cuDNNが使えます"), TEXT("結果"), MB_OK | MB_ICONINFORMATION);
|
||||
MessageBox(dh, TEXT("cuDNNが使えます。"), TEXT("結果"), MB_OK | MB_ICONINFORMATION);
|
||||
break;
|
||||
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;
|
||||
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;
|
||||
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;
|
||||
default:
|
||||
MessageBox(dh, TEXT("cuDNN‚ÍŽg‚¦‚Ü‚¹‚ñ"), TEXT("Œ‹‰Ê"), MB_OK | MB_ICONERROR);
|
||||
|
Loading…
x
Reference in New Issue
Block a user