Nvidia流式多处理器历史


上周末,我学习了CUDA和SIMT编程。这段富有成果的时间结束了我的“名片骑手赛车手” [1]的将近700倍的加速-从101秒缩短到150 ms。

这种愉快的经历是进一步研究Nvidia建筑的主题和演变的一个很好的借口。由于“绿色”团队多年来发布的大量文档,我设法回到过去,并简要介绍了其流式多处理器的惊人发展。

在本文中,我们将考虑:

年代晶体工艺技术系列最强大的卡
=================================================== ==========================
2006特斯拉GeForce 8 G80 90 nm 8800 GTX 
2010费米GeForce 400 GF100 40 nm GTX 480
2012开普勒GeForce 600 GK104 28 nm GTX 680
2014麦克斯韦GeForce 900 GM204 28 nm GTX 980 Ti
2016 Pascal GeForce 10 GP102 16 nm GTX 1080 Ti
2018图灵GeForce 20 TU102 12 nm RTX 2080 Ti

死路


直到2006年,NVidia的GPU架构都与API渲染的逻辑阶段相关联[2]由G71晶体控制的GeForce 7900 GTX由三个部分组成,这些部分涉及处理顶点(8个块),生成片段(24个块)和组合片段(16个块)。


水晶G71。注意Z-Cull优化,它会丢弃不会通过Z检验的片段。

这种相关性使设计人员猜测输送机瓶颈的位置,以正确平衡每一层。随着DirectX 10的另一个阶段-几何着色器的问世,Nvidia工程师面临着艰苦的任务,即不知道如何使用该阶段来平衡晶体。现在是时候改变了。

特斯拉



借助2006年发布的“集成”特斯拉架构,英伟达解决了日益复杂的问题。

G80晶体中的各层之间不再存在任何差异。由于能够执行顶点,片段和几何“核”,因此流多处理器(Stream Multiprocessor,SM)已替换了所有先前存在的块。由于根据传送带的要求,每个SM都更换了“芯”,因此负载平衡是自动执行的。

“事实上,我们放弃了整个NV30 / NV40着色器架构,并从头开始创建了一个新的,具有用于通用处理器(SIMT)的新通用架构,并且还引入了新的处理器设计方法。”

约翰·阿尔本(extremetech.com采访)

不再能够执行SIMD指令,“着色器块”变成了“内核”,它们可以在每个周期执行一条整数指令或一条带有float32的指令。 SM以32个线程为一组接收线程,称为warp。理想情况下,同一线程束的所有线程仅针对不同的数据(因此称为SIMT)在同一时间执行同一条指令。如果多线程指令单元的指令指针(指令指针,IP)收敛/拒绝,则多线程指令单元(MT)用于启用/禁用扭曲中的线程。

两个SFU可以帮助您执行复杂的数学计算,例如平方根倒数,sin,cos,exp和rcp。这些块还能够每个周期执行一条指令,但是由于它们只有两个,因此翘曲的速度分为四个。 float64没有硬件支持,计算以编程方式执行,这极大地影响了执行速度。

当由于可调度warp的不断存在而能够隐藏内存等待时间时,以及在warp中的流不偏离时(控制逻辑将其保持在执行指令的相同路径上),SM便会发挥出最大的潜力。流状态存储在4 KB的寄存器文件(寄存器文件,RF)中。在堆栈上占用过多空间的线程会减少可能同时运行的线程数量,同时会降低性能。

特斯拉一代的旗舰晶体是GeForce 8800 GTX中引入的90nm G80。两个SM与纹理单元和Tex L1缓存一起组合在纹理处理器群集(TPC)中。承诺具有80个TPC和128个内核的G80会产生345.6 gigaflops [3]8800 GTX卡曾一度非常受欢迎,收到了好评,并爱上了那些买得起的人。事实证明,它是一款出色的产品,在发布13个月后,它仍然是市场上最快的GPU之一。


G80安装在8800 GTX中。渲染输出单元(ROP)进行平滑处理。

Nvidia与Tesla共同推出了用于计算统一设备体系结构(CUDA)的C编程语言,这是C99语言的超集。GPGPU爱好者非常喜欢用GLSL纹理和着色器欺骗GPU的替代方法,他们对此表示欢迎。

