Menu Close

什么是GPU?一块 GPU 为什么能同时处理数十亿个像素?

一块现代 GPU 可能包含数千个计算单元。但真正的问题并不是“它有多少核心”,而是这些计算单元如何协同工作:它们怎样生成三维图像、渲染游戏画面、处理视频,甚至运行人工智能模型?

CPU 擅长灵活控制、复杂判断和不规则任务;GPU 则围绕另一种目标设计——同时处理海量相似计算。图形渲染正好包含大量可以并行执行的工作,因此 GPU 成为了现代计算机中最重要的加速器之一。

本文将跟随一帧画面,从用户输入、CPU 准备绘制命令开始,一直追踪到 GPU 完成顶点变换、三角形装配、光栅化、像素着色、深度测试、混合以及帧缓冲写入,最后由显示器点亮像素。读完以后,GPU 不再是一个塞满“几千个核心”的神秘黑盒,而是一台组织严密的大规模并行机器。

什么是GPU?一块GPU为什么能每秒处理数十亿个像素?

一、什么是 GPU?

什么是 GPU?

GPU 是 Graphics Processing Unit 的缩写,中文通常译为“图形处理器”。它最初的任务,是把绘制图像所需的大量重复计算从 CPU 手中接过来。

如果没有专门的图形硬件,CPU 就需要亲自计算线条、三角形、颜色和像素。随着图形越来越复杂,这种方式很快就会成为瓶颈。GPU 因此被设计成专门处理图形计算的硬件。

后来,GPU 逐渐变得可编程。开发者可以编写名为“着色器”的小程序,控制顶点、像素、光照、纹理和各种视觉效果。人们随后发现,同一套并行硬件不仅能画图,还能加速科学计算、仿真、视频处理和人工智能

所以,现代 GPU 已经不只是“显卡里的图形芯片”。它本质上是一种并行处理器:在大量数据上反复执行相似的数学运算。

二、为什么图形计算天然适合并行处理?

一个三维场景可能包含数百万个顶点、三角形、纹理采样和像素。令人惊讶的是,其中大量工作彼此相对独立。

一个顶点的位置可以与成千上万个其他顶点同时计算;一个像素的颜色,也可以与数百万个其他像素同时计算。虽然不同顶点和像素使用的数据不同,但执行的数学步骤往往十分相似。

这正是 GPU 的优势所在。它不是依靠少数几个功能极强、控制逻辑极复杂的核心,而是使用许多较小的算术执行单元,让它们共同处理大批相似任务。

图形世界看起来复杂多变,但在硬件底层,常常会被分解成大量重复的加法、乘法、矩阵变换、插值和比较。GPU 的使命,就是让这些重复计算以极高吞吐量并行完成。

为什么图形计算天然适合并行处理?
为什么图形计算天然适合并行处理?

三、GPU 的基本结构

日常交流中,人们说“GPU”时,有时指的是图形处理芯片本身,有时也指整张显卡。

一张独立显卡通常包含 GPU 芯片、显存、供电电路、散热器、风扇、显示输出接口,以及连接主板的 PCI Express 接口。

而在 GPU 芯片内部,则分布着计算单元、缓存、内存控制器、几何处理硬件、光栅化硬件和显示引擎。

这些部分并不是各自为战,而是组成一条协作流水线:有的负责准备几何数据,有的负责计算像素,有的负责移动数据,还有的负责把已经完成的画面发送到显示器。

 

四、流式多处理器与计算单元

NVIDIA GPU 中,大量可编程工作被组织在 Streaming Multiprocessor,也就是流式多处理器之中。AMD 使用的名称通常是 Compute Unit,也就是计算单元。不同架构的内部细节会变化,但基本思想相近。

一个流式多处理器或计算单元,并不是一个放大版 CPU 核心。它更像是一组协同工作的执行资源,其中包含算术单元、寄存器、调度硬件、共享内存,以及加载和存储单元。

