编译matconvnet出错
>> vl_compilenn('enableGpu', true)
使用 'nvcc' 编译。
错误使用 mex
nvcc fatal : '-DNDEBUG': expected a number
出错 mexcuda (line 157)
[varargout{1:nargout}] = mex(mexArguments{:});
出错 vl_compilenn>mexcuda_compile (line 603)
mexcuda(args{:}) ;
出错 vl_compilenn (line 489)
mexcuda_compile(opts, srcs{i}, objfile, flags) ;
网上的解决方法,直接用debug模式,我认为不可取,使用debug模式相当于优化等级为零,总不能一直用debug模式运行吧。
打开vl_compilenn.m,第336行-第342行代码为:
if opts.debug
flags.base{end+1} = '-g' ;
flags.base{end+1} = '-DDEBUG' ;
else
flags.base{end+1} = '-O' ;
flags.base{end+1} = '-DNDEBUG' ;
end
查阅官方文档,当使用Debug时,用'-g'来执行,Debug模式优化等级为0.
当使用Ndebug时,用'-O'指令来执行速度优化,默认的优化等级为3.
出现如上错误的原因是:CUDA10.1及以上版本把速度优化指令'-O'给弃用了,最新的指令为'-O+数字'。
如我们要进行加速等级为3的优化,指令为'-O3'。因此错误提示我们缺少数字。
参考:
NVCC :: CUDA Toolkit Documentation
cuda - nvcc fatal : '--ptxas-options=-v': expected a number - Stack Overflow
解决方法:
打开nvcc配置文件
sudo gedit /usr/local/MATLAB/R2018b/toolbox/distcomp/gpu/extern/src/mex/glnxa64/nvcc_g++.xml
找到CXXOPTIMFLAGS="-O -DNDEBUG"
将其改为CXXOPTIMFLAGS="-O3 -DNDEBUG"。
再次运行,问题解决。
其实在/usr/local/MATLAB/R2018b/toolbox/distcomp/gpu/extern/src/mex/glnxa64/路径下有两个配置文件nvcc_g++.xml和nvcc_g++_dynamic.xml,保险起见,把两个配置文件都做同样更改。