Matlab2018b使用CUDA10.1错误nvcc fatal : ‘-DNDEBUG‘: expected a number

编译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,保险起见,把两个配置文件都做同样更改。

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值