admin管理员组

文章数量:1663034

问题描述

显卡:NVIDIA GeForce RTX 3060
CUDA版本:CUDA 11.2
PCL版本:1.10.1

make过程中出现:nvcc fatal : Unsupported gpu architecture ‘compute_30‘ 报错。

问题分析

症结在于我的显卡不支持compute_30的GPU构架,与CUDA版本不兼容。

网上大多数的解决方法是找到makefile文件中CUDA_ARCH参数配置,将其中的 -gencode arch=compute_30,code=sm_30 \注释/删除,如图所示(图片来自网络):


但问题是,我查看了PCL几乎所有的(并不是全部)的makefile文件,压根没见到这个参数啊喂!!!!于是乎,转念一想,makefile不是CMakeList生成的吗?为什么要傻傻去找makefile,便有了这篇文章的解决方法…

解决方法

找到pcl文件夹下cmake/pcl_find_cuda.cmake,将__cuda_arch_bin参数做如下修改:


__cuda_arch_bin的含义是在cmake时,编译器会自动从引号里面的计算架构中选择,排在第一个的30会被优先选择。那既然我的显卡不支持compute_30,那我就删掉/注释掉它呗,于是变成了以35开头。当然,你也可以顺着第25行代码提供的官方网站摸进去,去查查自己显卡适配的计算架构,我的RTX 3060推荐的是8.6,如图所示:

你不用它推荐的也无所谓,反正咱不就以编译通过为目的么?不过在编译过程中会出现如下警告,不过无伤大雅


再make,通过!

补充问题

在编译过程中也许会出现c++: internal compiler error: 已杀死 (program cc1plus)的问题:


网上说是交换空间不足,然后教大家如何增大交换空间。本人计较懒,不愿意搞这么复杂。此时,你只需要关闭一些没用的窗口界面,再次make:


诶,奇迹发生了。刚刚是在86%的时候报错,现在到了93%才报错,既然如此,果断继续make


大功告成!!
猜测一下原因:第一,我装的是Windows+Ubuntu双系统,配置的交换空间(暂且理解为系统内存)确实不大我承认,但绝非到影响功能的地步。第二,我开着很多窗口、网页占据了一些空间,关掉就好。第三,代码编译过程中会产生大量中间数据,在编译停止后会自动释放,所以不断报错又不断make的过程也是在不断释放中间数据的过程,因此方法奏效。

本文标签: 报错FATALnvccPCLArchitecture