新手必看:三步走进 CUDA 编程。
目录
如果你是 CUDA 新手,按顺序读完这三章,你就能写出第一个 kernel。
认识 CUDA #
CUDA(全称 Compute Unified Device Architecture,统一计算设备架构) 是 NVIDIA 在 2006 年推出的通用 GPU 编程模型—— 让你能用接近 C/C++ 的语法,直接在 GPU 上调度成千上万个线程并行计算。
为什么用 GPU? 一句话:CPU 擅长「快速做完一件事」,GPU 擅长「同时做很多件事」。 一颗现代 GPU 有上万个轻量线程,适合数据并行任务——同一段代码在不同数据上各跑一次。 深度学习、矩阵运算、图像处理、科学模拟全是这种模式,所以这些场景几乎都跑在 GPU 上。
CUDA 不是单一一门语言,而是一整套:
- 编程模型 —— kernel / 线程 / block / grid 这套并行抽象
- 编译器 ——
nvcc,把.cu文件编成能跑的可执行 - 运行时 API ——
cudaMalloc/cudaMemcpy/cudaLaunchKernel,管理 GPU 内存与执行 - 生态库 —— cuBLAS、cuDNN、CUTLASS、Thrust 等,常见操作不用从头写
读完接下来两章你会发现:写一个最简单的 CUDA 程序只需要几十行——难点不在语法, 而是先在脑子里建立「线程怎么分配、数据怎么搬」这个并行模型。
一句话总结:CUDA = 用 C/C++ 风格的代码,让 GPU 并行跑一个函数。
安装环境 #
CUDA 装环境分两步:装驱动 + 装 Toolkit。两个都过了 nvidia-smi 和 nvcc --version 这两道关,就能开始写 kernel。
你需要什么
- 一张 NVIDIA GPU(2014 之后的卡基本都支持)
- 一个能装 NVIDIA 驱动的系统:Linux(推荐 Ubuntu)、Windows 10/11、或 Windows 上的 WSL2
- 没显卡?用云上 GPU 实例(Vast.ai / Lambda / 阿里云 / AWS EC2 G 系列)开一台远程机器,按小时付费,初学最划算
Apple Silicon 没有 NVIDIA,Intel Mac 2018 后也停了 CUDA 支持。想本地学 CUDA,要么换 Linux,要么用远程机器。
装哪两个东西
- NVIDIA 驱动 —— 让 OS 能看到并控制 GPU。系统包管理器(
apt install nvidia-driver-XXX)或 NVIDIA 官网都行 - CUDA Toolkit —— 编译器
nvcc+ 运行时库 + 头文件。去 developer.nvidia.com/cuda-downloads 按你的系统选版本,按官网给的命令一步步走最稳
装完把 nvcc 加进 PATH(写到 ~/.bashrc 或 ~/.zshrc):
export PATH=/usr/local/cuda/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH两条命令验装好
nvidia-smi # 看到 GPU 表 + 驱动版本 → 驱动 OK
nvcc --version # 看到 CUDA 版本号 → 编译器 OK两条都过了,就可以进下一章写代码了。
Hello, CUDA #
第一个 CUDA 程序——完整的 hello.cu:
#include <stdio.h>
__global__ void hello() {
printf("Hello, CUDA from thread %d\n", threadIdx.x);
}
int main() {
hello<<<1, 8>>>();
cudaDeviceSynchronize();
return 0;
}编译并运行:
nvcc hello.cu -o hello
./hello应该看到 8 行 Hello, CUDA from thread N(顺序不固定,线程是并行的)。
几个关键字
__global__—— 标记一个 kernel(GPU 上执行、host 上启动的函数)threadIdx.x—— 当前线程的编号<<<1, 8>>>—— 启动 1 个 block × 8 个 thread,一共 8 个线程cudaDeviceSynchronize()—— 等 GPU 干完活再退出,否则main可能在 kernel 输出前就 return 了
跑出来就算入门成功。深入 grid / block / shared memory / warp / 内存模型这些,以后博客和专题里慢慢展开。
下一步 #
读完入门三章,看你想往哪走: