第1章:CUDA开发环境搭建
说实话,很多初学者一上来就急着写核函数,结果连环境都没配好,编译报错一堆。我见过太多人卡在这一步了。今天咱们就把CUDA开发环境从头到尾捋一遍,保证你配完就能跑起来。
1.1 NVIDIA驱动安装
驱动是GPU和操作系统之间的桥梁。没有它,你的CUDA程序根本没法跟显卡通信。
第一步:确认你的显卡型号
在终端里敲这个命令:
lspci | grep -i nvidia
或者用Windows的话,打开设备管理器,在「显示适配器」里就能看到。我个人习惯先查一下显卡是否支持CUDA——去NVIDIA官网看CUDA兼容列表就行。
第二步:下载对应驱动
去NVIDIA官网,选你的显卡型号和操作系统。别乱下,版本不对会出问题。
第三步:安装驱动
Linux下我建议用.run文件安装:
chmod +x NVIDIA-Linux-*.run
sudo ./NVIDIA-Linux-*.run
Windows就简单了,双击下一步到底。
装完后验证一下:
nvidia-smi
如果能看到GPU信息,比如型号、显存、驱动版本,那就成了。
1.2 CUDA Toolkit下载与安装
驱动只是基础,真正写CUDA代码还得靠Toolkit。它包含了编译器、库、调试工具等一堆好东西。
下载地址:NVIDIA官网的CUDA Toolkit页面。选你的操作系统和版本。
我个人建议选LTS版本,稳定。别追新,新版本有时候有坑。
Linux安装:
sudo sh cuda_*.run
安装时它会问你要不要装驱动——如果你已经装好了,就选No。不然可能会覆盖掉你现有的驱动。
Windows安装:
双击exe,一路下一步。注意选自定义安装,把Visual Studio集成勾上——如果你用VS的话。
1.3 环境变量配置
装完Toolkit,系统还不知道它在哪。你得告诉它。
Linux下:
编辑 ~/.bashrc 或 ~/.zshrc,加上这几行:
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export CUDA_HOME=/usr/local/cuda
然后 source 一下:
source ~/.bashrc
Windows下:
右键「此电脑」→ 属性 → 高级系统设置 → 环境变量。在系统变量里加:
- CUDA_PATH: C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.x
- PATH 里加上 %CUDA_PATH%\bin 和 %CUDA_PATH%\libnvvp
1.4 nvcc编译器验证
环境配好了,咱们试试能不能编译。nvcc就是CUDA的编译器。
打开终端,敲:
nvcc --version
如果看到版本号,说明环境变量配对了。
再写个最简单的程序试试:
// hello.cu
#include <stdio.h>
__global__ void hello() {
printf("Hello from GPU!\n");
}
int main() {
hello<<<1, 1>>>();
cudaDeviceSynchronize();
return 0;
}
编译:
nvcc hello.cu -o hello
运行:
./hello
如果看到「Hello from GPU!」,恭喜你,环境搭好了。
1.5 Nsight工具介绍
写CUDA程序,光靠printf调试可不行。Nsight是NVIDIA官方提供的调试和性能分析工具,说白了就是帮你找bug和瓶颈的。
Nsight有几个版本:
| 工具 | 用途 | 适用场景 |
|---|---|---|
| Nsight Systems | 系统级性能分析 | 看CPU/GPU时间线、API调用 |
| Nsight Compute | 核函数级性能分析 | 看SM占用率、带宽、指令效率 |
| Nsight Visual Studio Edition | 集成到VS的调试器 | 断点调试、变量查看 |
我个人最常用的是Nsight Systems。它能把程序的执行时间线画出来,一眼就能看出哪里在等数据、哪里在空转。
举个例子,你写了个矩阵乘法,跑起来发现GPU利用率只有30%。用Nsight Systems一看,哦,原来是CPU在忙着拷贝数据,GPU在干等。那你就知道该优化数据传输了。
知识体系总览
下面这张图把本章的核心逻辑串起来了:
嗯,到这里环境就搭好了。别急着往下学,先跑几个例子试试手。我当年就是急着学核函数,结果环境没配好,浪费了一整天。
记住一句话:工欲善其事,必先利其器。环境搭好了,后面写代码才顺。