欢迎来到云服务器租用和托管数据中心

网络技术

了解GPU的基本架构

随着GPU 计算用例的快速增长,对图形处理单元 (GPU) 的需求激增。事实上,对 GPU 的需求一直很高,短缺现在很常见。在这里,我们将深入了解 Nvidia GPU 的架构,以帮助您了解 GPU 的工作原理以及它们为何非常适合众多现代应用程序。

了解GPU的基本架构

GPU的基本架构

正如我们在GPU 与 CPU:主要区别是什么?,GPU 使用许多轻量级处理核心,利用数据并行性,并具有高内存吞吐量。虽然具体组件因型号而异,但从根本上说,大多数现代 GPU 使用单指令多数据 (SIMD) 流架构。要理解这意味着什么——以及它为什么重要——让我们看一下 Flynn 的分类法。

什么是弗林分类法?

Flynn's Taxonomy 是斯坦福大学的 Michael J. Flynn 对计算机体系结构进行的分类。弗林分类法背后的基本思想很简单:计算由 2 个流(数据和指令流)组成,可以按顺序(一次 1 个流)或并行(一次处理多个流)处理。两个数据流和两种可能的处理方法导致弗林分类法中的 4 个不同类别。让我们逐一看看。

单指令单数据 (SISD)

SISD 流是一种架构,其中单个指令流(例如程序)在一个数据流上执行。这种架构用于具有单核处理器的旧计算机以及许多简单的计算设备。

单指令多数据 (SIMD)

SIMD 流架构具有单个控制处理器和指令存储器,因此在任何给定时间点只能运行一条指令。该单条指令被复制并同时在每个内核上运行。这是可能的,因为每个处理器都有自己的专用内存,允许在数据级别进行并行处理(也称为“数据并行处理”)。SIMD 的根本优势在于数据并行性使其能够快速(多个处理器做同一件事)和高效(只有一个指令单元)执行计算。

多指令单数据 (MISD)

MISD 流架构实际上是 SIMD 架构的逆向。使用 MISD,多个指令在同一数据流上执行。今天 MISD 的用例非常有限。其他架构之一可以更好地解决大多数实际应用程序。

多指令多数据 (MIMD)

MIMD 流架构为数据流和指令流提供并行性。使用 MIMD,多个处理器针对不同的数据流独立执行指令流。

是什么让 SIMD 最适合 GPU?

现在我们了解了不同的架构,让我们考虑一下为什么 SIMD 是 GPU 的最佳选择。当您了解到从根本上说图形处理以及许多其他常见的 GPU 计算用例只是大规模地一遍又一遍地运行相同的数学函数时,答案就变得很直观了。在这种情况下,许多处理器在多个数据集上运行相同的指令是理想的。

恰当的例子:调整像素的视频亮度依赖于使用 RGB(红绿蓝)值的简单算法。多次执行同一功能是产生所需结果的必要条件,而 SIMD 是该用例的理想选择。相反,MIMD 在需要执行多个离散计算的应用程序中最有效,例如计算机辅助设计 (CAD)。

SIMT 呢?

如果您熟悉 GPU,您可能听说过单指令多线程 (SIMT) 这个术语。那么 SIMT 在哪里适合 Flynn 的分类法?SIMT 可以看作是 SIMD 的扩展。它将多线程添加到 SIMD,从而提高了效率,因为指令获取开销更少。

CUDA并行计算平台

我们理解 GPU 架构的下一步将我们引向 Nvidia 流行的计算统一设备架构 (CUDA) 并行计算平台。通过提供一个 API,使开发人员能够优化 GPU 资源的使用方式——无需专门的图形编程知识——CUDA 在使 GPU 用于通用计算方面已经走了很长一段路。

在这里,我们将了解与 GPU 架构相关的关键 CUDA 概念。

CUDA 计算层次结构

CUDA 中的处理资源旨在帮助优化 GPU 用例的性能。层次结构的三个基本组件是线程、线程块和内核网格。

线程

