CUDA编程10 - CUDA Samples 在ubuntu 24.04 上编译安装, 解决Unsupported gpu architecture ‘compute_xxx‘的问题

1. git clone https://github.com/NVIDIA/cuda-samples.git

2. 安装依赖

 sudo apt install cmake 
 sudo apt install cmake-qt-gui 
 sudo apt install libfreeimage-dev 
 sudo apt install freeglut3-dev 
 sudo apt install openmpi-bin libopenmpi-dev mpi-default-dev

3. 查询当前GPU架构,修改CMakeLists.txt,避免出现 Unsupported gpu architecture 问题

    nvidia-smi --query-gpu=name,compute_cap #查询你当前GPU架构

   然后修改CMakeLists.txt,删除大于当前不支持的架构,举例如下图:

  

一定要删全,我这里一共有许多CMakeList.txt 需要修改的(如果有不需要修改C

<think>我们遇到的问题是:在编译CUDA示例程序deviceQuery时,使用`make`命令出现了错误,错误信息是`nvcc fatal: Unsupported gpu architecture 'compute_35'`。这意味着当前使用的CUDA工具包(版本12.8)不支持计算能力为3.5(即`compute_35`)的GPU架构。 原因分析: CUDA工具包在后续版本中逐渐移除了对旧架构的支持。CUDA 12.x版本已经不再支持较老的架构(如compute_35)。在示例代码的Makefile中,指定了一系列的架构(从compute_35到compute_90),而CUDA 12.8无法识别compute_35,因此报错。 解决方案: 我们需要修改Makefile,移除不再支持的架构(特别是compute_35到compute_52可能都需要检查,因为CUDA 12.8已经不支持这些较老的架构)。我们可以只保留当前CUDA版本支持的架构,或者只保留我们当前GPU所支持的架构。 步骤: 1. 打开Makefile文件(位于当前目录下)。 2. 找到指定`-gencode`参数的行(在错误信息中显示的那行命令)。 3. 移除不支持的架构(如compute_35, compute_37, compute_50, compute_52等)。我们可以根据CUDA 12.8支持的架构来调整。 根据NVIDIA官方文档,CUDA 12.x支持的计算能力从6.0(Pascal)开始,但更详细的支持情况需要参考文档。实际上,CUDA 12.0移除了对Maxwell(5.0, 5.2)及更早架构的支持。因此,我们需要移除所有低于6.0的架构。 修改建议: 将原来的: -gencode arch=compute_35,code=sm_35 -gencode arch=compute_37,code=sm_37 -gencode arch=compute_50,code=sm_50 -gencode arch=compute_52,code=sm_52 等等 改为只保留支持的架构,例如从sm_60开始。 但是,注意示例中还包括了较新的架构(如sm_86, sm_90),这些是支持的,所以保留。 因此,修改后的编译选项可能如下(移除compute_35, compute_37, compute_50, compute_52): -gencode arch=compute_60,code=sm_60 -gencode arch=compute_61,code=sm_61 -gencode arch=compute_70,code=sm_70 -gencode arch=compute_75,code=sm_75 -gencode arch=compute_80,code=sm_80 -gencode arch=compute_86,code=sm_86 -gencode arch=compute_90,code=sm_90 -gencode arch=compute_90,code=compute_90 4. 保存Makefile,然后重新运行`make`。 另外,我们也可以考虑只编译当前GPU支持的架构。可以通过`nvidia-smi -q`命令查看当前GPU的计算能力,然后只指定该架构,以加快编译速度。 如果不想修改Makefile,也可以临时覆盖Makefile中的配置。例如,在命令行中指定ARCH参数(如果Makefile支持): make SMS="60 61 70 75 80 86 90" 但是,由于这个Makefile可能没有提供这样的变量,所以直接修改Makefile可能是最直接的方法。 如果上述方法不行,还可以尝试直接修改编译命令,在make时指定ARCH: make TARGET_ARCH= -gencode arch=compute_60,code=sm_60 ... (但这样比较麻烦) 因此,推荐直接修改Makefile。 操作: 使用文本编辑器打开Makefile,找到包含`-gencode`的那一行(在错误信息中显示的那行),然后移除不支持的架构。 注意:在Makefile中,该行可能被拆分成多行,我们需要确保修改正确。 如果修改后仍然报错,可能是还有其他地方指定了架构,需要一并修改。 另外,如果我们的GPU是较新的(比如RTX 3080,计算能力为8.6),我们可以只保留我们需要的架构,例如: -gencode arch=compute_86,code=sm_86 或者保留从60到90的架构(但跳过不支持的),这样编译的程序可以支持更多GPU。 重新尝试编译。 如果问题依旧,请检查CUDA版本和GPU架构的兼容性。 另外,我们也可以尝试更新示例代码。因为当前使用的是CUDA 11.8的示例(从路径`cuda-samples-11.8`可以看出),而CUDA工具包是12.8。可能示例代码较老,建议使用与CUDA工具包版本匹配的示例代码。 因此,另一个解决方案是下载与CUDA 12.8配套的示例代码(通常位于`/usr/local/cuda/samples`,或者可以从NVIDIA官网下载对应版本的示例),然后编译。 总结: 方法1:修改Makefile,移除不支持的架构(特别是低于6.0的)。 方法2:使用与当前CUDA版本匹配的示例代码。 建议优先使用方法1,如果不行再尝试方法2。 现在,我们按照方法1修改Makefile。 注意:修改前备份Makefile。 步骤: 1. 打开Makefile,找到包含`-gencode`的行(可能是在变量`NVCCFLAGS`中)。 2. 删除所有不支持的架构(compute_35, compute_37, compute_50, compute_52)。 3. 保存并重新运行`make`。 如果修改后编译成功,则问题解决。 如果问题仍然存在,请检查是否还有其他的`-gencode`参数指定了不支持的架构,或者尝试只保留一个当前GPU的架构进行编译。 另外,也可以尝试清除之前编译的中间文件: make clean make 如果以上方法都不行,建议使用方法2:使用与CUDA 12.8配套的示例代码。 如何获取CUDA 12.8的示例代码? 通常,安装CUDA工具包时,可以选择安装示例。如果之前没有安装,可以重新运行CUDA安装程序,并选择安装示例。或者,从NVIDIA官方网站下载对应版本的示例代码。 下载地址:https://github.com/NVIDIA/cuda-samples 选择与CUDA版本匹配的分支(如v12.8),然后下载并编译。 希望以上方法能够解决问题。</think>### 问题分析 在编译 CUDA 示例程序 `deviceQuery` 时出现错误 `nvcc fatal: Unsupported gpu architecture 'compute_35'`,原因是 CUDA 12.8 已不再支持较旧的 GPU 架构(如 Maxwell 架构的 compute_35)。以下是解决方案: ### 解决方法 #### 方案 1:修改 Makefile(推荐) 1. **定位 Makefile** 在 `1_Utilities/deviceQuery` 目录下找到 `Makefile` 文件。 2. **移除旧架构参数** 删除或注释掉不再支持的架构(compute_35/37/50/52),保留较新架构(如 sm_60+)。修改后代码示例: ```makefile # 原始行(含不支持的架构): # -gencode arch=compute_35,code=sm_35 -gencode arch=compute_37,code=sm_37 ... # 修改后(保留支持的架构): GENCODE_FLAGS += -gencode arch=compute_60,code=sm_60 GENCODE_FLAGS += -gencode arch=compute_61,code=sm_61 GENCODE_FLAGS += -gencode arch=compute_70,code=sm_70 GENCODE_FLAGS += -gencode arch=compute_75,code=sm_75 GENCODE_FLAGS += -gencode arch=compute_80,code=sm_80 GENCODE_FLAGS += -gencode arch=compute_86,code=sm_86 GENCODE_FLAGS += -gencode arch=compute_90,code=sm_90 ``` 3. **重新编译** ```bash make clean && make ``` #### 方案 2:覆盖编译参数(临时方案) 直接指定支持的架构(如 RTX 3080 对应 sm_86): ```bash make SMS=86 # 将 86 替换为你的 GPU 计算能力版本 ``` > 通过 `nvidia-smi -q` 查看 GPU 的 `Compute Capability` 版本。 #### 方案 3:更新 CUDA Samples 使用 CUDA 12.8 配套的示例代码(避免版本冲突): ```bash cp -r /usr/local/cuda/samples ~/cuda-samples-12.8 # 复制官方示例 cd ~/cuda-samples-12.8/Samples/deviceQuery make ``` ### 验证结果 成功编译后运行: ```bash ./deviceQuery ``` 将输出 GPU 设备详细信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑不溜秋的

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值