NVIDIA 常把许多算术执行通道称为 CUDA Core。但 CUDA Core 并不等于完整的 CPU Core。CPU 核心拥有复杂的控制逻辑、大容量缓存、分支预测和乱序执行能力,可以独立处理复杂指令流。

CUDA Core 更接近大型并行系统中的一条算术执行通道。它依赖整个流式多处理器提供调度、寄存器、内存访问和控制。因此,CUDA 核心数量不能与 CPU 核心数量直接比较。

 

五、线程、Warp 与 Wavefront

GPU 工作的基本单位通常叫作线程。一个线程可以负责变换一个顶点、计算一个像素,或者更新矩阵中的一个元素。

不过,GPU 通常不会一次只调度一个线程,而是把线程组成小组。在 NVIDIA 硬件上,这种线程组叫作 Warp;在 AMD 硬件上,类似的结构叫作 Wavefront。

同一个 Warp 或 Wavefront 中的线程,通常在同一时间执行同一条指令,只是每个线程处理的数据不同。这种方式能让控制硬件服务于大量算术通道,从而减少每条执行通道需要承担的复杂控制成本。

线程还会被组织成更大的集合。CUDA 把它们称为 Thread Block,其他系统可能称为 Work Group。同一组中的线程经常可以共享高速局部内存并相互协作。

GPU 会启动远多于物理执行单元数量的线程,并在许多已经准备好的线程组之间切换,以便尽可能让算术单元保持忙碌。

 

六、图形渲染流水线

现在,让我们跟随一帧画面穿过完整的图形渲染流水线。

首先,CPU 运行游戏逻辑,处理键盘和鼠标输入,更新物理、角色、对象、动画和摄像机,并决定下一帧应该显示什么。

随后,CPUGPU 发送绘制命令,其中描述几何数据、纹理、材质、摄像机、光源和渲染状态。

GPU 的第一个主要可编程阶段通常是顶点处理。顶点着色器把模型内部的顶点位置变换到三维世界,再变换到摄像机视角,最终转换到屏幕空间。

接下来,硬件把顶点装配成几何图元,实时三维图形中最常见的图元就是三角形。然后进入光栅化阶段,将三角形转换为屏幕上的候选片段。

像素着色器计算纹理、光照、阴影和材质效果。深度与可见性测试会剔除被挡住的片段,最终可见的颜色被写入帧缓冲。显示引擎读取完整画面,并将其发送到显示器。

 

七、顶点与三角形

大多数实时三维图形都建立在三角形之上。角色、车辆、建筑和山脉表面看起来可能非常平滑,但它们的底层通常是一张由大量小三角形组成的网格。

三角形之所以重要,是因为三个点总能确定一个平面。它简单、稳定、容易插值,也很适合硬件流水线处理。

三角形的每个角都是一个顶点。一个顶点除了位置以外,还可能携带颜色、纹理坐标、法线方向以及其他属性。

顶点着色器可以旋转模型、移动模型,把它放入三维世界,并将其三维位置投影到二维屏幕。GPU 会同时对大量顶点执行这些变换。

 

八、光栅化:把三角形变成屏幕覆盖区域

三角形是一个数学形状,而显示器是一张像素网格。光栅化的任务,就是把三角形转换成屏幕上的覆盖范围。

光栅器会判断哪些像素位置位于三角形内部,或者与三角形边缘相交。对每一个被覆盖的位置,它都会生成一个片段,也就是 Fragment。

片段并不一定最终成为屏幕像素。它只是对某个像素的候选贡献,随后可能因为被遮挡而被深度测试拒绝,也可能被丢弃,或者与其他结果进行透明混合。

光栅化还会在三角形内部插值顶点属性。如果三个顶点具有不同的纹理坐标、颜色或法线,光栅器会计算中间位置的数值,再交给像素着色器使用。

 

九、着色器:运行在 GPU 上的小程序

着色器是运行在 GPU 上的小程序。它们让开发者能够定义图形数据应该怎样被处理。