线程——或 CUDA 核心——是一种并行处理器,可在 Nvidia GPU 中计算浮点数学运算。GPU 处理的所有数据都是通过 CUDA 内核处理的。现代 GPU 有数百甚至数千个 CUDA 内核。每个 CUDA 核心都有自己的内存寄存器,其他线程无法使用。

虽然计算能力和 CUDA 核心之间的关系不是完全线性的,但一般来说——假设其他条件相同——GPU 拥有的 CUDA 核心越多,它的计算能力就越大。然而,这个一般想法有多种例外情况。例如,不同的 GPU 微架构会影响性能并使 CUDA 内核较少的 GPU 更强大

线程块

顾名思义,线程块(或 CUDA 块)是一组 CUDA 核心(线程),可以串行或并行地一起执行。核心的逻辑分组可实现更高效的数据映射。线程块在每个块的基础上共享内存。当前的 CUDA 架构将每个块的线程数量限制为 1024。给定 CUDA 块中的每个线程都可以访问相同的共享内存(更多关于下面不同类型的内存)。

内核网格

线程块的下一层抽象是内核网格。内核网格是同一内核上的线程块分组。网格可用于并行执行更大的计算(例如,那些需要超过 1024 个线程的计算),但是由于不同的线程块不能使用相同的共享内存,所以在块级别发生的相同同步不会发生在网格 -等级。

CUDA 内存层次结构

与计算资源一样,内存分配遵循 CUDA 中的特定层次结构。虽然 CUDA 编译器自动处理内存分配,但 CUDA 开发人员可以直接优化内存使用。以下是了解 CUDA 内存层次结构的关键概念。

寄存器

寄存器是分配给各个线程(CUDA 核心)的内存。因为寄存器存在于“片上”内存中并且专用于各个线程,所以存储在寄存器中的数据可以比任何其他数据处理得更快。寄存器中的内存分配是一个复杂的过程,由编译器处理,而不是由 CUDA 开发人员编写的软件控制。

只读存储器

只读 (RO) 是 GPU 流式多处理器上的片上存储器。它用于特定任务,例如可以使用 CUDA 纹理函数访问的纹理内存。在许多情况下,从只读内存中获取数据比使用全局内存更快、更高效。

L1缓存/共享内存

第 1 层 (L1) 缓存和共享内存是在线程块(CUDA 块)内共享的片上内存。因为一级缓存和共享内存存在于芯片上,所以它比二级缓存和全局内存都快。一级缓存和共享内存的根本区别在于:共享内存的使用是通过软件控制的,而一级缓存是由硬件控制的。

二级缓存

所有 CUDA 块中的所有线程都可以访问第 2 层缓存。L2缓存存储全局和本地内存。从 L2 缓存中检索数据比从全局内存中检索数据更快。

全局内存

全局内存是驻留在设备 DRAM 中的内存。使用 CPU 类比,全局内存可与 RAM 相提并论。从全局内存中获取数据本质上比从 L2 缓存中获取数据要慢。

Nvidia GPU 架构简史

虽然近年来 Nvidia GPU 确实更频繁地成为新闻,但它们绝不是新的。事实上,多年来,Nvidia GPU 已经进行了多次迭代,GPU 架构也取得了进步。因此,让我们回顾一下最近的历史,了解 GPU 是如何随着时间的推移而发展的。我们将通过探索自 2000 年以来发布的每个流行的 Nvidia GPU 微体系结构来做到这一点。

开尔文

Kelvin 于 2001 年发布,是 Nvidia 千禧年的第一个新 GPU 微架构。最初的 Xbox 游戏机使用了具有开尔文微架构的 NV2A GPU。GeForce 3 和 GeForce 4 系列 GPU 是使用这种微架构发布的。

朗肯

Rankine 是 2003 年发布的 Kelvin 的后续产品,用于 Nvidia GPU 的 GeForce 5 系列。Rankine 支持顶点和片段程序,并将 VRAM 大小增加到 256MB。

居里

GeForce 6 和 7 系列 GPU 使用的微架构 Curie 于 2004 年作为 Rankine 的继任者发布。Curie 将显存量翻了一番,达到 512MB,是第一代支持 PureVideo 视频解码的 Nvidia GPU。

