跳转到内容

微处理器设计/GPU

来自维基教科书,为开放世界提供开放书籍

GPU(图形处理单元)是一种电子芯片,安装在显卡(图形卡)上。有时被称为视觉处理单元(VPU),它是一种专门的处理器,可以从微处理器中卸载 3D 图形渲染。现代 GPU 不仅仅是一个强大的图形引擎,而且还是一个高度并行的可编程处理器,其峰值算术和内存带宽远远超过其 CPU 对应部分。

英伟达 GPU 加速器方框图


GPU 的特点

[编辑 | 编辑源代码]
  1. 计算需求很大。实时渲染每秒需要数十亿像素,每个像素需要数百次或更多操作。GPU 必须提供大量的计算性能才能满足复杂实时应用程序的需求。
  2. 吞吐量比延迟更重要。GPU 对图形管道的实现优先考虑吞吐量而不是延迟。人类视觉系统以毫秒时间尺度运行,而现代处理器内的操作需要纳秒。这个六个数量级的差距意味着任何单个操作的延迟并不重要。因此,图形管道非常深,可能数百到数千个周期,任何给定时间都有数千个基元处于飞行状态。


GPU 架构

[编辑 | 编辑源代码]

图形管道

[编辑 | 编辑源代码]

GPU 的输入是几何基元的列表,通常是三角形,位于 3-D 世界坐标系中。通过许多步骤,这些基元被着色并映射到屏幕上,在那里它们被组装以创建最终图像。在展示管道如何变得可编程之前,首先解释规范管道中的特定步骤是有益的。

  1. 顶点操作:输入基元由单个顶点形成。每个顶点必须转换为屏幕空间并着色,通常通过计算它们与场景中的光线的交互来完成。由于典型场景有数十万到数百万个顶点,并且每个顶点可以独立计算,因此此阶段非常适合并行硬件。
  2. 基元装配:顶点被组装成三角形,这是当今 GPU 中最基本的硬件支持的基元。
  3. 光栅化:光栅化是确定屏幕空间像素位置被每个三角形覆盖的过程。每个三角形在其覆盖的每个屏幕空间像素位置生成一个称为片段的基元。由于许多三角形可能在任何像素位置重叠,因此每个像素的颜色值可以从多个片段计算得出。
  4. 片段操作:使用来自顶点的颜色信息,并可能从全局内存中以纹理(映射到表面的图像)的形式获取附加数据,每个片段都被着色以确定其最终颜色。就像顶点阶段一样,每个片段都可以并行计算。此阶段通常是图形管道中最耗费计算资源的阶段。
  5. 合成:片段被组装成一个最终图像,每个像素有一个颜色,通常通过保留每个像素位置最靠近相机的片段来完成。


GPU 功能与计算

[编辑 | 编辑源代码]

GPU 的可编程单元遵循单程序多数据 (SPMD) 编程模型。为了提高效率,GPU 使用同一个程序并行处理许多元素(“顶点或片段”)。每个元素都独立于其他元素,在基本编程模型中,元素无法相互通信。所有 GPU 程序都必须以这种方式构建:许多并行元素,每个元素都由一个程序并行处理。每个元素都可以对 32 位整数或浮点数据进行操作,并具有相当完整的通用指令集。元素可以从共享的全局内存中读取数据,并且,对于最新的 GPU,还可以写入共享全局内存中的任意位置。这种编程模型非常适合直线程序,因为许多元素可以同步处理,运行完全相同的代码。以这种方式编写的代码是单指令多数据 (SIMD)。


GPU 加速计算

[编辑 | 编辑源代码]

GPU 加速计算是指将图形处理单元 (GPU) 与 CPU 结合使用以加速科学、工程和企业应用程序。GPU 加速计算通过将计算密集型应用程序部分卸载到 GPU 来提供前所未有的应用程序性能,而代码的其余部分仍然在 CPU 上运行。从用户的角度来看,应用程序只需运行得更快。

GPU 加速的工作原理


GPGPU 计算

[编辑 | 编辑源代码]

GPGPU(图形处理单元上的通用计算)是一种高性能计算方法,它使用图形处理单元来处理数据。使开发极高性能专用图形处理器的图形算法的特点出现在其他 HPC 算法中。这种相同的专用硬件也可以用来加速这些算法。


应用程序

[编辑 | 编辑源代码]