尽管我在本节中主要讨论SM,但它只是系统的一半。在SM中,必须传输存储在GPU内存中的指令和数据。为了避免停机,GPU不会尝试使用大型缓存来最大程度地减少内存传输并预测CPU的工作方式。GPU利用延迟的优势,使内存总线饱和,以满足成千上万个线程的I / O需求。为此,芯片(例如G80)使用六个双面DRAM存储器总线实现了高存储带宽。


GPU利用内存延迟,而CPU用巨大的缓存和预测逻辑将它们隐藏起来。

费米



特斯拉的冒险举动非常成功。它是如此成功,以至于在接下来的二十年中成为NVidia GPU的基础。

« , , (Fermi , Maxwell ), , G80, [Pascal]».

( extremetech.com)

Nvidia在2010年发布了基于全新Fermi架构的GF100。 Fermi技术文档[4]中详细描述了其最新芯片的内部

执行模型仍然基于分派给SM的32个线程的扭曲。借助40纳米工艺技术,NVidia仅使所有指标翻了一番/四倍。多亏了16个CUDA内核的两个阵列,SM现在能够同时调度两个半线程(每个线程16个线程)。尽管每个内核在每个时钟周期执行一条指令,但SM基本上能够在每个时钟周期排除一条翘曲指令(比Tesla架构SM多四倍)。

SFU的数量也有所增加,但没有增加太多-容量仅增加了一倍。可以得出结论,这种类型的指令没有被非常积极地使用。

对float64的半硬件支持将两个CUDA内核执行的操作结合在一起。得益于32位ALU(在Tesla中为24位),GF100可以在一个周期内执行整数乘法,并且由于从IEEE 754-1985过渡到IEEE 754-2008,它在使用融合乘法处理float32管道时具有更高的准确性。 -添加(FMA)(比Tesla MAD中使用的精度更高)。

从编程的角度来看,费米的集成内存系统使对CUDA C的C ++功能(例如对象,虚拟方法和异常)进行补充成为可能。

由于纹理块现在已成为SM,因此TPC的概念已被放弃。它已被图形处理器群集(GPC)群集取代,每个群集都有四个SM。最后但并非最不重要的一点是,SM现在具有Polymorph Engine,它可以处理顶点,变换视口和细分。基于GF100的旗舰GeForce GTX 480被宣传为包含512核,并能够提供1,345 gigaflops [5]


GF100安装在GeForce GTX 480中。请注意为GPC提供服务的六个内存控制器。

开普勒



Nvidia在2012年发布了开普勒(Kepler)建筑,该建筑以占星家命名,并以发现行星运动定律而闻名。像往常一样,技术文档GK104 [6]允许我们查看内部

在开普勒,英伟达通过降低时钟速度并将核心频率与显卡频率相结合(以前将其频率提高了一倍),显着提高了芯片的能源效率。

这种变化本应导致生产率下降。但是,由于工艺技术减半(28纳米)并且用软件代替了硬件控制器,Nvidia不仅能够在芯片上放置更多SM,而且还可以改善其设计。

下一代流多处理器(SMX)是一个庞然大物,几乎所有指标都已翻倍或翻了三倍。

得益于四个能够在一个时钟周期内处理整个扭曲的扭曲调度程序(Fermi仅能处理一半扭曲),SMX现在包含196个内核。每个调度程序都有双重调度,如果它独立于当前的可执行指令,则允许以warp执行第二条指令。双重调度并非总是可能的,因为两次调度操作共有32个内核的一列。

这种方案使调度逻辑变得复杂(我们将在后面再介绍),但是由于每个周期最多执行六个翘曲指令,与Fermi架构SM相比,SMX的性能提高了一倍。

据说,配备GK104芯片和八个SMX的旗舰NVIDIA GeForce GTX 680具有1536个内核,达到3,250 gigaflops [7]。晶体的元素变得如此复杂,以至于我不得不从图中去除所有特征。


GK104安装在GeForce GTX 680中。请

注意完全重新设计的内存子系统,其工作频率为6 GHz。他们允许将内存控制器的数量从六个减少到四个。

麦克斯韦


2014年,Nvidia发布了名为Maxwell的第十代GPU。如GM107技术文档[8]所述,第一代架构的座右铭是“每消耗一瓦特的能源效率最高,性能卓越。” 这些卡的位置适用于“功率受限的环境,例如笔记本电脑和小型(SFF)PC”。

最重要的决定是放弃开普勒结构,而放弃SM中CUDA内核的数量,这不是二的幂:某些内核变得通用并以半扭曲模式工作。在架构历史上,SMM的内核数量首次少于其前身:“仅” 128个内核。