特斯拉

2006 年发布的 Tesla GPU 微架构作为 Curie 的继任者,为 Nvidia 的 GPU 产品线引入了几个重要的变化。除了作为 GeForce 8、9、100、200 和 300 系列 GPU 使用的架构之外,Tesla 还被为图形处理以外的用例设计的 Quadro 系列 GPU 使用。

令人困惑的是,Tesla 既是 GPU 微架构的名称,也是 Nvidia GPU 的品牌。2020 年,Nvidia 决定停止使用特斯拉名称,以免与流行的电动汽车品牌混淆。

费米

Tesla 的继任者 Fermi 于 2010 年发布。Fermi 引入了许多增强功能,包括:

  • 支持 512 个 CUDA 内核
  • 64KB RAM 和分区 L1 缓存/共享内存的能力
  • 支持纠错码 (ECC)

开普勒

Kepler GPU 微架构作为 Fermi 2012 的继任者发布。对 Fermi 的主要改进是:

  • 一种称为 SMX 的新型流式多处理器架构
  • 支持 TXAA(一种抗锯齿方法)
  • CUDA 内核增加到 1536 个
  • 更少的功耗
  • 通过 GPU boost 支持自动超频
  • 支持 GPUDirect,它允许 GPU——无论是在同一台计算机上还是通过网络相互访问——无需访问 CPU 即可进行通信

麦克斯韦

2014 年发布的麦克斯韦是费米的继任者。根据 Nvidia 的说法,第一代 Maxwell GPU 与 Fermi 相比具有以下优势:

  • 由于与控制逻辑分区、时钟门控、指令调度和工作负载平衡相关的增强,更高效的多处理器
  • 每个流式多处理器上有 64KB 的专用共享内存
  • 与 Fermi 使用的锁定/解锁范例相比,本机共享内存原子操作提供了性能改进
  • 动态并行支持

帕斯卡

Pascal 于 2016 年接替 Maxwell。这种 Nvidia GPU 微架构提供了对 Maxwell 的改进,例如:

  • 支持 NVLink 通信,与 PCIe 相比具有显着的速度优势
  • 高带宽内存 2 (HBM2) - 一种 4096 位内存总线,提供 720 GB 的内存带宽
  • 计算抢占
  • 动态负载平衡以优化 GPU 资源利用率

沃尔特

Volta 是 2017 年发布的一种有点独特的微架构迭代。虽然以前的大多数微架构都用于消费类 GPU,但 Volta GPU 严格针对专业应用进行销售。Volta 也是第一个使用 Tensor Core 的微架构。

张量核心是一种新型的处理核心,可以执行专门的数学计算。具体来说,Tensor Cores 执行支持 AI 和深度学习用例的矩阵运算。

图灵

Turing 于 2018 年发布,除了支持 Tensor Cores 外,还包括许多面向消费者的 GPU。Turing 是 Nvidia 广受欢迎的 Quadro RTX 和 GeForce RTX 系列 GPU 使用的微架构。这些 GPU 支持实时光线追踪(又名 RTX),这对于虚拟现实 (VR) 等计算量大的应用程序至关重要。

安培

Ampere 微架构才刚刚开始投放市场。Ampere 旨在进一步支持高性能计算 (HPC) 和人工智能用例。Ampere 的增强功能包括第 3 代 NVLink 和 Tensor 核心、结构稀疏性(将不需要的参数转换为零以启用 AI 模型训练)、第 2 代光线追踪核心、多实例 GPU (MIG) 以实现 A100 GPU 在逻辑上的分区隔离且安全的 GPU 实例。

最后的想法

我们希望您喜欢我们对 GPU 架构及其演变过程的概述。在Cherry Servers,我们对 HPC 的未来和下一代 GPU 将支持的用例充满热情。我们是裸机云的行业领导者,也是帮助企业充分利用其计算资源的专家。

Copyright © 2003-2020 香港服务器和服务器租用 梦飞数据中心 版权所有