顶点着色器负责处理顶点并变换位置;像素着色器,也叫片段着色器,负责计算颜色、纹理细节、光照和透明度;计算着色器则更通用,可以处理数组、粒子、图像滤镜、仿真、物理和人工智能任务。

一个极其简化的着色过程可以概括为:读取位置,应用变换矩阵,读取纹理,计算光照强度,然后写出最终颜色。

真实的着色器可能非常复杂,但核心思想没有改变:同一段程序同时运行在大量顶点或像素上,每个线程只使用不同的输入数据。

 

十、纹理、光照、阴影与反射

几何数据决定物体的形状,纹理和光照则赋予物体细节和真实感。

纹理本质上是存储在内存中的图像或数据贴图。它可以提供颜色、粗糙度、金属属性、表面方向、透明度以及其他材质信息。

光照计算通常会考虑光线方向、表面方向、摄像机位置和材质属性。阴影常通过阴影贴图实现:场景先从光源视角渲染一次,再利用得到的深度信息判断某个表面点能否看到光源。

反射可以使用环境贴图、屏幕空间方法、光线追踪,或多种方法组合。透明物体则需要把前后方可见结果按照一定顺序进行混合。

这些视觉效果都需要执行海量重复计算,因此非常适合由 GPU 处理。

 

十一、显存与内存带宽

一块计算能力强大的 GPU,如果无法及时获得数据,也会陷入等待。因此,内存系统对 GPU 性能至关重要。

GPU 不断读取和写入纹理、几何数据、帧缓冲、深度缓冲、着色器数据以及各种中间结果。这也是独立显卡需要专用高速显存的原因。

许多显卡使用 GDDR 显存,高端计算加速器还可能使用 HBM,也就是 High-Bandwidth Memory,高带宽内存。

显存通过宽总线与 GPU 相连。显存速度和总线宽度共同决定内存带宽,也就是每秒可以移动多少数据。现代高性能工作负载需要每秒数百 GB,甚至超过 1 TB 的数据传输能力。

GPU 内部的寄存器、共享内存和缓存,则负责把常用数据放在更靠近算术单元的位置,尽量减少访问外部显存的高昂代价。

 

十二、GPU 如何隐藏内存延迟?

高带宽并不代表没有延迟。即使显存每秒能传输大量数据,一次具体的数据请求仍然需要时间才能返回。

CPU 常通过大容量缓存、推测执行和乱序执行来减少等待。GPU 采用的主要策略不同:它准备大量线程组。

当一个 Warp 或 Wavefront 正在等待内存时,调度器会立即从另一个已经准备好的线程组发出指令。这样,整个计算单元不必因为某一组线程等待数据而停下来。

这种方法叫作延迟隐藏。GPU 程序通常会启动远多于物理算术单元数量的线程,形成一个巨大的工作池。只要还有其他线程组可以运行,硬件就能用有用计算覆盖内存等待时间。

 

十三、分支发散为什么会降低效率?

同一个 Warp 或 Wavefront 中的线程,如果都执行相同指令,GPU 的利用率通常最高。

但着色器中经常存在 if 判断。例如,明亮区域的像素执行一条路径,黑暗区域的像素执行另一条路径。

如果两种像素恰好位于同一个线程组中,GPU 可能先执行第一条路径,再执行第二条路径。不属于当前路径的线程只能暂时等待。

这种现象叫作 Branch Divergence,也就是分支发散。它会让一部分算术通道在某段时间内处于空闲状态,从而降低效率。

现代 GPU 对分支的处理能力已经比早期架构更强,但基本原则仍然成立:规则、可预测、控制流简单的工作负载,更容易发挥 GPU 的并行能力。

 

十四、计算着色器与通用 GPU 计算

GPU 变得可编程以后,开发者很快开始把它用于图形之外的任务。

科学仿真、图像识别、流体动力学、金融模型和大型数值计算,都可以被分解为大量并行工作。

