NVIDIA在2006年发布的统一特斯拉架构解决了日益复杂的问题。在G80模具中,层与层之间没有更多的区别。流多处理器(SM)取代了所有以前的单元,这要归功于它能够无差别地运行顶点、碎片和几何体内核(kernel";kernel)。根据流水线的需要,通过交换每个SM运行的内核自动实现负载平衡。我们几乎从NV30/NV40中丢弃了整个着色器架构,并使用新的通用处理器架构(SIMT)从头开始创建了一个新的着色器架构,这也引入了新的处理器设计方法。
不再支持SIMD,着色器单元现在每个时钟可以处理一个整数或一个浮点32指令。SM接收以32条为一组的称为经纱的线程。理想情况下,WARP中的所有线程将同时执行相同的指令,只是针对不同的数据(因此称为SIMT)。多线程指令单元(MT)负责启用/禁用WARP中的线程,以防它们的指令指针(IP)聚合/发散。这里有两个SFU单元来帮助进行复杂的数学计算,如平方根反比、sin、cos、exp和rcp。这些单元也能够在每个时钟执行一条指令,但是因为它们只有两条,所以WARP执行速度除以4。Float64没有硬件支持,它是由软件完成的,极大地影响了执行速度。当SM可以通过始终具有可调度的Warps来隐藏内存延迟时,而且当Warp中的线程没有分歧时(控制流将它们保持在相同的指令路径上),SM将以其最大潜力执行。4KiB寄存器文件(RF)是存储线程状态的位置。消耗太多堆栈的线程会减少可以保持运行的线程数量,并会降低性能。特斯拉的旗舰芯片是90纳米的G80,在GeForce 8800GTX中具有特色。两个SMS与纹理单元和TeX L1高速缓存一起捆绑到纹理处理器集群(TPC)中。在8TPC的情况下,G80公布了128个内核,生成了345.6个Gflop[3]。8800GTX卡在当时非常受欢迎,收到了极好的评论,受到了负担得起的客户的喜爱。它是如此强大,以至于在发布13个月后,它仍然是市场上速度最快的GPU之一。与特斯拉一起,NVIDIA推出了计算统一设备架构(CUDA)C编程语言,这是C99的超集。这让GPGPU爱好者松了一口气,他们欢迎用GLSL着色器和纹理欺骗GPU的另一种选择。尽管本节广泛关注SM,但它只是系统的一半。SM需要提供驻留在GPU存储器中的指令和数据。为了避免停滞,GPU不会像CPU那样试图避免带有大量缓存和投机的内存旅行。GPU通过使内存总线饱和来满足数以千计的线程I/O来实现延迟。为此,像G80这样的芯片通过六条双向DRAM存储线实现了高内存吞吐量。
特斯拉是一个冒险的举动,结果证明是一件非常好的事情。它非常成功,在接下来的二十年里成为了NVIDIA图形处理器的基础。虽然从那时起我们确实进行了重大的架构更改(费米是一个重大的系统架构更改,Maxwell是处理器设计的另一个重大更改),但我们在G80中引入的基本结构至今仍在很大程度上保留着[Pascal]。
2010年,NVIDIA发布了基于其全新费米架构的GF100。他们最新芯片的内部结构在费米白皮书中有大量描述[4]。执行模型仍然围绕SM上调度的32个线程的偏差。多亏了40纳米的制程,NVIDIA将所有东西都翻了一番/翻了四番。SM现在可以同时调度两个半翘曲(16个线程),这要归功于16个CUDA内核的两个阵列。由于每个内核每个时钟执行一条指令,因此SM可以在每个时钟有效地引退一条WARP指令(容量是Tesla SM的4倍)。特种部队的数量也有所增加,尽管没有那么多,因为运力只增加了一倍。可以推断,这些类型的指令并没有被广泛使用。对Float64有半硬件支持,其中操作由两个CUDA内核组合而成。GF100可以在单个时钟内进行整数乘法运算,这要归功于32位ALU(特斯拉为24位),并且使用融合乘加(FMA)技术从IEEE 754-1985移动到IEEE 754-2008的Float32流水线具有更好的精度(比特斯拉使用的MAD更精确)。从编程的角度来看,Fermi的统一内存系统允许CUDA C使用C++特性(如对象、虚拟方法和异常)进行扩展。随着纹理单位现在成为SM的一部分,TPC的概念消失了。取而代之的是具有四个SM的图形处理器群集(GPC)。最后但并非最不重要的是,SM
有传言称,代号为Ampere的下一个架构将于2020年晚些时候宣布。由于英特尔证明了7纳米的冰湖还有小型化的空间,毫无疑问,NVIDIA将利用它进一步缩小其SM,并再次将性能提高一倍。有趣的是,既然现在有三种不同用途的内核,NVIDIA将如何继续发展下去,这将是令人感兴趣的。我们会看到模具完全由张量芯或RT芯组成吗?我很好奇想知道。
*