2024年9月20日

型号后面的数字命名,分成两个阶段。第一阶段是Maxwell及Maxwell以前。这个阶段游戏卡和计算卡还没有区分核心,比如M40和Titan X都是GM200核心,3072CUDA。

第二个阶段是Pascal和Pascal以后。这一阶段计算GPU和主流GPU分离,GP100相比主流GP102保留了完整双精度并配备HBM显存。这时候数字“100”代表旗舰产品,比如Tesla P100就是完整规格的GP100。像P10、P40这种就是主流GPU GP102造的计算卡,双精度性能只有1:32,和1:2的P100差距几十倍。

Kepler核心的Tesla系列有后缀字母,一般是区分被动散热和主动散热(K20C、K40C是涡轮风扇主动散热),以及核心规格(K20C/K20M是2496CUDA,K20X有2688CUDA)。除此以外就是显存和封装差异,比如SXM插座和PCIe插卡、40GB显存和80GB显存之类的。

看架构吧,英伟达对其GPU架构进行了代号命名,通常以科学家的名字进行命名,Pascal、Volta Ampere等架构。未来出来个Hsue-shen Tsien也是极其有可能的。

2020 年 5 月 14日,NVIDIA 创始人兼首席执行官黄仁勋在自家厨房直播带货,哦不对应该是 NVIDIA GTC 2020 主题演讲中热情洋溢地介绍了新鲜出炉的基于最新 Ampere 架构的 NVIDIA A100 GPU,号称史上最豪华的烧烤。

从 NVIDIA 发布会内容以及中能看到一些令人震惊的数字,今天我们来解密这些数字是怎么计算得到的。为此我们需要深入 GPU 架构一探究竟。

从图片看到 GeForce 256 衣着相当简朴,完全看不到 RTX 3090 的贵族气质,显示输出口仅支持 VGA,显存 32 MB,另外和主机的接口是早已不见踪影的 AGP,支持的图形 API 为 DirectX 7.0、OpenGL 1.2,目前主流游戏都跑不动,放到现在只能当摆设。

渲染流水线中可被程序员控制的部分有两处:Geometry Processing 和 Pixel Processing,前者处理几何坐标变换,涉及矩阵乘计算;后者处理图像像素,涉及插值计算。有一些对科学有执着追求的人们试图用渲染流水线做一些除了打游戏之外更为正经的工作。于是,他们把计算输入数据伪造成顶点坐标或纹理素材,把计算机程序模拟为渲染过程,发挥异于常人的聪明才智,使用 OpenGL/DirectX/Cg 实现各类数值算法,将显卡这个为游戏做出突出贡献的可造之材打造为通用并行计算的利器,此时的 GPU 被赋能了更多工作内容,称作 GPGPU(General Purpose GPU)。

从事 GPGPU 编程的程序员十分苦逼,既要懂图形 API、GPU 架构,还要把各个领域算法摸清楚翻译为顶点坐标、纹理、渲染器这些底层实现,十分难以维护,今天一气呵成的代码,明天就形同陌路。程序如有 bug,调试工具奇缺,只能靠运气和瞪眼法。

为了彻底解放生产力,提高编程效率,NVIDIA 在 2006 年引入统一图形和计算架构以及 CUDA 工具,从此 GPU 就可以直接用高级语言编程,由程序员控制众多 CUDA 核心完成海量数值计算,GPGPU 业已成为历史。

GeForce 8800 是第一款支持 CUDA 计算的 GPU,核心为 G80,首次将渲染流水线中分离的顶点处理器与像素处理器替换为统一的计算单元,可用于执行顶点/几何/像素/通用计算等程序。G80 首次引入 SIMT(Single-Instruction Multiple-Thread) 执行模型,多个线程在不同计算单元上并发执行同一条指令,引入 barrier 和 shared memory实现线 架构图如下:

每个 SM 内部有 8 个 SP(流处理器,Streaming Processor,后改称 CUDA Core),这是真正干活的单元,可以完成基本数学计算。另外 2 个 绿色方块 SFU 为特殊功能单元,可以快速计算常用数学函数如 sin cos 等。8 个 SP 需要听口号统一行动,互相之间通过 shared memory 传递信息。

G80 架构比较简单,奠定了通用计算 GPU 的基础。接下来的 14 年,NVIDIA GPU 以大约每两年一代的速度逐步升级,配套软件和库也不断丰富起来,CUDA Toolkit 最新已到 11.0。如今 CUDA 生态系统已颇为健壮,涵盖石油探测、气象预报、医疗成像、智能安防等各行各业, GPU 现已成为世界超算中心的标配计算器件。

NV 起名是有讲究的,都是历史上著名物理学家、数学家,特斯拉、费米、开普勒、麦克斯韦、帕斯卡、伏打、图灵、安培,再后面会是牛顿还是爱因斯坦?

总体布局比较中正,八个 GPC 与 L2 Cache 坐落于核心地段,左右为外部存储接口,12 道显存负责与 6 块 HBM2 存储器数据交互,顶部为 PCIe 4.0 负责与主机通信,底部又有 12 条高速 NVLink 通道与其他 GPU 连为一体。

实际上到手的 A100 GPU 是阉割版,相比完整版 GA100 少了一组 GPC 和一组 HBM2。至于为什么,要考虑这个芯片巨大的面积和工艺水平,以及功耗。

GA100 的 SM 架构相比 G80 复杂了很多,占地面积也更大。每个 SM 包括 4 个区块,每个区块有独立的 L0 指令缓存、Warp 调度器、分发单元,以及 16384 个 32 位寄存器,这使得每个 SM 可以并行执行 4 组不同指令序列。4 个区块共享 L1 指令缓存和数据缓存、shared memory、纹理单元。

图中能看出 INT32 计算单元数量与 FP32 一致,而 FP64 计算单元数量是 FP32 的一半,这在后面峰值计算能力中会有体现。

以此类推,可以分别计算得到 A100 不同数值精度、是否稀疏化、Tensor Core ON/OFF 的峰值计算能力。

手动计算较为繁琐,我们也可以通过编写程序自动获取 F c l k 、 N S M F_{clk}、N_{SM}Fclk​、NSM​等参数,经过简单计算得到相应 GPU 的峰值计算能力。关键代码段如下:

发表评论

邮箱地址不会被公开。 必填项已用*标注