我是靠谱客的博主 纯真火车,最近开发中收集的这篇文章主要介绍MatConvNet编译报错:Error using mex nvcc fatal : Unsupported gpu architecture ‘compute_20‘ 解决办法项目场景解决办法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 项目场景
  • 解决办法


项目场景

最近在使用 MatConvNet 编译 GPU 支持时,使用 vl_compilenn('enableGpu', true, 'cudaRoot', '/usr/local/cuda-11.1') 命令出现了如下报错:

Error using mex
nvcc fatal   : Unsupported gpu architecture 'compute_20'

Error in vl_compilenn>mex_compile (line 530)
mex(mopts{:}) ;

Error in vl_compilenn (line 488)
      mex_compile(opts, srcs{i}, objfile, flags.mexcu) ;

其中我编译的 MatConvNet 版本为 MatConvNet 1.0-beta24, MATLAB 版本为 2019b,系统为 Ubuntu21.10


解决办法

修改 vl_compilenn.m 文件,将文件中的 opts.cudaMethod 值设为 ['nvcc']

opts.cudaMethod = ['nvcc'] ;

接着在 MATLAB 命令行中使用 gpuDevice() 命令查看你的 GPU 算力:

>> gpuDevice()
ans = 
  CUDADevice with properties:
                      Name: 'NVIDIA GeForce MX250'
                     Index: 1
         ComputeCapability: '6.1'
         ......
            DeviceSelected: 1
>> 

这里的 ComputeCapability 的值乘以 10 就是你的 GPU 算力,这里我的是 61,接着修改 vl_compilenn 函数中的 opts.defCudaArch 的值:

opts.defCudaArch      = [...
  '-gencode=arch=compute_61,code="sm_61,compute_61" '...
  ];

修改为 compute_61,大致修改如下:
在这里插入图片描述

接着我的系统还出现了如下报错:

error: Type Error
  ┌─ shell:1:331"/usr/local/cuda-11.1/bin/nvcc" -c "/home/zq/Documents/Project/dcnf-fcsp/libs/matconvnet-1.0-beta24/matlab/src/bits/data.cu" -g -DENABLE_GPU -DENABLE_DOUBLE -gencode=arch=compute_61,code="sm_61,compute_61"  -I"/usr/local/Polyspace/R2019b/extern/include" -I"/usr/local/Polyspace/R2019b/toolbox/distcomp/gpu/extern/include"  -Xcompiler -mssse3,-ftree-vect-loop-version,-ffast-math,-funroll-all-loops -gencode=arch=compute_61,code="sm_61,compute_61"  -O0 -Xcompiler -fPIC -D_FORCE_INLINES -o "/home/zq/Documents/Project/dcnf-fcsp/libs/matconvnet-1.0-beta24/matlab/mex/.build/bits/data.o"^^ Expected operator, found -c

解决办法如下,这里是由于 bash 语法中的双引号导致的,找到你的 nvcc_compile(opts, src, tgt, nvcc_opts) 函数,修改其中的 nvcc_cmd 值如下:

nvcc_cmd = sprintf('%s -c %s %s -o %s', ...
                   nvcc_path, src, ...
                   strjoin(nvcc_opts), tgt);

就是把 %s 前后的双引号去掉了。

在这里插入图片描述

若接着出现如下报错,参考此博客:

最后

以上就是纯真火车为你收集整理的MatConvNet编译报错:Error using mex nvcc fatal : Unsupported gpu architecture ‘compute_20‘ 解决办法项目场景解决办法的全部内容,希望文章能够帮你解决MatConvNet编译报错:Error using mex nvcc fatal : Unsupported gpu architecture ‘compute_20‘ 解决办法项目场景解决办法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(70)

评论列表共有 0 条评论

立即
投稿
返回
顶部