第一章:CUDA开发环境搭建
说实话,很多初学者一上来就急着写核函数,结果环境没配好,折腾半天连个deviceQuery都跑不通。我当年也踩过这个坑——装完驱动发现CUDA版本不匹配,编译报错一堆,心态直接崩了。
这一章,咱们就把环境搭建这件事彻底讲明白。你跟着我的步骤走,保证半小时内跑通第一个CUDA程序。
1.1 硬件准备:你得有块NVIDIA显卡
这是前提条件。没有NVIDIA显卡,CUDA玩不转。
我个人习惯用nvidia-smi命令查看显卡信息。打开终端(Windows下是CMD或PowerShell),输入:
nvidia-smi
如果能看到类似下面的输出,说明驱动已经装好了:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.85.05 Driver Version: 525.85.05 CUDA Version: 12.0 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 Tesla T4 Off | 00000000:00:1E.0 Off | 0 |
| N/A 34C P8 10W / 70W | 0MiB / 15360MiB | 0% Default |
+-----------------------------+----------------------+----------------------+
这里要注意:驱动版本和CUDA版本是绑定的。比如驱动是525.85.05,它最高支持CUDA 12.0。你装CUDA 12.1就不行。
我曾经遇到过这样的情况:笔记本有双显卡(集显+独显),CUDA程序默认跑在集显上,结果报错说找不到CUDA设备。解决办法是在NVIDIA控制面板里,把CUDA程序指定为「高性能NVIDIA处理器」。
1.2 安装NVIDIA驱动
如果你的机器还没装驱动,或者版本太旧,先去官网下载。
驱动下载地址:https://www.nvidia.com/Download/index.aspx
选对型号就行。我建议选「Studio Driver」而不是「Game Ready Driver」——前者更稳定,适合开发。
安装过程很简单,一路下一步。但有个细节:安装类型选「自定义(高级)」,然后勾选「执行清洁安装」。这样能避免旧驱动残留导致的问题。
装完驱动重启后,再用
nvidia-smi确认一下。如果显示正常,驱动这步就过了。
1.3 安装CUDA Toolkit
驱动搞定后,接下来装CUDA Toolkit。它包含了编译器nvcc、CUDA运行时库、以及各种开发工具。
下载地址:https://developer.nvidia.com/cuda-downloads
选你的操作系统和安装方式。Windows下我推荐用exe (local),别用network版——网络不好容易中断。
安装时注意:
- 不要修改默认路径,除非你很清楚自己在做什么
- 安装过程中会提示是否安装驱动组件——取消勾选,因为我们已经装好了
- 安装完成后,环境变量会自动配置。但有时候会漏掉,建议手动检查一下
检查环境变量:
# Windows下,在系统变量中确认以下路径存在
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.0\bin
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.0\libnvvp
验证安装:
nvcc --version
如果输出类似:
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2023 NVIDIA Corporation
Built on Wed_Nov_22_10:17:15_PST_2023
Cuda compilation tools, release 12.0, V12.0.140
恭喜,CUDA Toolkit装好了。
CUDA Toolkit版本必须 ≤ 驱动支持的CUDA版本。比如驱动支持12.0,你装11.8或12.0都可以,但不能装12.1。
1.4 安装cuDNN
cuDNN是NVIDIA的深度学习加速库。如果你只做通用GPU计算,可以不装。但做深度学习相关开发,它是必需品。
下载cuDNN需要注册NVIDIA开发者账号,免费。
下载地址:https://developer.nvidia.com/cudnn
选对应CUDA版本的cuDNN。比如CUDA 12.0,就选cuDNN for CUDA 12.x。
安装步骤:
- 下载后解压,得到
bin、include、lib三个文件夹 - 把这几个文件夹里的内容,分别复制到CUDA Toolkit安装目录的对应文件夹下
- 默认路径是:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.0
说白了就是合并目录。复制时如果提示覆盖,选「是」就行。
我习惯把cuDNN的版本号记下来。比如
cuDNN 8.9.0 for CUDA 12.0。这样以后排查问题时,能快速确认版本匹配情况。
1.5 配置开发环境:VS与CMake
环境搭好了,接下来配置IDE。我主要讲两种方式:Visual Studio和CMake。
1.5.1 Visual Studio配置
如果你用VS,CUDA Toolkit安装时会自动集成。新建项目时,你会看到「CUDA」模板:
新建项目 → 选择「CUDA 12.0 Runtime」模板 → 命名项目 → 创建
如果没有这个模板,说明集成没成功。手动配置也不难:
- 右键项目 → 属性 → 配置属性 → VC++目录
- 在「包含目录」中添加:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.0\include - 在「库目录」中添加:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.0\lib\x64 - 链接器 → 输入 → 附加依赖项,添加:
cudart.lib
嗯,这样手动配一次,后面就不用再操心了。
1.5.2 CMake配置
我个人更推荐CMake,跨平台、灵活。写个CMakeLists.txt:
cmake_minimum_required(VERSION 3.18)
project(CUDA_Demo)
# 启用CUDA支持
enable_language(CUDA)
# 添加可执行文件
add_executable(main main.cu)
# 设置CUDA架构(根据你的显卡调整)
set_target_properties(main PROPERTIES
CUDA_ARCHITECTURES "75" # Turing架构,如RTX 2080
)
# 链接CUDA运行时库
target_link_libraries(main PRIVATE cudart)
然后执行:
mkdir build
cd build
cmake ..
cmake --build .
搞定。CMake会自动找到CUDA Toolkit的位置。
我曾经在CMake配置上栽过跟头——
CUDA_ARCHITECTURES没设置,结果编译出来的程序在旧显卡上跑不了。记住:这个参数要填你目标显卡的计算能力(Compute Capability)。比如RTX 3090是8.6,Tesla T4是7.5。
1.6 验证环境:跑第一个CUDA程序
环境配好了,写个最简单的程序验证一下:
#include <stdio.h>
int main() {
int deviceCount;
cudaGetDeviceCount(&deviceCount);
printf("检测到 %d 个CUDA设备\n", deviceCount);
for (int i = 0; i < deviceCount; i++) {
cudaDeviceProp prop;
cudaGetDeviceProperties(&prop, i);
printf("设备 %d: %s\n", i, prop.name);
printf(" 计算能力: %d.%d\n", prop.major, prop.minor);
printf(" 显存大小: %.2f GB\n", prop.totalGlobalMem / 1024.0 / 1024.0 / 1024.0);
}
return 0;
}
编译运行,如果能看到显卡信息,说明环境搭建成功。
环境搭建的四个步骤:驱动 → CUDA Toolkit → cuDNN(可选) → IDE配置。每一步都有坑,但按我的步骤来,基本不会出问题。
1.7 知识体系总览
下面这张图,把本章的核心逻辑串起来了:
这张图很直观:四个步骤按顺序走,每一步都依赖上一步。版本匹配是贯穿始终的红线。
好了,环境搭建就讲到这里。你按这个流程走一遍,基本不会出问题。如果遇到报错,别慌——多半是版本不匹配或者环境变量没配好。回头检查一下,很快就能搞定。