非常适合 GPGPU 实现的算法具有两个特性:它们是数据并行的,并且是吞吐量密集型的。数据并行意味着处理器可以同时对不同的数据元素执行操作。吞吐量密集意味着算法将处理大量数据元素,因此将有大量元素可以并行操作。利用这两个特性,GPU 通过包含大量(数百个)相对简单的处理单元来实现极高的性能,以同时操作许多数据元素。也许并不奇怪,基于像素的应用程序,如计算机视觉以及视频和图像处理非常适合 GPGPU 技术,因此,这些领域中的许多商业软件包现在都包含 GPGPU 加速。

GPU 与 CPU 的区别

[编辑 | 编辑源代码]

CPU(中央处理器)通常被称为 PC 的大脑。但是,这种大脑正越来越多地受到 PC 的另一个部分——GPU(图形处理单元)的增强,GPU 是它的灵魂。从架构上讲,CPU 由仅几个核心组成,这些核心拥有大量缓存内存,可以一次处理几个软件线程。相比之下,GPU 由数百个核心组成,可以同时处理数千个线程。具有 100 多个核心的 GPU 处理数千个线程的能力可以将某些软件的加速提高到仅 CPU 的 100 倍。GPU 在比 CPU 更强大、更具成本效益的同时实现了这种加速。

CPU 和 GPU


  • VAAPI : VAAPI(视频加速 API)是一个开源库和 API 规范,它为视频处理提供对图形硬件加速功能的访问。它包含一个主库和针对每个支持的硬件供应商的驱动程序特定加速后端。支持的硬件
  1. 英特尔® GMA X4500HD
  2. 英特尔® HD 显卡(在英特尔® 2010 酷睿™ i7/i5/i3 处理器系列中)
  3. 英特尔® HD 显卡 2000/3000(在第二代英特尔® 酷睿™ i7/i5/i3 处理器系列中)
  4. 英特尔® HD 显卡 2500/4000(在第三代英特尔® 酷睿™ i7/i5/i3 处理器系列中)
  • Unix 视频解码和呈现 API : Unix 视频解码和呈现 API (VDPAU) 为解码、后期处理、合成和显示压缩或未压缩视频流提供了完整的解决方案。这些视频流可以与位图内容组合(合成),以实现 OSD 和其他应用程序用户界面。


API 分区

[编辑 | 编辑源代码]

VDPAU 分为两个不同的模块

  • 核心 API
  • 窗口系统集成层

目的是让大多数 VDPAU 功能在所有可能的窗口系统中都存在并以相同的方式运行。此功能是核心 API。但是,必须包含少量与底层窗口系统紧密耦合的功能。此功能是窗口系统集成层。可能包括以下示例

  • 创建初始 VDPAU VdpDevice 句柄,因为此操作需要对底层窗口系统有深入的了解,例如特定显示句柄或驱动程序标识。
  • 将 VDPAU 表面转换为/从底层窗口系统表面类型,例如,允许通过本机窗口系统 API 操作 VDPAU 生成的表面。


GPU 应用程序

[编辑 | 编辑源代码]
  1. 游戏 : PC GPU 最初是为 PC 上的 3D 游戏而发明的。使用现代 GPU 还使游戏开发人员能够构建动画角色,使地图栩栩如生。
  2. 生产力 : Microsoft Office 2010 现在为其某些图形元素(如 WordArt 和 PowerPoint 过渡)提供 GPU 加速。
  3. 视频编辑 : 即使在高端 PC 上,视频编辑也需要大量使用系统资源。像 Adobe Premiere Elements 9 这样的消费类应用程序提供了以前只供专业人士使用的功能。Premiere Elements 9 中的所有页面翻页、球体或卡片翻转等过渡都已通过 GPU 加速。折射和涟漪等效果也由 GPU 加速。配备 AMD Radeon GPU 的显卡将加快预览和最终渲染速度,使其创建视频更加快速和有趣。
Sasha 测试

进一步阅读

[编辑 | 编辑源代码]


参考文献

[编辑 | 编辑源代码]
  1. 在共享内存系统上 GPU 和 CPU 上的协同处理 SPMD 计算,印第安纳大学布卢明顿信息学与计算学院,普适技术研究所,作者:Hui Li、Geoffrey Fox、Gregor Laszewski、Zhenhua Guo、Judy Qiu
  2. GPU 工作原理,作者:David Luebke,英伟达研究,以及 Greg Humphreys,弗吉尼亚大学
华夏公益教科书