CUDA升级后CMake检测到编译器却无法识别GPU问题求助
解决升级CUDA后CMake无法检测GPU的问题
问题描述
升级CUDA至12.5版本后,原可正常构建的CUDA项目出现CMake报错:
CUDA_ARCHITECTURES is set to "native", but no GPU was detected.
已知环境信息:
- 操作系统:Debian 12
- CUDA版本:12.5(完整工具包已安装)
- CMake版本:3.25.1
- GPU:NVIDIA GeForce GTX 1650
nvidia-smi可正常显示GPU信息,which nvcc输出/usr/local/cuda/bin/nvcc
项目CMakeLists.txt中设置了CUDA_ARCHITECTURES native,CMake可检测到nvcc但无法自动识别本地GPU架构。
解决方案
方法1:直接指定GPU架构值
GTX 1650基于Turing架构,对应的CUDA架构值为7.5。将native替换为具体架构值,跳过CMake的自动检测步骤:
修改CMakeLists.txt中的目标属性配置:
set_target_properties( cuda_hello_world PROPERTIES CUDA_ARCHITECTURES 75 CUDA_SEPARABLE_COMPILATION ON )
方法2:确保CMake可正确调用nvidia-smi
CMake通过nvidia-smi检测本地GPU架构,若存在权限或路径问题会导致检测失败:
- 验证当前用户无需sudo即可执行
nvidia-smi - 若
nvidia-smi不在系统PATH中,在CMakeLists.txt开头添加以下配置:
# 显式指定nvcc路径 set(CMAKE_CUDA_COMPILER "/usr/local/cuda/bin/nvcc") # 确保nvidia-smi可被CMake找到 find_program(NVIDIA_SMI_PATH nvidia-smi) if(NOT NVIDIA_SMI_PATH) message(FATAL_ERROR "nvidia-smi not found in system PATH") endif()
方法3:升级CMake版本
CMake 3.25.x对CUDA 12.5的兼容性存在缺陷,升级至CMake 3.26及以上版本(推荐3.28+),新版本对CUDA 12.x系列的支持更完善。
验证步骤
执行以下命令重新构建项目:
rm -rf build && mkdir build && cd build cmake .. make
运行生成的可执行文件:
./cuda_hello_world
若输出Hello, World!,则说明项目已正常构建。
内容的提问来源于stack exchange,提问作者Rahn
相关产品推荐
相关产品推荐

