硬件指南 » 教程 » 显卡是如何工作的?
计算机图形学自诞生以来已经发生了巨大的变化。从最初的像素化 2D 图形,到如今最逼真的 3D 图形。这一切都归功于一个关键组件: GPU 或显卡但是这个图形处理单元究竟是如何工作的呢?我们将在这里进行解释。
您可能还想知道:
驱动程序的工作原理
什么是 GPU?
La GPU(Graphics Processing Unit)是图形处理单元该芯片就像一个专用的CPU,负责处理图形并将结果输出到屏幕。由于现代操作系统除了视频和电子游戏等其他任务外,还使用图形环境,因此它如今已成为一个关键组件。
此前, 图形由 CPU 本身处理但这导致该单元过载,尽管早期的计算机图形处理非常简单。因此,随着时间的推移,出现了第一批 3D 图形加速器,它们是现代显卡的前身。借助它们,图像或图形可以渲染出非常逼真且效果丰富的效果,因为它们可以处理光照、阴影、3D 渲染等,而不会给 CPU 造成过载。
不过,必须要说的是 GPU和CPU协同工作CPU 根据当前正在运行的软件告诉 GPU 应该做什么。这对于更好地理解我们稍后将解释的流程也很重要。
什么是图形 API?
另一方面,人们还必须了解 图形API因为它还将帮助我们理解整个图形生成过程,因为有了它们,软件可以使用它们作为框架向 GPU 发送必要的命令来处理图形或动画。
众所周知,图形 API 种类繁多,例如 OpenGL、Vulkan、WebGL 或 DirectX 3D。这些 API 只不过是一些库和命令的集合,允许硬件创建 2D 和 3D 动画因此,API 必须包含当前 GPU 可以执行的所有现代功能,例如光线追踪等。
依据 API 中实现的功能 它们可以被第三方软件(例如视频游戏)使用。因此,当需要在屏幕上绘制内容时,软件会调用必要的API函数,然后API会向显卡(GPU)发送命令。GPU无法理解API发送的命令,因此API和GPU之间需要一个关键组件:图形驱动程序。它将负责翻译这些指令,使GPU能够理解。
也就是说,如果我们分析 从最低到最高的层级 我们将有一个像这样的图形堆栈:
显卡或 GPU。需要注意的是,CPU 和 GPU 之间的通信是通过 GPU 使用的总线或接口(例如 AGP、PCIe 等)进行的,这些总线或接口通过端口 I/O、内存映射 I/O、DMA、IRQ 等进行操作。请记住,CPU 负责向 GPU 发送必要的指令,以便 GPU 知道该做什么,因为驱动程序、API 和软件等软件是由 CPU 执行的。GPU 只负责接收这些指令并执行它们以生成相应的视频输出。
显卡固件有助于执行基本功能并与系统中的其他设备通信。
将指令翻译成 GPU 可以理解的指令的驱动程序。也就是说,它提供了一个独立于 GPU 架构的抽象接口,因此软件无需担心。
图形API,负责提供一系列函数或命令来组成图形。
使用 API 在任何给定时间绘制所需内容的软件。
200 和 250 欧元最佳显卡:比较我想,说到这里,我们基本上所有的事情都已经比较清楚了。
什么是图形引擎?
在我们了解 GPU 如何生成图形之前,有必要先明确一下 GPU 是什么。 图形引擎或视频游戏引擎这与图形 API 不同,尽管它也是一种框架。该开发环境是一种软件,可用于生成动画、数字孪生、模拟或视频游戏。
知名图形引擎的例子有 CryEngine、Unreal Engine、DOOM Engine、Rockstar Advanced Engine、Godot、Unity 3D、Source 等。有些是为特定的视频游戏开发的,最终用于其他游戏。
图形引擎将 高于图形 API 级别事实上,它会用它来绘制在其中创建的图形。简而言之,这些引擎构建了一个框架,使开发人员能够比从头开始创建图形更轻松地创建图形。这些引擎可以包含从开发 IDE、图形编辑器到 2D 或 3D 渲染引擎的所有内容。
简而言之,图形引擎将为开发人员或内容创建者提供必要的工具来渲染 2D 或 3D 图形,模拟物理定律(碰撞、反射、波等)的物理引擎,动画、脚本、声音、游戏 AI 等。
显卡如何工作来创建图像?
对于 镜框 图像到达帧缓冲区、传输到屏幕或显示器,以及刷新图像,需要经历一个完整的过程,从最基本、最基本的元素到最复杂的图像。我将在接下来的章节中尝试解释这些内容。
如今,您看到的所有视频游戏图形和角色都从点开始,最终转变为三角形,然后形成更复杂的多边形,最后赋予它们纹理、颜色、灯光等。而所有这一切都在几分之一秒内完成……
步骤 1:向 GPU 发送指令
我之前已经提到过这一点,但请记住,CPU 将通过软件(应用程序、API、驱动程序)使用图形 API 中的命令或对象,并将必要的指令发送给 GPU 进行处理。该单元将使用 着色器,它们基本上是在着色单元(例如:NVIDIA 的 CUDA 核心或 AMD 的计算单元)中处理的操作代码。
全新 Nvidia RTX 5090 D V2:功能、差异及在中国的上市第 2 步:渲染管道
一旦顶点到达 GPU 并准备好渲染,图形 API 将处理所谓的 渲染管道,即由 6 个阶段组成的管道:
每个顶点操作。
原始组装。
原始处理。
光栅化。
片段处理或片段处理。
按片段操作或按片段操作。
现在您将更好地理解每一个,因为我将在以下部分中详细介绍它们:
顶点操作
这是第一阶段, 处理顶点 顶点着色器 (Vertex Shader) 对图像进行着色,着色单元无非就是 GPU 中执行整数和浮点数数学运算的计算单元。
每个顶点乘以一个变换矩阵,这将改变 3D坐标 到投影坐标系以便进行处理。
原始组装
一旦着色单元提供了创建图像所需的三个坐标顶点,就会执行图元组装,即按特定顺序连接顶点。
处理原语
在生成的原语传递到流水线的下一阶段之前, 剪裁也就是说,生成的图像可能更大,但并非显示整个场景,而仅显示屏幕上的内容。裁剪是指将屏幕上的所有内容(可视体积)剪掉,并在下一步中忽略它。
光栅化或渲染
以上内容均无法在屏幕上显示, 需要像素 创建最终帧。这是在另一个光栅化阶段完成的操作。它只会处理从裁剪阶段传递过来的片段。
片段处理
现在,经过上一阶段的片段将再次通过着色器进入下一个步骤。这个着色器称为片段着色器,负责应用 颜色和质地 到片段的像素。
当然,如今的 GPU 已经添加了更多功能来提高图像质量,这些功能也需要处理,例如图像缩放、抗锯齿技术、光线追踪以提高照明质量等。因此,我在这里尽量简洁,以便您了解整个过程,而无需过多深入的细节。
Fragment操作
在这个新阶段,已经具有颜色和纹理的片段像素将传递到 帧缓冲区或帧缓冲区。它们将在默认帧缓冲区中分组,这些将是最终在屏幕上看到的。
步骤3:屏幕渲染
最后,生成的帧将通过 GPU 输出发送。 连接到显示器 以便可以在屏幕上看到。根据 GPU 和屏幕的刷新率(FPS),帧的更新速度会更快或更慢。
过去有些显卡需要额外的芯片,称为 RAMDAC这涉及一个额外的步骤。该芯片只是一个数模转换器,它使用处理后的帧数据将其转换为模拟信号并传输到显示器。这是因为较旧的显示器要么是模拟的,要么具有模拟接口,例如 VGA、DVI-A、RGB、S-Video、复合视频等。
对于不熟悉 RAMDAC 的人来说,它代表随机存取存储器数模转换器 (RAM)。它是一种 RAM 芯片,可以将来自 GPU 的数字信号转换为模拟信号。为此,它需要多个 DAC 和非常快速的 SRAM。
附加评论
我想补充一些 我认为重要的其他事项例如,当CPU执行软件并通过系统总线向GPU发送数据时,它首先到达的是命令处理器,命令处理器解释这些来自API的命令,并将其转换为驱动程序可以理解的“语言”。
AMD Soundwave:这是带有混合 CPU、RDNA 3.5 和 NPU 的 ARM APU。到达那里后,矢量或顶点会被传递到几何单元进行处理。之后,它们会被传递到其他片段生成单元,最后到达图像单元。然而,所有这些步骤很大程度上取决于 GPU 架构,因为并非所有 GPU 都具备这些单元,有些 GPU 会使用不同的单元来完成相同的工作。
如果 GPU集成,例如带有 iGPU 或 APU 的 SoC,其工作方式相同,但需要注意的是,它们本身不需要系统总线;它们将在同一芯片或封装上互连。另一方面,值得注意的是,在这些情况下,它们没有专用的 VRAM;而是与 CPU 共享 RAM,这意味着它们是统一的。
如果你想知道为什么今天的 GPU 这么快 并且几乎可以即时在屏幕上显示图像,必须承认,GPU 芯片非常先进、速度很快,并且具有非常高的核心级并行度,拥有数百甚至数千个核心,就像您在当前的 AMD Radeon、NVIDIA GeForce 或 Intel Arc GPU 中看到的那样。它们还使用了一些“技巧”来提高速度,尽管那是另一个话题。
我想通过平行结构向你们表明的是,它们 SIMD单元并且它们只需一条指令即可处理多个数据项。此外,由于拥有如此多的内核,当执行请求时,它将被分配到所有内核上,以便快速完成。
在发送给 GPU 的指令中,还有 分支这些分叉也会导致性能损失,就像 CPU 的情况一样,尽管这是另一个问题,我在这里就不赘述了。在这种情况下,并非所有计算单元都能完成其处理。此外,与 CPU 一样,也必须保持内存一致性。
我希望您喜欢这篇文章,并希望它能帮助您更好地理解图表生成的工作原理……