第 1 章:GPU 芯片设计简介
什么是 GPU,它们与 CPU 有何不同
图形处理单元 (GPU) 是专门设计用于快速操作和修改内存以加速图像创建的专用电子电路,这些图像最终将输出到显示设备。GPU 最初是为了从 CPU 卸载 2D 和 3D 图形渲染而开发的,从而为图形密集型应用程序(如视频游戏)提供更高的性能。
而 CPU 是为通用计算而设计的,具有复杂的控制逻辑以支持各种程序,GPU 具有高度并行的架构,由成千上万个更小、更高效的核心组成,专门用于同时处理多个任务。这使它们非常适合于图形渲染,在这里可以并行处理大块数据。
CPU 和 GPU 之间的关键架构差异包括:
- 核心数量:GPU 拥有大量小型核心(数百到数千个),而 CPU 拥有少量大型强大的核心(2-64 个)。
- 缓存层次结构:CPU 拥有大型缓存以降低延迟,而 GPU 拥有较小的缓存并更多地依赖高带宽来弥补延迟。
- 控制逻辑:CPU 具有复杂的分支预测和乱序执行功能。GPU 的控制逻辑要简单得多。
- 指令集:CPU 支持广泛的通用计算指令。GPU 指令集更有限,针对图形进行了优化。
- 内存带宽:GPU 拥有非常高的内存带宽(高达 1 TB/s)以为其众多核心提供服务。CPU 的带宽较低(50-100 GB/s)。
- 浮点性能:GPU 的浮点性能要高得多,使其非常适合于高性能计算和人工智能工作负载。
总之,GPU 的高度并行架构使它们擅长处理可以并行处理的大块数据任务,而 CPU 更复杂的控制逻辑使它们更适合于通用计算。以下是该 Markdown 文件的中文翻译。对于代码部分,我只翻译了注释,而没有翻译代码本身。
GPU 的关键应用和重要性
在过去的两个十年里,GPU 已经成为最重要的计算技术之一,因为它们的高度并行结构使它们比通用 CPU 更有效地处理并行处理大块数据的算法。推动 GPU 技术快速发展的一些关键应用领域包括:
计算机图形学和游戏
GPU 最常见的用途是加速在帧缓冲区中创建图像,这些图像用于输出到显示设备。GPU 擅长操作计算机图形和图像处理,其高度并行的结构使它们比通用 CPU 更有效地处理并行处理大块数据的算法。它们是现代游戏主机和游戏 PC 的标准组件。
高性能计算 (HPC)
GPU 的并行处理能力使它们非常适合涉及处理非常大型数据集的并行算法的科学计算应用。GPU 已广泛应用于超级计算机和 HPC 集群,它们与 CPU 协作,加速诸如天气预报、分子动力学模拟和地震分析等高度并行的工作负载。
人工智能和机器学习
GPU 的并行处理能力在近年来深度学习和 AI 的快速发展中发挥了关键作用。训练复杂的深度神经网络需要大量的计算能力,而 GPU 由于能够高效地执行深度学习算法核心的矩阵乘法运算,已成为训练大规模 AI 模型的首选平台。所有主要的云 AI 平台和用于 AI 的超级计算机都使用 GPU。今天的电子搜索大量依赖于 GPU。
加密货币挖掘
GPU 也被广泛用于加密货币挖掘,因为它们的并行处理能力使它们非常适合用于基于工作证明的加密货币(如比特币)使用的加密哈希算法。在 2017 年加密货币繁荣期间,AMD 和 Nvidia 的高端 GPU 需求量非常大。
加速计算和边缘 AI
随着摩尔定律的放缓,出现了一个主要趋势,即加速、异构计算,专用加速器芯片(如 GPU)与 CPU 并行工作以加速高需求的工作负载。GPU 也被用于将 AI 功能引入智能手机、智能扬声器和汽车系统等边缘设备。移动 SoC 现在通常集成了用于图形和加速 AI 工作负载的 GPU。
GPU 的大规模并行性和高内存带宽使其成为当今最重要的计算平台之一,其应用远远超出了计算机图形。随着我们达到通用处理器的性能极限,专用芯片如 GPU、FPGA 和 AI 加速器正变得越来越重要的未来计算引擎。
计算加速器的格局
随着近年来通用 CPU 性能提升放缓,出现了一种越来越多使用专用加速器芯片来加速特定工作负载的趋势。GPU 是最突出的加速器之一,但还有几个其他重要类别:
现场可编程门阵列 (FPGA)
FPGA 是基于可配置逻辑块 (CLB) 矩阵和可编程互连的半导体设备。FPGA 可以在制造后重新编程以满足所需的应用程序或功能要求,提供了一种更灵活的 ASIC 替代方案。它们通常用于航空航天和国防、ASIC 原型制作、医疗成像等领域。衰老、计算机视觉、语音识别和密码学
专用集成电路 (ASIC)
ASIC 是为特定用途而定制的集成电路,而不是像 CPU 那样用于通用目的。现代 ASIC 通常包含整个 32 位或 64 位处理器、包括 ROM、RAM、EEPROM、闪存在内的内存块以及其他大型构建块。ASIC 通常用于比特币挖矿、AI 加速器、5G 无线通信和物联网设备。
AI 加速器
AI 加速器是专门设计用于加速 AI 工作负载(特别是神经网络训练和推理)的芯片。例子包括 Google 的张量处理单元 (TPU)、英特尔的 Nervana 神经网络处理器 (NNP) 以及一些从头开始构建 AI 芯片的初创公司。这些芯片利用了降低精度的数学运算、高效的矩阵乘法电路以及计算和内存的紧密集成,在 AI 工作负载上实现了比 GPU 或 CPU 高得多的每瓦性能。
视觉处理单元 (VPU)
VPU 是专门为加速计算机视觉和图像处理工作负载而设计的芯片。它们通常包含专用硬件来执行图像信号处理、立体视觉和基于 CNN 的目标检测等任务。VPU 通常用于汽车 ADAS、无人机、AR/VR 头显、智能摄像头和其他需要低延迟视觉处理的边缘设备。
神经形态和量子芯片
展望未来,神经形态芯片试图模仿大脑的架构来提供快速和高能效的神经网络性能,而量子芯片利用量子力学效应来解决某些问题,速度比经典计算机快。这些仍然是新兴的研究领域,但未来可能成为重要的加速器。
总的趋势是计算向专用架构和多样化的加速器发展,这些加速器与通用 CPU 集成在一起,以加速各种工作负载。重要的工作负载。 GPU 开创了这种加速计算模型,仍然是最重要的加速器类型之一,但各种其他加速器也正变得越来越关键,应用于许多领域。
GPU 硬件基础
现代 GPU 由几个关键硬件组件组成:
流式多处理器 (SM)
SM 是 NVIDIA GPU 架构的基本构建块。每个 SM 包含一组 CUDA 核心(通常为 64 到 128 个),它们共享控制逻辑和指令缓存。每个 CUDA 核心都有一个完全流水线化的整数算术逻辑单元 (ALU) 和浮点单元 (FPU)。通常,一个 GPU 芯片有 16 到 128 个 SM,总共有数千个 CUDA 核心。
纹理/L1 缓存
每个 SM 都有专用的纹理缓存和 L1 缓存,以提高性能并减少内存流量。纹理缓存旨在优化空间局部性,对图形工作负载特别有效。L1 缓存处理内存操作(加载、存储),提供低延迟的快速数据访问。
共享内存
共享内存是一种快速的片上内存,在 SM 内的 CUDA 核心之间共享。它可以用作可编程缓存,从而实现更高的带宽和更低的延迟访问频繁重用的数据。共享内存被划分为大小相等的内存模块(银行),可以由核心同时访问。
寄存器文件
每个 SM 都有一个大型寄存器文件,为操作数提供低延迟存储。寄存器文件在驻留的线程之间进行划分,为每个线程提供专属的寄存器集。访问寄存器通常不需要额外的时钟周期,但可能会由于寄存器读写依赖和寄存器内存银行冲突而产生延迟。
线程调度器
线程调度器负责管理和调度 SM 上的线程。一个线程束是 32 个并发执行的线程,在 CUDA 核心上执行。这个调度器选择准备好执行的线程束(warp)并将它们分派到核心上,从而实现高利用率和延迟隐藏。
互连网络
互连网络将 SM 连接到 GPU 的共享 L2 缓存和内存控制器。它通常被实现为交叉开关,允许多个 SM 同时访问 L2 缓存和 DRAM。
内存控制器
内存控制器处理对 GPU DRAM 的所有读写请求。它们负责优化 DRAM 访问模式,以最大化带宽利用率。现代 GPU 具有非常宽的 DRAM 接口(256 位到 4096 位),并支持 GDDR6 和 HBM2 等高带宽内存技术。
RT 核心和 Tensor 核心
现代 NVIDIA GPU 还包括用于加速光线追踪(RT 核心)和 AI/深度学习(Tensor 核心)的专用硬件单元。RT 核心加速包围体积层次(BVH)遍历和光线-三角形相交测试,而 Tensor 核心提供高吞吐量的矩阵乘法和卷积运算。
这些硬件组件协同工作,使 GPU 能够实现非常高的计算吞吐量和内存带宽,使它们非常适合于图形、高性能计算和 AI 等并行工作负载。现代 GPU 的高度并行架构和专用硬件单元使它们在某些工作负载上的性能远高于通用 CPU。
GPU 发展简史
GPU 的历史可以追溯到 1990 年代早期的 3D 图形加速:
-
1990 年代: 像 3dfx Voodoo 和 NVIDIA RIVA TNT 这样的早期 3D 加速器在 1990 年代中期出现,用于将 3D 图形渲染从 CPU 卸载。这些是针对特定图形 API 优化的固定功能设备,缺乏可编程性。
-
1999 年: NVIDIA 推出了 GeForce 256,这是第一款实现硬件变换和照明(T&L)的 GPU,除了标准的 3D 渲染管线之外,还增加了可编程性。以下是该 Markdown 文件的中文翻译。对于代码部分,我只翻译了注释,而没有翻译代码本身。
-
2001年:NVIDIA 推出了 GeForce 3,它引入了可编程的顶点和像素着色,为更加逼真和动态的视觉效果开辟了道路。这标志着从固定功能到可编程图形管线的转变开始。
-
2006年:NVIDIA 的 GeForce 8800 GTX 的发布标志着一个重要转折点,因为它是第一款支持 CUDA 编程模型的 GPU,使开发者能够将 GPU 用于通用计算(GPGPU),而不仅仅是图形处理。它拥有 128 个 CUDA 核心,可以达到 500 GFLOPS 的性能。
-
2008年:苹果、AMD、英特尔和 NVIDIA 成立了 OpenCL 工作组,以开发一个用于异构系统并行编程的开放标准。OpenCL 为 CUDA 提供了一个供应商无关的替代方案,尽管 CUDA 仍然是最广泛使用的 GPGPU 平台。
-
2010年:NVIDIA 推出了 Fermi 架构,它最多可拥有 512 个 CUDA 核心,具有统一的 L1/L2 缓存层次结构、ECC 内存支持和改进的双精度性能。这使 GPU 可以应用于更广泛的 HPC 和科学计算应用。
-
2016年:NVIDIA 推出了 Pascal 架构,搭载 Tesla P100,它采用了高带宽 HBM2 内存,最多可拥有 3584 个 CUDA 核心,并具有专门的 FP16 核心用于深度学习。P100 可以提供超过 10 TFLOPS 的性能,将 GPU 确立为 AI 训练的首选平台。
-
2018年:NVIDIA 推出了 Turing 架构,它引入了 RT 核心用于实时光线追踪,以及 Tensor 核心用于加速 AI 推理。Turing 标志着 GPU 架构的重大里程碑,因为它将 GPU 的功能扩展到了光栅化和 GPGPU 之外,包括先进的渲染技术和 AI 加速。
结论
在过去二十年里,GPU 已经从固定功能的图形加速器发展成为高度可编程的设备,能够用于广泛的计算应用,包括图形渲染、通用计算和人工智能。这种转变标志着 GPU 在计算领域的重要地位日益凸显。可编程、节能的计算引擎在从游戏和可视化到高性能计算和人工智能的广泛应用中发挥着关键作用。推动这一转变的关键架构创新包括:
- 引入支持分支和循环的可编程着色
- 统一的着色器架构,允许使用相同的处理单元执行不同的着色任务
- 添加对CUDA和OpenCL等通用编程模型的支持
- 通过广泛使用多线程来隐藏内存延迟并保持算术单元利用率,从而提高能源效率
- 内存带宽的持续改进以及GDDR6和HBM2等高带宽内存技术的引入
- 集成用于光线追踪和张量处理的固定功能单元,以加速渲染和AI工作负载
展望未来,专业化和异构计算显然将继续成为提高性能和效率的关键驱动力。鉴于其能源高效的并行处理传统以及在保持通用编程能力的同时纳入特定领域功能的能力,GPU有望继续处于这些趋势的前沿。基于芯片组的设计和先进的封装技术将使GPU能够扩展到更高的性能水平,并随时间集成更多功能。
与此同时,随着越来越多的科学计算、数据分析和机器学习工作负载展现出GPU擅长的细粒度并行性,GPU加速的适用性也在不断增加。凭借其加速这些和其他新兴应用的能力,GPU有望在推动未来计算发展中发挥越来越重要的作用。了解它们的架构是释放其全部潜力的关键。