匹配纤芯数量和翘曲尺寸可改善晶体分割,从而节省空间和能源。


一个2014年的SMM具有与2006年整个GTX 8800一样多的内核(128)。

第二代Maxwell(在技术文档GM200 [9]中进行了描述)在保持第一代能源效率的同时显着提高了生产率。

该工艺技术保持在28纳米,因此Nvidia工程师无法求助于简单的小型化来提高生产率。但是,SMM内核数量的减少减小了它们的尺寸,因此可以在芯片上放置更多的SMM。与开普勒相比,第二代Maxwell将SMM的数量增加了一倍,而晶体面积仅增加了25%。

在增强功能列表中,您还可以找到简化的调度逻辑,该逻辑可减少调度的冗余冗余数和计算延迟,从而确保增加了经纱使用的最佳性。此外,内存频率增加了15%。

研究Maxwell GM200框图已经开始使您感到疲劳。但是我们仍然仔细检查它。具有GM200晶体和24 SMM的旗舰NVIDIA GeForce GTX 980 Ti卡承诺提供3072个内核和6,060 gigaflops [10]


GM200安装在GeForce GTX 980 Ti中。

帕斯卡


在2016年,Nvidia推出了Pascal。GP104技术文档[11]给人留下了深刻的印象,因为Pascal SM看上去与Maxwell SMM完全一样。缺少SM更改并不会导致性能停滞,因为16纳米制程技术使我们可以放置更多SM,并使千兆字节的数量再次加倍。

其他重大改进包括基于全新GDDR5X的存储系统。得益于八个内存控制器,256位内存接口提供了10吉普的传输速度,内存带宽增加了43%,并减少了warp的停机时间。

带有GP102芯片和28个TSM的旗舰NVIDIA GeForce GTX 1080 Ti承诺了3584个内核和11,340吉比特[12]


GP104安装在GeForce GTX 1080中。

图灵


随着2018年Turing的发布,Nvidia迈出了“十年来最大的建筑步骤” [13]。在Turing SM中,不仅出现了具有人工智能的专用Tensor核心,而且还出现了用于光线追踪(rautracing,RT)的核心。这种零散的结构让我想起了特斯拉之前存在的分层架构,这再次证明了历史喜欢重复。


除新内核外,图灵还具有三个重要功能。首先,CUDA内核现已成为超标量,它允许并行执行带有整数和浮点数的指令。如果您能找到1996年,那么这可能会让您想起英特尔的“创新”架构。

其次,由16个控制器支持的GDDR6X上的新内存子系统现在能够提供14 gigaflops。

第三,流现在在扭曲中没有公共指令指针(IP)。多亏了Volta中的独立线程调度,每个线程都有自己的IP。结果,SM可以更灵活地配置扭曲的调度流,而无需尽快收敛。

带有TU102和68个TSM晶体的旗舰NVIDIA GeForce GTX 2080 Ti有4352个,达到13个45 gigflops [14]我没有绘制框图,因为它看起来像是模糊的绿色斑点。

接下来等待我们的是什么


据传言,代号为Ampere的下一代架构将在2020年宣布。正如英特尔在Ice Lake上证明的那样,使用7纳米工艺技术仍具有微型化的潜力,几乎毫无疑问,英伟达将其用于进一步降低SM并将其性能提高一倍。


每个Nvidia芯片/卡的Teraflops / s(数据来源:techpowerup.com)。

有趣的是,英伟达如何继续发展具有三种执行不同任务的核心的晶体的想法。我们会看到晶体,张量核或RT核的整个状态吗?好奇。

参考资料


[1]来源:重新审视名片Raytracer
[2]来源:Fermi:第一个完整的GPU计算架构
[3]来源:NVIDIA GeForce 8800 GTX(techpowerup.com)
[4]来源:Fermi(GF100)白皮书
[5]来源:NVIDIA GeForce GTX 480
[6]来源:Kepler(GK104)白皮书
[7]来源:NVIDIA GeForce GTX 680
[8]来源:Maxwell Gen1(GM107)白皮书
[9]来源:Maxwell Gen2(GM200)白皮书
[10]来源:NVIDIA GeForce GTX 980 Ti
[11]来源:Pascal(GP102)白皮书
[12]来源:NVIDIA GeForce GTX 1080 Ti
[13]来源:Turing(TU102)白皮书
[14]来源:NVIDIA GeForce GTX 2080 Ti

All Articles