随着GPU计算用例的快速增长,对图形处理单元(GPU)的需求激增。事实上,对GPU的需求一直很高,短缺现在很常见。在这里,我们将深入了解NvidiaGPU的架构,以帮助您了解GPU的工作原理以及它们为何非常适合众多现代应用程序。
正如我们在GPU与CPU:主要区别是什么?,GPU使用许多轻量级处理核心,利用数据并行性,并具有高内存吞吐量。虽然具体组件因型号而异,但从根本上说,大多数现代GPU使用单指令多数据(SIMD)流架构。要理解这意味着什么——以及它为什么重要——让我们看一下Flynn的分类法。
Flynn'sTaxonomy是斯坦福大学的MichaelJ.Flynn对计算机体系结构进行的分类。弗林分类法背后的基本思想很简单:计算由2个流(数据和指令流)组成,可以按顺序(一次1个流)或并行(一次处理多个流)处理。两个数据流和两种可能的处理方法导致弗林分类法中的4个不同类别。让我们逐一看看。
SISD流是一种架构,其中单个指令流(例如程序)在一个数据流上执行。这种架构用于具有单核处理器的旧计算机以及许多简单的计算设备。
SIMD流架构具有单个控制处理器和指令存储器,因此在任何给定时间点只能运行一条指令。该单条指令被复制并同时在每个内核上运行。这是可能的,因为每个处理器都有自己的专用内存,允许在数据级别进行并行处理(也称为“数据并行处理”)。SIMD的根本优势在于数据并行性使其能够快速(多个处理器做同一件事)和高效(只有一个指令单元)执行计算。
MISD流架构实际上是SIMD架构的逆向。使用MISD,多个指令在同一数据流上执行。今天MISD的用例非常有限。其他架构之一可以更好地解决大多数实际应用程序。
MIMD流架构为数据流和指令流提供并行性。使用MIMD,多个处理器针对不同的数据流独立执行指令流。
现在我们了解了不同的架构,让我们考虑一下为什么SIMD是GPU的最佳选择。当您了解到从根本上说图形处理以及许多其他常见的GPU计算用例只是大规模地一遍又一遍地运行相同的数学函数时,答案就变得很直观了。在这种情况下,许多处理器在多个数据集上运行相同的指令是理想的。
恰当的例子:调整像素的视频亮度依赖于使用RGB(红绿蓝)值的简单算法。多次执行同一功能是产生所需结果的必要条件,而SIMD是该用例的理想选择。相反,MIMD在需要执行多个离散计算的应用程序中最有效,例如计算机辅助设计(CAD)。
如果您熟悉GPU,您可能听说过单指令多线程(SIMT)这个术语。那么SIMT在哪里适合Flynn的分类法?SIMT可以看作是SIMD的扩展。它将多线程添加到SIMD,从而提高了效率,因为指令获取开销更少。
我们理解GPU架构的下一步将我们引向Nvidia流行的计算统一设备架构(CUDA)并行计算平台。通过提供一个API,使开发人员能够优化GPU资源的使用方式——无需专门的图形编程知识——CUDA在使GPU用于通用计算方面已经走了很长一段路。
在这里,我们将了解与GPU架构相关的关键CUDA概念。
CUDA中的处理资源旨在帮助优化GPU用例的性能。层次结构的三个基本组件是线程、线程块和内核网格。
线程——或CUDA核心——是一种并行处理器,可在NvidiaGPU中计算浮点数学运算。GPU处理的所有数据都是通过CUDA内核处理的。现代GPU有数百甚至数千个CUDA内核。每个CUDA核心都有自己的内存寄存器,其他线程无法使用。
虽然计算能力和CUDA核心之间的关系不是完全线性的,但一般来说——假设其他条件相同——GPU拥有的CUDA核心越多,它的计算能力就越大。这个一般想法有多种例外情况。例如,不同的GPU微架构会影响性能并使CUDA内核较少的GPU更强大
顾名思义,线程块(或CUDA块)是一组CUDA核心(线程),可以串行或并行地一起执行。核心的逻辑分组可实现更高效的数据映射。线程块在每个块的基础上共享内存。当前的CUDA架构将每个块的线程数量限制为1024。给定CUDA块中的每个线程都可以访问相同的共享内存(更多关于下面不同类型的内存)。
线程块的下一层抽象是内核网格。内核网格是同一内核上的线程块分组。网格可用于并行执行更大的计算(例如,那些需要超过1024个线程的计算),但是由于不同的线程块不能使用相同的共享内存,所以在块级别发生的相同同步不会发生在网格-等级。
与计算资源一样,内存分配遵循CUDA中的特定层次结构。虽然CUDA编译器自动处理内存分配,但CUDA开发人员可以直接优化内存使用。以下是了解CUDA内存层次结构的关键概念。
寄存器是分配给各个线程(CUDA核心)的内存。因为寄存器存在于“片上”内存中并且专用于各个线程,所以存储在寄存器中的数据可以比任何其他数据处理得更快。寄存器中的内存分配是一个复杂的过程,由编译器处理,而不是由CUDA开发人员编写的软件控制。
只读(RO)是GPU流式多处理器上的片上存储器。它用于特定任务,例如可以使用CUDA纹理函数访问的纹理内存。在许多情况下,从只读内存中获取数据比使用全局内存更快、更高效。
第1层(L1)缓存和共享内存是在线程块(CUDA块)内共享的片上内存。因为一级缓存和共享内存存在于芯片上,所以它比二级缓存和全局内存都快。一级缓存和共享内存的根本区别在于:共享内存的使用是通过软件控制的,而一级缓存是由硬件控制的。
所有CUDA块中的所有线程都可以访问第2层缓存。L2缓存存储全局和本地内存。从L2缓存中检索数据比从全局内存中检索数据更快。
全局内存是驻留在设备DRAM中的内存。使用CPU类比,全局内存可与RAM相提并论。从全局内存中获取数据本质上比从L2缓存中获取数据要慢。
虽然近年来NvidiaGPU确实更频繁地成为新闻,但它们绝不是新的。事实上,多年来,NvidiaGPU已经进行了多次迭代,GPU架构也取得了进步。因此,让我们回顾一下最近的历史,了解GPU是如何随着时间的推移而发展的。我们将通过探索自2000年以来发布的每个流行的NvidiaGPU微体系结构来做到这一点。

