在windows上Matlab 编译MatConvNet
windows 10 64 bits
matlab 2015b/2016a
MatConvNet?1.0-beta20?或者從github 下載GIT repository
CUDA GPU Computing ToolKit 7.5
cudnn-rc4/cudnn-rc5
都按照官網(wǎng)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');
主要遇到兩個(gè)問題
1.找不到’cudnn.h’,這個(gè)是cudnnRoot路徑配置問題,官網(wǎng)的意思是在MatConvNet目錄下新建local文件夾,之后把cudnn放到local文件夾下,打開local\cudnn-rc4應(yīng)該看到三個(gè)文件夾include,bin,lib,編譯時(shí)要在MatConvNet目錄下進(jìn)行,先輸入addpath matlab加入matlab文件路徑。提示,直接nvidia官網(wǎng)下載的cudnn解壓后應(yīng)該是多出一級(jí)中間目錄cuda,比如cudnn\cuda\,在編譯時(shí)可以把cudnn路徑寫成"local\cudnn-rc4\cuda",或者手動(dòng)把中間目錄縮減
2.編譯vl_compilenn出錯(cuò)
原代碼
if opts.enableCudnnflags.cc{end+1} = '-DENABLE_CUDNN' ;flags.cc{end+1} = ['-I' opts.cudnnIncludeDir ] ; end文件路徑出錯(cuò),在報(bào)錯(cuò)信息里-I后跟cudnnIcludeDir路徑?jīng)]有加雙引號(hào)
修改后,一開始很盲目,看了mathworks上的回答采取認(rèn)真看出錯(cuò)信息,仔細(xì)點(diǎn)應(yīng)該能發(fā)現(xiàn)問題
if opts.enableCudnnflags.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" endgithub上最新版本已經(jīng)修復(fù)這個(gè)問題
3.nvcc 編譯MatConvNet\matlab\src\bits\impl\nnbilinearsampler_cudnn.cu報(bào)錯(cuò) 在250行左右?undefined "backward" identifier
因?yàn)樵?/p> template<typename type, bool backwardData, bool backwardGrid> static vl::Error forward_backward
函數(shù)中缺少backward的定義,仿照前面的
template<typename type> __global__ void grid_backward_kernel函數(shù)中的方式在函數(shù)開始部分添加
bool backward = backwardData;//added here for cudnn compile with undefined 'backward' identifier發(fā)現(xiàn)backward或者backwardData只是一個(gè)bool 型的值作為一個(gè)選項(xiàng)
?
4.編譯MatConvNet\matlab\src\bits\impl\nnbilinearsampler_cudnn.cu出錯(cuò),第24行
#warning "bilinearsampler_cudnn.cu will be disabled as it requires CUDNN v5 or higher."報(bào),無(wú)效的預(yù)編譯指令“warning”
原來(lái),gcc,C# 中有#warning指令,MSVC C\C++中沒有#warning 指令,可以用#pragma message "warning ..."代替
?
轉(zhuǎn)載于:https://www.cnblogs.com/logicfool/p/5614912.html
總結(jié)
以上是生活随笔為你收集整理的在windows上Matlab 编译MatConvNet的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何打开192.168.8.1管理控制台
- 下一篇: Matlab中meshgrid的用法简介