第一章:GPU架构基础

大家好,我是你们这趟GPU流水线之旅的向导。说实话,每次讲GPU架构,我都想起自己刚入行时被各种缩写砸晕的日子。SM、CUDA Core、Tensor Core……这些词听着就头大。但别担心,今天咱们就把这些概念一个个掰开揉碎,讲明白。

1.1 GPU发展简史:从图形卡到通用计算

GPU的故事,得从1999年说起。那年NVIDIA发布了GeForce 256,第一次提出了“GPU”这个概念。当时它就是个专门画三角形的硬件,跟CPU各干各的。

转折点出现在2006年。NVIDIA推出了CUDA架构,GPU开始能跑通用计算了。我记得当时在实验室里第一次用GPU做矩阵乘法,速度比CPU快了几十倍,那种震撼到现在还记得。

后来呢?架构越来越复杂。从Fermi到Kepler,再到Volta、Turing、Ampere……每一代都在变。但核心逻辑没变:用大量并行单元,去处理那些可以拆成小块的任务。

关键里程碑:

  • 1999年:GeForce 256,首个GPU
  • 2006年:CUDA架构,通用计算起步
  • 2010年:Fermi架构,引入SM概念
  • 2017年:Volta架构,Tensor Core诞生
  • 2020年:Ampere架构,第三代Tensor Core

1.2 GPU与CPU的区别:一个像卡车,一个像跑车

CPU和GPU的区别,我经常用一个比喻来解释。

CPU就像一辆跑车。它跑得极快,但只能拉一两个人。适合处理那些逻辑复杂、前后依赖的任务——比如操作系统调度、分支预测。

GPU呢?它像一辆大卡车。速度没那么快,但能拉几十吨货。适合处理那些可以并行、重复性高的任务——比如矩阵乘法、图像渲染。

你想想看,CPU有几十个核心,每个核心都很大、很聪明。GPU有几千个核心,每个核心都很小、很笨。但几千个笨核心一起干活,效率反而更高。

我的经验:在项目中,我经常遇到有人想把所有计算都扔给GPU。其实不对。逻辑控制、小数据量的计算,CPU更合适。只有那些大规模并行计算,才值得搬到GPU上。

1.3 GPU核心架构:SM、CUDA Core、Tensor Core

好,现在咱们进入核心部分。GPU的架构,说白了就是一堆计算单元的集合。但怎么组织这些单元,各家有各家的门道。

1.3.1 SM:流式多处理器

SM是GPU的基本计算单元。你可以把它理解成一个“小型的计算集群”。每个SM里包含多个CUDA Core、共享内存、寄存器文件、调度器等。

NVIDIA的GPU,就是由一堆SM组成的。比如A100有108个SM,每个SM里有64个FP32 CUDA Core。

我个人习惯把SM比作一个工厂车间。车间里有工人(CUDA Core)、有工具(寄存器)、有公共仓库(共享内存)。车间主任(Warp Scheduler)负责分配任务。

1.3.2 CUDA Core:最基础的工人

CUDA Core就是执行计算的最小单元。每个CUDA Core能执行整数运算、浮点运算、逻辑运算等。

但注意,CUDA Core不是独立的处理器。它必须依附于SM,由SM统一调度。一个SM里的所有CUDA Core,共享指令缓存和调度器。

我曾经踩过一个坑:以为CUDA Core越多性能越好。后来发现,如果程序里分支太多,很多CUDA Core会闲置。嗯,这里要注意,并行计算最怕的就是分支发散。

1.3.3 Tensor Core:AI时代的加速器

Tensor Core是2017年Volta架构引入的。专门用来做矩阵乘法和累加运算。这东西对深度学习来说,简直是神器。

一个Tensor Core可以在一个时钟周期内完成4x4矩阵的乘加运算。而用普通CUDA Core,得拆成很多步。

我建议做AI推理的同学,一定要学会用Tensor Core。它能让你的模型跑得快好几倍。

核心对比:

组件 用途 精度 适用场景
CUDA Core 通用计算 FP32/INT32 传统HPC、图形
Tensor Core 矩阵运算 FP16/BF16/INT8 深度学习训练/推理

1.4 GPU内存层次结构:数据流动的命脉

GPU的内存结构,是性能优化的关键。说白了,数据在哪儿,决定了计算有多快。

从上到下,速度越来越慢,容量越来越大:

  • 寄存器:最快,但每个线程只有几十个。我建议尽量多用寄存器,少用全局内存。
  • 共享内存:同一个Block内的线程共享。延迟很低,但容量有限(通常几十KB)。
  • L1/L2缓存:自动管理,对程序员透明。但别指望它,优化时还是得手动管理。
  • 全局内存:最大的存储空间,但也是最慢的。延迟几百个时钟周期。
  • 常量内存/纹理内存:特殊用途,适合只读数据。

避坑指南:我曾经在项目中,把一个大数组放在全局内存里,每个线程都去随机访问。结果性能惨不忍睹。后来改成先加载到共享内存,再让线程们从共享内存读,速度提升了5倍。记住:全局内存的随机访问,是性能杀手。

1.5 本章知识体系总览

下面这张图,是我自己画的GPU架构知识体系。你可以把它当作一个地图,后面讲到具体优化时,随时回来对照。

GPU架构知识体系 GPU vs CPU 并行计算 vs 串行计算 | 大量简单核心 vs 少量复杂核心 GPU核心架构 SM(流式多处理器) 基本计算单元 CUDA Core 通用计算核心 Tensor Core 矩阵加速核心 GPU内存层次结构 寄存器 最快,容量最小 共享内存 低延迟,手动管理 L1/L2缓存 自动管理 全局内存 最慢,容量最大 常量/纹理 特殊用途 优化目标:最大化吞吐量,最小化延迟

这张图把GPU架构分成了四个层次。从最上层的CPU/GPU对比,到核心架构,再到内存层次,最后落到优化目标。每一层都环环相扣。

好了,第一章的内容就到这里。记住:理解架构是优化的前提。后面我们会深入到每个细节,看看怎么让GPU真正跑起来。


公众号:蓝海资料掘金营,微信deep3321