windows 10 64 bits
matlab 2015b/2016a
MatConvNet 1.0-beta20 或者從github 下載GIT repository
CUDA GPU Computing ToolKit 7.5
cudnn-rc4/cudnn-rc5
都按照官網http://www.vlfeat.org/matconvnet/
配置好了之后,
編譯命令
vl_compilenn('enableGpu', true, ... 'cudaRoot','C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5',... 'cudaMethod', 'nvcc', ... 'enableCudnn', true, ... 'cudnnRoot', 'local\cudnn-rc4',... 'verbose','2',... 'debug','1');
主要遇到兩個問題
1.找不到’cudnn.h’,這個是cudnnRoot路徑配置問題,官網的意思是在MatConvNet目錄下新建local文件夾,之后把cudnn放到local文件夾下,打開local\cudnn-rc4應該看到三個文件夾include,bin,lib,編譯時要在MatConvNet目錄下進行,先輸入addpath matlab加入matlab文件路徑。提示,直接nvidia官網下載的cudnn解壓后應該是多出一級中間目錄cuda,比如cudnn\cuda\,在編譯時可以把cudnn路徑寫成"local\cudnn-rc4\cuda",或者手動把中間目錄縮減
2.編譯vl_compilenn出錯
原代碼
if opts.enableCudnn flags.cc{end+1} = '-DENABLE_CUDNN' ; flags.cc{end+1} = ['-I' opts.cudnnIncludeDir ] ; end
文件路徑出錯,在報錯信息里-I后跟cudnnIcludeDir路徑沒有加雙引號
修改后,一開始很盲目,看了mathworks上的回答采取認真看出錯信息,仔細點應該能發現問題
if opts.enableCudnn flags.cc{end+1} = '-DENABLE_CUDNN' ; flags.cc{end+1} = ['-I"' opts.cudnnIncludeDir '"'] ;%http://cn.mathworks.com/matlabcentral/answers/264961-having-problem-in-matconvnet-to-compiling-the-cudnn-support "opts.cudnnIncludeDir" end
github上最新版本已經修復這個問題
3.nvcc 編譯MatConvNet\matlab\src\bits\impl\nnbilinearsampler_cudnn.cu報錯 在250行左右 undefined "backward" identifier
因為在
template<typename type, bool backwardData, bool backwardGrid> static vl::Error forward_backward
函數中缺少backward的定義,仿照前面的
template<typename type> __global__ void grid_backward_kernel
函數中的方式在函數開始部分添加
bool backward = backwardData;//added here for cudnn compile with undefined 'backward' identifier
發現backward或者backwardData只是一個bool 型的值作為一個選項
4.編譯MatConvNet\matlab\src\bits\impl\nnbilinearsampler_cudnn.cu出錯,第24行
#warning "bilinearsampler_cudnn.cu will be disabled as it requires CUDNN v5 or higher."
報,無效的預編譯指令“warning”
原來,gcc,C# 中有#warning指令,MSVC C\C++中沒有#warning 指令,可以用#pragma message "warning ..."代替