这次是要用MCCT来测试matconvnet-GPU是否能运行成功。
runTracker的时候编译出现以下问题:nvcc fatal:‘-DNDEBUG’:except a number,错误使用vl_compilenn>nvcc compile
按照这个博客(https://blog.csdn.net/u012655176/article/details/72783042)上面改了一下matconvnet 里面的文件夹 ,但是还是编译不成功。
这个问题在我将cuda10.1改成cuda9.2就没有了。卸载详见下一篇文章。
PS:环境配置部分有很多坑,版本不匹配会导致各种意想不到的问题。这里有官方搭配。
目前我的配置是Visual Studio 2015pro+cuda9.2+cuDNNv7.5.1+Anaconda3 5.2.0+Matlab2018a+Pytorch 1.0.1,matlab的版本要比vs的高。目前运行都很稳定,仅供参考。
------------------------------------分割线-------------------------------------------------------
2019.5.14 运行MFT,又需要编译matconvnet的gpu版本,在此做一个详细的记录。
参考链接:
1.windows下编译Matconvnet的方法(CPU和GPU) - Hungryof的专栏 - CSDN博客
步骤:
1.在matconvnet文件夹里新建一个local的文件夹,把下载的cudnn放进去
2.将local/bin里面的cudnn64_7.dll复制到matlab/mex里面
3.在命令行输入
vl_compilenn('enableGpu',true,'cudaRoot','C:/Program Files/NVIDIA GPU Computing Toolkit/CUDA/v9.2','cudaMethod','nvcc','enableCudnn','true','cudnnRoot','local')
说明:vl_compilenn('enableGpu',true,'cudaRoot','cuda的地址,v9.2是cuda版本号','cudaMethod','nvcc','enableCudnn','true','cudnnRoot','cudnn的地址')
运行之后是这样:
出现的问题以及解决办法:
1.错误使用mex:使用‘-R2018a’进行编译并于‘-R2017b’链接在一起(我发誓我没有😭)
解决方案:将vl_compile.m文件的 line 620改成
args = horzcat({'-outdir', mex_dir}, ...
flags.base, flags.mexlink, ...
'-R2018a',...
{['LDFLAGS=$LDFLAGS ' strjoin(flags.mexlink_ldflags)]}, ...
{['LDOPTIMFLAGS=$LDOPTIMFLAGS ' strjoin(flags.mexlink_ldoptimflags)]}, ...
{['LINKLIBS=' strjoin(flags.mexlink_linklibs) ' $LINKLIBS']}, ...
objs) ;
将line359改成:flags.mexlink = {'-lmwblas'};
2.运行之后出现新的问题:|| 和 && 运算符的操作数必须能够转换为逻辑标量值。
解决方案:
查看出错语句,opts.enableCudnn='true',strcmp(arch, 'win64')=1,但是true不是逻辑标量值,所以出错。所以在前面加了几句这个(如果你有更改好的方法可以留言)
if opts.enableCudnn
opts.enableCudnn=1;
end
然后编译成功。
3.CL.EXE不是内部命令或外部命令,也不是可运行的程序
找到cl.exe的地址,然后将check_clpath那里的地址改一改。
PS:以上是我这次编译Matconvnet-GPU出现的问题,这一篇里面有上一次配置MCCT(GPU)出现的问题以及解决方法。如果你出现了这篇没有的问题,可查阅那一篇文章。