【已解决】PCL配置中出现:nvcc fatal : Unsupported gpu architecture ‘compute_30‘

文章讲述了在Linux环境下,使用CUDA11.4和PCL1.12.0时遇到的编译错误,由于CUDA不支持compute_30架构。解决方法包括修改PCL源代码、降级CUDA版本或在CMake阶段设置合适的CUDA架构。最终作者选择了在CMake阶段设置compute_75架构以适应GeForceGTX1660Ti显卡。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

更新:更简单粗暴的方法是根据自己的CUDA版本换pcl的版本。作为参考,我的CUDA版本为11.4,使用PCL 1.12.0是可以的。在 Release PCL 1.12.0 · PointCloudLibrary/pcl 下载Source code(tar.gz)

环境信息

linux系统:18.04
显卡:GeForce GTX 1660 Ti
CUDA版本:11.4
PCL版本:1.9.1


1. 报错情况

在编译过程中,make到75%时出现报错
Unsupported gpu architecture ‘compute_30’ CMake Error at pcl_gpu_utils_generated_repacks.cu.o.None.cmake:221 (message): Error generating /opt/pcl/release/gpu/utils/CMakeFiles/pcl_gpu_utils.dir/src/./pcl_gpu_utils_generated_repacks.cu.o gpu/utils/CMakeFiles/pcl_gpu

解释:if(CUDA_FOUND) message(STATUS "Found CUDA Toolkit v${CUDA_VERSION_STRING}") enable_language(CUDA) set(HAVE_CUDA TRUE) if (CMAKE_CUDA_COMPILER_ID STREQUAL "NVIDIA") if(${CUDA_VERSION_STRING} VERSION_GREATER_EQUAL "11.1") execute_process(COMMAND ${CMAKE_CUDA_COMPILER} --list-gpu-code RESULT_VARIABLE EXIT_CODE OUTPUT_VARIABLE OUTPUT_VAL) if(EXIT_CODE EQUAL 0) #Remove sm_ string(REPLACE "sm_" "" OUTPUT_VAL ${OUTPUT_VAL}) #Convert to list string(REPLACE "\n" ";" __CUDA_ARCH_BIN ${OUTPUT_VAL}) #Remove last empty entry list(REMOVE_AT __CUDA_ARCH_BIN -1) else() message(FATAL_ERROR "Failed to run NVCC to get list of GPU codes: ${EXIT_CODE}") endif() elseif(${CUDA_VERSION_STRING} VERSION_GREATER_EQUAL "11.0") set(__CUDA_ARCH_BIN "35;37;50;52;53;60;61;62;70;72;75;80") elseif(${CUDA_VERSION_STRING} VERSION_GREATER_EQUAL "10.0") set(__CUDA_ARCH_BIN "30;32;35;37;50;52;53;60;61;62;70;72;75") elseif(${CUDA_VERSION_STRING} VERSION_GREATER_EQUAL "9.1") set(__CUDA_ARCH_BIN "30;32;35;37;50;52;53;60;61;62;70;72") else() set(__CUDA_ARCH_BIN "30;32;35;37;50;52;53;60;61;62;70") endif() else() message(FATAL_ERROR "Unsupported CUDA compiler ${CMAKE_CUDA_COMPILER_ID}.") endif() set(CUDA_ARCH_BIN ${__CUDA_ARCH_BIN} CACHE STRING "Specify 'real' GPU architectures to build binaries for") if(POLICY CMP0104) cmake_policy(SET CMP0104 NEW) set(CMAKE_CUDA_ARCHITECTURES ${CUDA_ARCH_BIN}) message(STATUS "CMAKE_CUDA_ARCHITECTURES: ${CMAKE_CUDA_ARCHITECTURES}") #Add empty project as its not required with newer CMake add_library(pcl_cuda INTERFACE) else() # Generate SASS set(CMAKE_CUDA_ARCHITECTURES ${CUDA_ARCH_BIN}) # Generate PTX for last architecture list(GET CUDA_ARCH_BIN -1 ver) set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} -gencode arch=compute_${ver},code=compute_${ver}") message(STATUS "CMAKE_CUDA_FLAGS: ${CMAKE_CUDA_FLAGS}") add_library(pcl_cuda INTERFACE) target_include_directories(pcl_cuda INTERFACE ${CUDA_TOOLKIT_INCLUDE}) endif () endif()
05-30
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值