计算着色器让图形系统内部也能够执行通用并行计算。CUDA、OpenCL 和 DirectCompute 等平台,则进一步把 GPU 变成通用加速器。

程序会把工作分配给大量线程,每个线程处理数据的一小部分。相邻线程还可以通过共享内存协作。

GPU 最擅长的问题通常具有两个特点:可以同时启动大量工作,而且每个线程的控制流程相对简单。

 

十五、为什么 GPU 特别适合人工智能?

现代人工智能高度依赖矩阵乘法。神经网络会反复执行数组乘法、加法以及一些相对简单的函数。

其中一个最基本的操作叫作乘加,也就是 Multiply and Accumulate:先把两个数相乘,再把结果累加到一个累加器中,然后把这个过程重复无数次。

这类工作与 GPU 的并行算术结构高度匹配。现代 GPU 还加入了专门的矩阵执行单元,常被称为 Tensor Core 或 Matrix Core。

人工智能还经常使用十六位、八位甚至更低精度的数据格式。较低精度可以减少内存占用,并让更多运算同时执行。

大规模并行、高内存带宽、成熟的软件工具和专用矩阵硬件结合在一起,使 GPU 成为人工智能训练与推理的重要平台。

 

十六、光线追踪核心、Tensor Core 与其他专用单元

现代 GPU 除了通用着色器单元,还包含许多针对特定任务设计的专用加速器。

光线追踪硬件可以加速射线与几何物体之间的相交测试,从而支持更真实的反射、阴影和光照。

Tensor Core 可以加速矩阵运算,也能支持基于人工智能的图像重建与增强。

视频编码器和解码器可以直接处理 H.264、H.265 和 AV1 等格式,而不需要让主着色器单元完成每一步。光流加速器可以估计相邻帧之间的运动。

显示引擎则负责分辨率、时序、色彩输出和显示器连接。专用硬件的意义在于:把某种任务交给专门设计的电路,通常比完全依赖通用执行单元更高效。

 

十七、完整一帧:从 CPU 到屏幕

现在,把整个过程连在一起。

用户移动鼠标或按下键盘。CPU 接收输入,游戏引擎更新角色移动、人工智能、物理、动画和摄像机。

CPU 准备绘制命令,并把它们发送给 GPU。顶点着色器变换几何数据,硬件把顶点装配成三角形,光栅器再把三角形转换为片段。

像素着色器计算纹理、光照、阴影、反射和材质外观。深度测试移除被遮挡的表面,混合阶段组合透明与可见结果。

完成的颜色被写入显存中的帧缓冲。显示引擎读取这一帧,图像信号通过显示线缆传到显示器。显示器点亮像素,玩家终于看到画面。

这一切都发生在极短时间内。观众还没有来得及思考眼前这一帧,CPUGPU 已经开始准备下一帧。

 

结论:GPU 的力量来自协调,而不只是核心数量

GPU 不是一颗简单堆叠数千个核心的处理器。它是一台高度组织化的并行机器,目标是让大量算术执行单元始终保持忙碌。

它把工作拆分为线程,再把线程组织成 Warp 或 Wavefront;它变换顶点、装配三角形、执行光栅化、运行着色器、读取纹理、计算光照,并把最终结果写入帧缓冲。

当一组线程等待内存时,GPU 会切换到另一组线程,用更多可运行工作隐藏延迟。

同一种架构既可以生成数百万像素,也可以处理科学数据、仿真、视频和人工智能

GPU 之所以强大,不是因为每一个计算单元都像 CPU 核心那样复杂,而是因为整台机器能够协调海量并行工作。这就是数千个 GPU 执行通道如何共同生成每一帧画面的原因,也是 GPU 成为现代计算中最重要处理器之一的原因。

下一篇 GPU 基础文章,将继续讨论 CUDA Core、Tensor Core 和 Ray-Tracing Core,解释这些不同类型的硬件究竟负责什么工作。


 

除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!
Posted in CPU结构