Rankine是2003年发布的Kelvin的后续产品,用于NvidiaGPU的GeForce5系列。Rankine支持顶点和片段程序,并将VRAM大小增加到256MB。
GeForce6和7系列GPU使用的微架构Curie于2004年作为Rankine的继任者发布。Curie将显存量翻了一番,达到512MB,是第一代支持PureVideo视频解码的NvidiaGPU。
2006年发布的TeslaGPU微架构作为Curie的继任者,为Nvidia的GPU产品线引入了几个重要的变化。除了作为GeForce8、9、100、200和300系列GPU使用的架构之外,Tesla还被为图形处理以外的用例设计的Quadro系列GPU使用。
令人困惑的是,Tesla既是GPU微架构的名称,也是NvidiaGPU的品牌。2020年,Nvidia决定停止使用特斯拉名称,以免与流行的电动汽车品牌混淆。
Tesla的继任者Fermi于2010年发布。Fermi引入了许多增强功能,包括:
KeplerGPU微架构作为Fermi2012的继任者发布。对Fermi的主要改进是:
2014年发布的麦克斯韦是费米的继任者。根据Nvidia的说法,第一代MaxwellGPU与Fermi相比具有以下优势:
Pascal于2016年接替Maxwell。这种NvidiaGPU微架构提供了对Maxwell的改进,例如:
Volta是2017年发布的一种有点独特的微架构迭代。虽然以前的大多数微架构都用于消费类GPU,但VoltaGPU严格针对专业应用进行销售。Volta也是第一个使用TensorCore的微架构。
张量核心是一种新型的处理核心,可以执行专门的数学计算。具体来说,TensorCores执行支持AI和深度学习用例的矩阵运算。
Turing于2018年发布,除了支持TensorCores外,还包括许多面向消费者的GPU。Turing是Nvidia广受欢迎的QuadroRTX和GeForceRTX系列GPU使用的微架构。这些GPU支持实时光线追踪(又名RTX),这对于虚拟现实(VR)等计算量大的应用程序至关重要。
Ampere微架构才刚刚开始投放市场。Ampere旨在进一步支持高性能计算(HPC)和人工智能用例。Ampere的增强功能包括第3代NVLink和Tensor核心、结构稀疏性(将不需要的参数转换为零以启用AI模型训练)、第2代光线追踪核心、多实例GPU(MIG)以实现A100GPU在逻辑上的分区隔离且安全的GPU实例。
我们希望您喜欢我们对GPU架构及其演变过程的概述。在CherryServers,我们对HPC的未来和下一代GPU将支持的用例充满热情。我们是裸机云的行业领导者,也是帮助企业充分利用其计算资源的专家。
本文来源:国外服务器--深入gpu硬件架构及运行机制(NVIDIA历代gpu架构)
本文地址:https://www.idcbaba.com/guowai/4840.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 1919100645@qq.com 举报,一经查实,本站将立刻删除。



