標籤:
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::Errorforward_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 ..."代替
在windows上Matlab 編譯MatConvNet