跳过正文

新手必看:三步走进 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-sminvcc --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 / 内存模型这些,以后博客和专题里慢慢展开。


下一步 #

读完入门三章,看你想往哪走:

  1. 博客新特性解读、踩坑记录、行业观察
  2. 专题围绕一个主题的连续系列 —— cuda-oxide 等
  3. 速查工作中真正高频用到的命令、API、调试技巧