必须修改
170:opts.continue = true;
179:opts.debug = true;
359:flags.mexlink = {'-lmwblas'} ; %这个选项和后续619是等价的,可视情况任选
646:cl_path = fullfile(cc.Location, 'VC', 'Tools', 'MSVC','14.27.29110','bin','Hostx64','x64');
619:flags.mexlink(1)=[];
686:for v = {'5.5', '6.0', '6.5', '7.0', '7.5', '8.0', '8.5', '9.0', '9.5', '10.2'}
可修改可不修改
184:% '-gencode=arch=compute_20,code=\"sm_20,compute_20\" '...
367: sprintf('-I"%s"',fullfile(toolboxdir('parallel'),'gpu','extern','include')), ...
运行:vl_compilenn('enableGpu', true, 'cudaMethod', 'nvcc', 'cudaRoot', 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2', 'enableCudnn', true, 'cudnnRoot', 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2')
有时候上述一句也不完全可以搞定,vl_compilenn('enableGpu', true) 和vl_compilenn('enableGpu', true, 'enableCudnn', true)这两个可以交替的运行让前面的编译成功,后续再进行链接
运行:vl_setupnn
在第10轮链接时候,620行删除 flags.base如下
flags.mexlink(1)=[]
args = horzcat({'-outdir', mex_dir}, ...
flags.mexlink, ...
{['LDFLAGS=$LDFLAGS ' strjoin(flags.mexlink_ldflags)]}, ...
{['LDOPTIMFLAGS=$LDOPTIMFLAGS ' strjoin(flags.mexlink_ldoptimflags)]}, ...
{['LINKLIBS=' strjoin(flags.mexlink_linklibs) ' $LINKLIBS']}, ...
objs) ;
opts.verbose && fprintf('%s: MEX LINK: %s\n', mfilename, strjoin(args)) ;
mex(args{:})
链接成功
或者直接采用以下两句
flags.mexlink(1)=[]
flags.base=[]
错误使用 vl_compilenn>check_clpath (第 577 行)
Unable to find cl.exe
出错 vl_compilenn (第 400 行)
check_clpath(); % check whether cl.exe in path
出错 dr_setup (第 78 行)
vl_compilenn('EnableGpu',false);
解决办法:
646行替换为
cl_path = fullfile(cc.Location, 'VC', 'Tools', 'MSVC','14.27.29110','bin','Hostx64','x64');
>> vl_compilenn('enableGpu',true)
错误使用 vl_compilenn>search_cuda_devkit (第 636 行)
Could not find a valid NVCC executable\n
出错 vl_compilenn (第 256 行)
if isempty(opts.cudaRoot), opts.cudaRoot = search_cuda_devkit(opts) ; end
解决办法:
第608行
for v = {'5.5', '6.0', '6.5', '7.0', '7.5'}
加上自己cuda版本号可后续执行
for v = {'5.5', '6.0', '6.5', '7.0', '7.5', '10.2'}
错误使用 vl_compilenn>nvcc_compile (第 615 行)
Command "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.0\bin\nvcc" -c -o "C:\Applications\MATLAB
R2020b\toolbox\matconvnet-1.0-beta25\matlab\mex\.build\bits\data.obj" "C:\Applications\MATLAB R2020b\toolbox\matconvnet-1.0-beta25\matlab\src\bits\data.cu"
-DENABLE_GPU -DENABLE_DOUBLE -O -DNDEBUG -D_FORCE_INLINES --std=c++11 -I"C:\Applications\MATLAB R2020b\extern\include" -I"C:\Applications\MATLAB
R2020b\toolbox\distcomp\gpu\extern\include" -gencode=arch=compute_50,code=\"sm_50,compute_50\" --compiler-options=/MD --compiler-bindir="C:\Program Files
(x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.27.29110\bin\Hostx64" failed.
出错 vl_compilenn (第 487 行)
nvcc_compile(opts, srcs{i}, objfile, flags) ;
解决办法:https://blog.csdn.net/CsdnWujinming/article/details/89221565
说修改debug为:true
错误使用 mex
'C:\Applications\MATLAB R2020b\toolbox\matconvnet-1.0-beta25\matlab\mex\vl_nnconv.mexw64' 使用了 '-R2018a' 进行编译并与 '-R2017b' 链接在一起。 有关详细信息,请参阅 MEX 文件
使用了一个 API 进行编译并与另一个 API 链接在一起。
出错 vl_compilenn>mex_link (第 627 行)
mex(args{:}) ;
出错 vl_compilenn (第 500 行)
mex_link(opts, objs, flags.mex_dir, flags) ;
解决办法:在619行增添
flags.mexlink(1)=[]; % 源文件没有此行,连接错误通过提示将里面的第一个参数删去,可成功链接
之前成功过一次
使用matconvnet-1.0-beta25编译成功
170行opts.continue = true; 采用下方语句编译执行成功
vl_compilenn('enableGpu', true, 'cudaMethod', 'nvcc', 'cudaRoot', 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2', 'enableCudnn', true, 'cudnnRoot', 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.2')
乱七八糟的每个固定的解决方案,这次用上面的语句不行
vl_compilenn('enableGpu', true)成功编译
找找此文提示:https://blog.csdn.net/Dandelion_2/article/details/102893100
重新运行:vl_setupnn
2020b 取消对 toolboxdir('distcomp') 的支持
sprintf('-I"%s"',fullfile(toolboxdir('distcomp'),'gpu','extern','include')), ...
替换为
sprintf('-I"%s"',fullfile(toolboxdir('parallel'),'gpu','extern','include')), ...