光与影的图形革新,NVIDIA图灵核心架构详解

百家 作者:微型计算机 2018-09-19 13:36:20

英伟达在SIGGRAPH 2018正式发布了图灵架构和相关产品,随后的GeForce RTX 20家族也粉墨登场。从图灵架构在大会和随后各大媒体的给出的信息来看,无论是功能还是性能,图灵架构都堪称GPU发展史上的一次革命,甚至英伟达官方在介绍中都宣称图灵是“Graphics Reinvented”。且不论这里的意思是“彻底改造”还是“重新发明”,就图灵架构本身,就已经让人足够惊讶,足够震撼。


2018年8月14日的SIGGRAPH 2018现场,黄仁勋身穿一身黑色的皮衣走上演讲台。在拿出全新一代GPU的时候,黄仁勋评价这款产品时称其为“英伟达十多年来在计算机图形领域最重要的创新”。当然,类似的话语可能在很多场合都能听到,比如互联网业界不断的“重新发明”和各种各样的“改变历史”,于是乎,真正的“重新发明”和“改变历史”却容易被忽视。


但是,在本文的开头,我们就不得不承认,“图灵”架构和其所代表的GPU,是计算机图形领域真正的改变和革新,它配得上“重新发明”和“改变历史”的宣称,不仅如此,随着AI技术、RT技术以及各种高级渲染技术的出现,“图灵”架构和其所代表的GPU正在将人们带入一个全新的时代,一个虚拟的真实世界。


▲英伟达在SIGGRAPH 2018上发布了图灵架构。


▲图灵架构TU102核心。图灵架构代表了GPU发展史上的一次重要变革。


图灵架构——核心特点综述


为了让读者更为快速的了解到图灵架构都包含哪些优势,本文先将图灵架构所有的关键性技术和特性罗列在这一部分。随后本文会根据不同的GPU产品进一步分析这些技术的实际意义和实现方式。


1.效率提升50%——全新的SM架构

图灵的流式多处理器(Streaming Multiprocessor)采用全新的架构,被称为图灵SM。和上一代帕斯卡架构相比,每个CUDA Core的性能提升50%。性能提升的主要原因是两个关键性的改进:一是图灵SM添加了新的独立整数数据路径,可以和浮点数据路径同时执行。二是图灵SM的内存路径已经经过重新设计,将共享内容、纹理缓存和内存读取缓存统一在一起,对于一些常见的工作负载,这可以为L1缓存提供2倍以上的带宽和2倍以上的容量。


2.走向AI——加入张量核心

图灵架构中加入了张量核心,专门用于执行张量或者矩阵运算,其主要目的是用于为深度学习计算提供加速。图灵中的张量核心和之前伏打架构中的类似,但是图灵张量核心还是做出了进一步的优化,包括支持INT8和INT4精度,当然也能够支持传统的FP16精度。


借由深度学习带来的AI能力,图灵实现名为深度学习超级采样(Deep Learning Super Sampling,简称DLSS)的技术,这项技术能够智能的判断图形内容,自主构简高质量的最终图像。和传统的TAA等抗锯齿技术相比,DLSS的资源要求更少,并且避免了诸如透明度场景和纹理模糊等问题。


3.革命——实时光线追踪加速

图灵架构引入了实时光线追踪技术,使得GPU能够进行实时的光线追踪计算,并且具有物理上精确地折射、反射和阴影计算能力。能够做到这一点是由于图灵架构中引入了全新的RT Core也就是光线追踪计算核心,RT Core能够支持的软件包括英伟达RTX技术,微软的DXR、英伟达OptiX、Vulkan等。


4.改变图像呈现方法——深度学习图形技术

英伟达推出了名为NGX的深度学习框架,能够利用DNN和一套神经服务来执行相关AI功能,实现加速计算和增强图形效果、渲染和其他应用程序的能力。目前英伟达推出的AI相关的功能包括DLSS、AI inPainting、AI Slow-Mo以及AI Super Rez等技术。


5.全新渲染模式——新加入的高级渲染技术

每一次英伟达更新GPU架构,都会加入一些高级渲染技术,在图灵架构上,英伟达新增了四个高级渲染技术,包括网格着色技术Mesh Shading,可变速率着色VRS,纹理空间着色和多视图渲染。


6.加强AI计算——用于推理的深度学习功能

这部分内容主要是指图灵架构在支持张量核心后,拥有了深度学习的推理能力,主要支持的部分包括CUDA和CuDNN,以及其他常见的深度学习框架。另外,图灵的张量核心还加强对INT8、INT4矩阵计算的支持。


7.其它:GDDR6、NVLink和VirtualLink

图灵架构还提供了对GDDR6、NVLink和VirtualLink的支持。其中GDDR6不用多说,NVLink是英伟达专属的高速总线,在民用卡上是首次使用,也是用在RTX显卡上取代SLI。VirtualLink主要目的是通过USB-C接口,提高显卡在VR设备上的方便性。


深入探寻图灵架构内部的秘密

在上文了解了图灵架构的相关技术特点后,本节将从具体产品开始,深入图灵架构的内部设计,揭示图灵架构设计的秘密。


从工艺开始——TSMC 12nm FFN

在之前英伟达发布伏打架构的相关产品时,就已经使用了台积电的12nm FFN工艺。台积电在2017年公布相关半导体的工艺研发进度时,曾经提到在16nm工艺之后的两个分支,其中一个是12nm FFC,另一个是更远一些的7nm。12nm FFC的工艺指标包括减少20%的芯片面积,采用更小的6T库用于取代目前的7.5T或者9T库。


▲不同厂商的标准单元尺寸。


▲采用更小尺寸的库文件可以有效缩减晶体管面积。


▲不同尺寸的库文件高度和体积都有所不同,其性能表现也略有差异。


在传统工艺的小型化道路上,栅极间距和金属布线间距是关键数据,减少这两个数据有助于减少整个芯片的面积。但是目前仅仅缩小这两个关键参数,也很难进一步提高晶体管密度、缩小产品尺寸。在这种情况下,另辟蹊径采用缩小标准单元尺寸、改进内部结构的方法就被提上了前台。


台积电在12nm FFC上采用的就是这样的方法,至于12nm FFN,则是台积电针对英伟达这样的大客户提出的特别优化的工艺,其本质和12nm FFC应该没有太大差别。在12nm上,台积电采用了6T库,另外还采用了多种优化手段,比如标准单元重叠布线、缩小晶体管之间的距离以节省面积等。


采用更小的6T库和各种手段缩小晶体管之间面积的方法,并不是没有任何副作用的。副作用也很明确,由于单元高度降低,单元性能会下降,反映在实际应用中就会发生最高频率难以提升等问题。但是对GPU来说这并不是问题,目前GPU运行频率最高不超过2GHz,远远未达工艺上限。反而由于单元面积缩小带来的ALU数量提升能进一步提高GPU的性能。这也是伏打架构、图灵架构发展的方向——更多的计算单元、更强的计算性能。


比大更大——三款不同的核心




▲从大到小分别为图灵TU102、TU104、TU106的核心架构简图。TU106的规模相当于TU102的50%。


图灵架构目前已经衍生出三种不同的核心,分别是TU102、TU104和TU106。值得注意的是,这三颗不同的核心它的面积、晶体管数量、计算单元数量并不像上代产品那样前者是后者的2倍。从目前的数据来看,TU106的面积和晶体管数量甚至不比帕斯卡架构的顶级产品GP102少多少。


▲图灵架构的GeForce产品使用的并非完整核心。本表格的数据采用的是创始人版本的频率下所能达到的性能。


目前图灵架构最完整、最大规模的芯片是TU102,其芯片面积高达754平方毫米,仅次于伏打架构的GV100核心。在半导体制造中,芯片面积和产品价格呈正比,相比上代帕斯卡架构的GP102,图灵TU102的首发价格高出不少也应该就可以理解了。另外值得一提的是TU106,在传统定义中,106应该是一颗中端核心,但是本次的TU106核心面积和GP102基本相当,从芯片面积角度来看,应该划入传统大核心行列,TU106并不是一颗典型的甜点级别中端显卡应该具有的配置。


具体到每款核心的配置而言的话,以TU102为例,TU102拥有6个GPC,每个GPC中,又包含了一个ROP单元和6个TPC。每个TPC包含2个SM。每个SM包含64个CUDA核心、8个张量核心、256KB寄存器、4个纹理单元和96KB L1/共享缓存配置。光线追踪功能由每个SM中内置的RT核心进行计算。这样一来,TU102的单元计算如下:

CUDA核心:64×2×6×6=4608个

张量核心:8×2×6×6=576个

RT核心:1×2×6×6=72个


另外,TU102还有144个FP64单元,用于执行相关双精度计算以实现架构的兼容性和普适性。从配置情况来看,应该是每个SM中配置了2个FP64单元,总计2*2*6*6=144个。但是目前英伟达给出的TU102架构简图中,并没有包含FP64单元的任何信息。


除了计算部分外,TU102的存储部分则包含了12个32bit的GDDR6内存控制器,每个内存控制器绑定了8个ROP单元和512KB L2缓存。完整的TU102核心包含了96个ROP单元和6144KB的L2缓存。外部链接方面,TU102和TU104都支持NVLink 2.0总线,可以用SLI或者其他的高速互联方案。TU102包含两个NVLink X8链路,每个链路在每个方向上都可以提供高达25Gb/s的传输带宽,总计总计双向带宽为100Gb/s,也就是12.5GB/s。


进一步看实际产品的话,目前图灵架构已经面世的产品分别是GeForce RTX 2080Ti、RTX 2080和RTX 2070三款。其中前两款都不是完整核心,RTX 2080Ti被屏蔽了4个SM(256个CUDA Core)和4个RT核心以及32个张量核心,显存位宽也从384bit降低到了352bit。另一款RTX 2080也并非完整核心,被屏蔽了2个SM(128个CUDA Core)和2个RT Core以及16个张量核心。完整产品的TU102和TU104被用作生产Quadro RTX6000和Quadro RTX 5000,毕竟专业计算卡的利润要高很多。


如何衡量新一代GPU的性能


▲根据英伟达的数据,在一次典型的混合计算中,不同核心占用的工作负载量是不同的。


目前的GPU已经变得如此复杂,因此用单一的性能指标来衡量它的性能显然是不够完整了。比如图灵架构的GPU,包含了光线追踪核心、张量核心、传统GPU部分以及整数核心等,这是一个典型的混合渲染模型。英伟达尝试在图灵GPU上运行实际应用程序来判断混合渲染模型的性能分布。根据英伟达的数据,最终得到了在一次混合计算中各个不同的核心运行的时间:

张量核心:20%

CUDA核心:80%

RT核心:40%

INT32核心:28%


根据这个结果,英伟达提出了一种名为RTX-OPS的算法,其具体的计算方式为:RTX-OPS=张量×20% + FP32 ×80% + RT-OPS×40% + INT32 × 28%


GTX 2080Ti的计算结果是:RTX-OPS = 114 ×20% + 14 × 80% + 100 × 40% + 14 × 28% = 78 RTX-OPS


其余的TU104和TU106也可以利用此方法得到RTX-OPS性能。这是英伟达对新一代显卡性能的全新定义。


两大变革——详解图灵流式多处理器架构


▲全新的图灵SM核心,注意分离的INT和FP、张量核心,还有下方的RT核。


▲英伟达数据显示,在分离了INT和FP计算之后,会带来大约36%的性能提升。


▲图灵全新的共享缓存架构效能比上代产品大幅度提升。


▲相比之前的SM架构,图灵的新SM架构在各种性能测试中提高了大约50%的综合性能。


图灵采用了全新设计的流式多处理器也就是SM。每个图灵TPC中包含2个SM,每个SM有64个FP32核心和64个INT32核心。和之前的帕斯卡结构有所不同的是,INT32核心是首次加入,之前的帕斯卡架构只有128个FP32核心。之所以需要加入INT整数核心,是因为图灵目前能够支持FP和INT并发操作,这项功能类似于伏打架构的独立线程调度。


另外,每个图灵SM还包含了8个混合精度的张量计算核心,单核心每周期可以运行64个混合张量计算(FMA),8个核心就可以运行1024个混合精度计算。RT计算方面,每个SM有一个RT核心。图灵张量核心和RT核心的作用我们后文还有详细解释。


具体到SM内核方面,每个图灵SM都会被划分为4个区块,每个区块有16个FP32核心和16个INT32核心、一个warp调度器和一个调度单元,每个warp调度器和调度单元每周期并发32个线程的任务。此外,每个区块包含了一个新的L0指令高速缓存和一个64KB的寄存器。四个区块共享96KB L1数据缓存/共享内存。


根据英伟达官方说明,图灵的SM的最重大改进在于对核心执行数据路路径的改进。一般来说,现代着色器的工作负载通常混合使用FP和算数指令,比如FADD或者FMAD搭配一些简单的指令——包括寻址或者整数加法、数据拾取、浮点比较大小、处理结果的大小值等。


在传统的计算体系中,只要有一个非浮点的指令进行,浮点指令就会停止并处于等待状态。根据英伟达的数据,目前图形计算中100个浮点指令会包含36条整数计算指令,传统算法需要互相等待,在图灵架构上FP和INT指令将分别被移动到单独的管道,这将带来至少36%的浮点计算能力提升。


在存储系统方面,图灵的SM设计还为共享内存、L1和纹理缓存引入了全新的统一缓存架构,这种统一设计允许L1缓存调配资源,还允许重新配置共享缓存容量使其变得更大,尤其是在共享缓存分配没有充分使用所有的缓存时。举例来说,图灵SM中的96KB的缓存可灵活配置,比如传统图形计算可以划分为64KB的图形着色器缓存和32KB纹理缓存,但是在计算工作负载下,又可以变化为32KB的共享内存和64KB L1缓存,或者反过来。相比帕斯卡,图灵SM中的缓存设计带来了2倍的L1带宽、更低的L1命中延迟、最高2.7倍的L1容量和2倍的L2容量。

 

由于图灵的SM架构在数据执行和缓存设计上的重大改进,因此图灵的SM核心平均效能达到了上代产品的1.5倍,英伟达官方用一组测试数据证明了这个观点。


图灵的张量核心

▲图灵是第二个在民用级别GPU中加入张量核心的GPU,第一个是伏打架构的GV100。


图灵是第二个为GPU加入张量核心的架构。图灵张量核心类似于在之前伏打架构GV100中引入的张量核心,支持高精度的FP16计算,也能够支持比较简单快速的INT8和INT4进度模式。张量核心的主要用于加速矩阵——矩阵乘法,这是训练神经网络和推理功能的核心算法,可以根据给定的输入信息训练DNN深度神经网络来实现推断和传递相关信息,诸如人脸识别、汽车类型识别、实时语音翻译以及个性化用户推荐等。将张量核心引入图灵架构后,可以为游戏和相关应用带来深度学习的加持。图灵张量核心能够基于英伟达NGX神经服务功能实现基于AI的图形增强、渲染增强和其他功能。这部分内容后文还有详细介绍。


以TU102为例,每个SM中包含了8个张量核心,总计576个。每个SM中的8个张量核心可以执行512个FP16乘法和累加计算,或者2018个FP混合精度计算(如前文),INT8模式下的计算速度是FP16模式下的两倍,比如每周期2048个整数计算,INT4这种低精度计算下速度还要翻倍,能够达到每周4096个整数计算。


由于张量核心的存在,在进行深度学习相关的神经网络计算时,图灵能够以快得多的速度完成计算,这一点远远胜出前代帕斯卡架构的任何核心。有关深度学习和张量计算的内容,有兴趣的读者可以参考本刊对伏打架构的解读文章。


更快、更有效——图灵的存储和显示子系统架构


除了SM和计算体系架构外,图灵在内存子系统方面也有着巨大的进步。其主要改进包括主内存的类型(GDDR6支持),高速缓存和数据压缩能力,改进和增强的GPU计算能力、新的显示和视频编解码模块、加强的VR功能等。


GDDR6:快!

▲GDDR6颗粒带来了更高的速速、更大的带宽和更低的功耗。图为三星GDDR6颗粒。


▲图灵是首次采用GDDR6的GPU架构,为此图灵彻底重置了内存控制器部分。


显示器分辨率的不断提升和渲染技术不断复杂化,都对GPU的内存带宽和内存容量提出了要求。对于这一点业内曾有过分歧。AMD在很早就用上了HBM显存,而英伟达在民用级GPU上则坚持GDDR道路,并首先使用了GDDR5X显存颗粒。在图灵架构上,英伟达开始使用更快的GDDR6显存颗粒。


GDDR6显存颗粒的起步频率是12Gbps,有望进一步提升至16Gbps甚至更高,目前图灵使用的GDDR6速度为14Gbps。为了使用如此快速的显存颗粒,图灵的显存控制器经过了重新设计,以适应新的显存颗粒带来的速度、功耗和噪音挑战,英伟达宣称图灵的电路和封装设计降低了40%的信号串扰。另外,图灵的显存控制器还加入了时钟门控设计,方便GPU根据显存接口的繁忙程度调整功耗配比。


在使用了GDDR6后,TU102的显存带宽高达672GB/s,是上代帕斯卡架构GP102的155%,速度更快。


数据压缩能力——有效带宽增加50%


▲图灵改进了数据压缩能力,并针对不同数据采用不同压缩方法,有效带宽相比上代产品增加50%。


显存带宽提升也并不意味着数据可以无限制使用,对GPU而言,显存带宽是永远不够的。现代GPU设计中都要采用各种各样的数据压缩技术来降低存储带宽的压力。英伟达在之前的帕斯卡架构中就加入了多种数据压缩算法,GPU可以根据不同的数据特征来选取不同的压缩算法,从而获得较高的效率并减少写入内存或者读取至L2的数据量。图灵架构在这方面做出了一定的优化,和帕斯卡架构相比,图灵的压缩算法能够进一步降低带宽,减少流量,实际有效带宽相比帕斯卡增加了50%。


显示能力和编解码能力


▲图灵编解码能力一览,目前图灵可以支持8K@30Hz HDR视频。


▲英伟达是VirtualLink组织的成员,目前已经将VirtualLink的相关标准引入图灵架构。


▲图灵架构的全新显卡都提供了对USB-C接口的支持。


在显示能力方面图灵做出了加强,图灵架构的GPU内置了一颗全新设计的显示引擎,能够支持更高分辨率、支持DP 1.4a接口(带宽8.1Gbps,支持8K@60Hz,),支持HDR以及ESA的显示流压缩DSC1.2技术,能够提供无损视觉压缩。值得一提的是,图灵架构GPU能够以60Hz的频率驱动2个8K分辨率显示器,每个显示器使用一根数据线连接,也可以选用USB-C。


除了显示芯片外,新的显示引擎还加入了原生HDR处理和色调映射,后者是一项在传统标准动态范围显示器上近似显示高动态范围图像的技术,图灵目前可以支持ITU-E 建议书中的BT.2100标准定义的色调映射,以避免不同的HDR显示器上发生色彩偏移。


在编解码能力方面,图灵架构的GPU支持增强型NVENC编码器单元,可以以30fps的速度实现对H.265(HEVC)8K编码的支持。新的NVENC编码器在H.265模式下能够节约高达25%的比特率,在H.264下也能够提供15%的比特率节省。除了编码器的能力外,在解码方面,NVDEC解码器目前支持H.264 8K@30fps视频、VP9编码的10/12bit HDR解码或者HEVC YUV444 10/12b HDR解码。


和帕斯卡的GPU相比,图灵的编码器提高了编解码质量,并且可以大大降低CPU负载。一个例子就是CPU一般难以完成4K流式传输的编码,但是图灵GPU可以玩成这样的任务,这使得线上的4K高清直播或者数据实时传输成为可能。


除了上述内容外,图灵GPU在功能方面的改进还包括USB-C和支持VirtualLink,这项技术主要是用于和VR设备配合,改变目前VR设备在连接PC时需要多条数据线的情况,仅使用USB-C接口即可完成数据、音频和电源输出。由于本刊之前对VirtualLink相应的技术已经做过详细解读,因此在本文中不再赘述。


生而为光——图灵光线追踪技术解析


从技术上来说,光线追踪计算是典型的计算密集型计算。虽然这项技术的基本算法和实现方式早在上个世纪70年代乃至随后的十几年就已经基本完善,但是实时光线追踪在图灵之前依旧无法市场化的存在。


比如英伟达在之前的产品中推出了GPU加速的光线追踪算法和相关API,这些算法和API比如NVIDIAIray以及OptiX都是为离线渲染的光线追踪准备的,艺术家和设计师可以利用这些算法实现高速的光线追踪场景生成,数分钟就可以得到一张精美的光线追踪场景画面,但这对游戏需要每秒30帧乃至更高的速度才能具有基本的娱乐性和交互性而言,这样的实现能力是完全不够的。


▲英伟达之前公布的SOL Ray Tracing Demo,采用的是多路TITAN V显卡进行实时计算,目前已经可以在图灵上以更高的速度实时运行。


▲光栅化和图灵混合渲染模式对比。


▲英伟达建议人们采用混合光线追踪和光栅化的方法实现场景,毕竟光栅化下发展出了大量高效率且质量不错的技术。


▲光栅化和加入光线追踪后不同的渲染流程对比。


在GPU上进行实时光线追踪是一个巨大的技术挑战,英伟达的GPU硬件和软件团队经过了数十年的合作才基本解决这个问题。目前图灵架构中包含了能够快速完成光线追踪计算的引擎,被称为RT核心,拥有RT核心的图灵架构GPU搭配英伟达的RTX软件技术,终于使得实时光线追踪的计算成为了可能。


说起光线追踪,就不得不提起传统的光栅化处理。传统的实时3D图形计算采用的是光栅化的方式。目前主流引擎都对光栅化渲染提供了非常好的支持,光栅化也能够实现相当逼真的3D场景(虽然光栅化完成后3D信息就已经转化为2D场景)。


但是,由于光栅化计算并不是对物体和光线进行了真正的交互处理,因此存在非常多的局限性。比如静态的光照贴图在某场景下是完全正确的,但是移动场景后就会出现违反物理事实的错误,再比如光栅化的阴影经常遭受混叠和光泄露等问题,比如屏幕空间反射只能反射屏幕上可见对象,而实际情况往往复杂太多。这些问题都是源自于光栅化本身,这种渲染方法在很大程度上并不考虑真正的光线交互,很多时候它只是2D化的3D场景而已,就像一张可以移动的绘画。


光栅化出现了很多难以处理的问题,如果依旧在光栅化的条件下解决这些问题也需要高昂的代价。在这种情况下,通过引入光线追踪,让光线在3D场景中通过碰撞和反射、折射来生成真正的数据和信息,就不失为一个很好的解决手段了。


需要注意的是,只使用光线追踪来计算实时场景依旧难以实现的,计算量过于巨大且在部分场景效费比并不高。因此在图灵架构上,英伟达采用了折中的方法,那就是光线追踪和光栅化的组合。在这种方法中,光栅化用于最有效的地方,光线追踪用于那些相比光栅化而言最具视觉效果的地方,比如渲染反射、折射和阴影。因此,图灵架构支持的是“光栅化+光线追踪”,这是一种新的混合渲染方式,同时拥有光栅化和光线追踪的优势。


举例来说,在实际的开发过程中,光栅化和Z缓冲在确定对象可见性方面要快很多,并且可以替代光线追踪跟踪过程的主光线投射阶段。在这个阶段之后,光线追踪就可以进行二次光线生成和跟踪,以生成高质量、经过物理校正的反射、折射和阴影。在这个阶段,开发人员还可以使用材料属性阀值来确定在场景中执行光线追踪的区域,这种技术可以指定那种具有一定反射率的表面(例如70%)才会触发在该表面上应用光线追踪并生成二次光线。通过混合光线追踪和光栅化处理,开发人员可以在高帧率和图像质量之间进行平衡,对高保真用户而言,从主光线到次级光线都可以使用光线追踪以获得最出色的图像质量。


在光线追踪的计算方面,虽然图灵架构基于RT核心能够完成实时光线追踪,但是每个像素或者物体表面位置的主要或者次要光线的数量会根据许多其他因素而变化,包括场景的复杂度、分辨率、场景中渲染的其他图形效果,当然还有GPU的计算能力。


对实时光线追踪而言,不要指望每个像素都能实施投射上百条光线并计算出来,实际上图灵架构对实时光线追踪的计算也是非常节省的,一般指计算较少的光线,但这往往会导致噪点的出现,这个时候需要特殊的去噪滤波技术来降低噪点,英伟达实时光线追踪搭配了专属的降噪模块,可以显著减少每个像素所需的光线数量,同时也能够产生不错的效果。在这种算法的帮助下,生成的图形质量甚至和高端电影特效一样完美。


目前图灵架构的GPU可以进行下列渲染的光线追踪计算:

1. 折射和反射

2. 阴影和环境光遮蔽计算

3. 全局照明计算

4. 实时和离线的光照贴图烘焙

5. 对拍摄产品的高品质美化预览

6. 用于头戴式VR设备主光线渲染

7. 遮挡剔除

8. 物理、碰撞检测、粒子模拟

9. 音频模拟,比如基于OptiX API构建的NVIDIA VRworks音效

10. AI可见性检查

11. 引擎内路径跟踪,生成参考截图等


创新实践——图灵RT核心解析


图灵在光线追踪上的最大特色就是加入了专用的RT核心。RT核心的作用就是加速边界体积层次(BVH)遍历和光线/三角形(基元)交叉测试(光线投射)。


▲在图灵之前的GPU也支持光线追踪,不过BVH遍历会耗尽GPU所有资源。


▲在加入了硬件光线追踪模块后,BVH遍历和和接下来的交叉测试都可以交给专用硬件,效率得到了巨大提升。


▲图灵光线追踪效能大约在帕斯卡架构的十倍以上。


光线追踪计算简介


光线追踪是一种渲染技术,它的主要目的是通过计算光和渲染物体之间的反应,得到正确的反射、折射、阴影、间接照明等结果,从而逼真的模拟场景和场景内对象的光照情况。目前主流的光线追踪技术并不是将场景内的光线投射至用户眼睛,而是通过2D观察平面(像素平面)将光线实际投射或者从视图相机向后拍摄到3D场景中,并回到光源的光线。一般来说,反向跟踪过程比正向跟踪光源的光线更有效,因为只有穿过视平面到达眼睛的光线才会被计算。


▲目前主流的光线追踪算法是从观察者出发光线,倒序计算。


▲一个典型的BVH过程,通过不断的逼近范围,最终触及三角形。


▲BVH过程的流程图,图片中所有物体都被范围包裹,光线只需要对树形结构遍历即可完成。


光线追踪计算的过程包含了很多内容,物体表面的材质和光滑程度、色彩、不同类型的反射和折射或者吸收光,都会影响最终的计算结果。逼真的场景计算除了和这些因素有关外,还和射入场景的光线数量有关,以及和材质交互后产生的二次光线数量。很多因素都影响射入光线数量,包括但不限于希望进行光线追踪的物体的数量和类型,以及GPU的计算能力等。


在具体算法实现上,光线追踪计算实际上通过图像平面中的每个像素从相机(观察者的眼睛)射出一条或者多条光线,然后测试光线是否和场景中的任何基元相交。如果相交,则确定从原点到基元的距离,衡量基元的颜色数据,这有助于确定最终颜色像素。接下来,光线可能会反弹并撞击其他物体,并从其他物体中获得颜色和光照信息,一直到最后。在这种算法中,光线和基元的碰撞就显得非常重要。可以使用不同类型的技术来优化加速光线和基元的相交测试,并减少必须投射的光线数量从而提高性能。


由于光线和基元在场景中的碰撞检测非常重要,因此一种流行的算法就是使用基于树的加速结构,其中包含了多个分层排列的边界框,边界框包围或者围绕着不同数量的场景几何体,大的边界框可能包含了较小的边界框,较小的边界框内再包含实际的场景物体。这种分层排列的边界框被称为边界体积层次结构,或者BVH。BVH通常被列成具有多个级别的树形结构,每个级别都有一个或者多个节点,从顶层的单根节点开始,向下流入不同级别的多个后代节点。


简单来说,BVH的运作过程,就像将场景中的物体分为很多组,每组用边界确定范围。当光线撞击到边界时再判断穿入后是否和下一个组继续碰撞,直到最终撞到基元,完成光线/三角形交叉测试(光线投射)。当光线没有碰撞任何边界时,则结束此次追踪过程。


在了解了光线追踪计算的基本过程后,就完全可以理解有关RT核心的相关内容了。在没有专用的加速硬件时,完成一次BVH遍历和光线投射,需要不断的通过着色器来循环处理光线的BVH过程,每个光线需要数千个指令来测试BVH中的边界框交点,直到最终击中基元并且交叉处的颜色有助于最终像素的颜色确定(如果没有击中,则可以使用背景颜色替换),这样一来,GPU将不断的重复光线追踪的遍历过程,在遍历结束之前无法对GPU进行实时操作。

▲英伟达演示的有关不同降噪选择下光线追踪阴影和传统阴影映射的对比。


▲阴影映射和光线追踪降噪前阴影贴图、光线追踪降噪后阴影贴图对比,光线追踪降噪后阴影效果显然更为出色。


▲SSAO和光线追踪AO的实际效果对比,可见后者逼真太多。


▲光线追踪目前不仅在游戏中使用,也可以在建筑业等行业使用。


▲光线追踪在游戏中的实际应用,注意车身上的火焰反射。


但是,图灵的RT核心可以处理所有的BVH遍历和最终的光线投射。因为BVH遍历和光线投射可以执行固定的算法,因此设计人员可以将其固化在硬件中,利用固化的硬件单元来执行这种暴力计算,从而将GPU流处理器等从中解脱出来。RT核心包括两个专用单元,其中一个进行边界框测试,完成BVH遍历;另一个则进行三角形交叉测试。GPU或SM只需要启动这个过程,RT核心就会高效率的完成这两个步骤,并向SM反馈命中或者不命中。SM的其他部分可以自由执行其他的图形任务或者计算工作,两不干涉。


另外值得一提的是,由于目前的光线追踪技术无法计算如此多的光线,因此偏向于采用较少的光线计算,然而这也带来了噪点。噪点的解决方法依靠降噪技术,后者能够显著改善可能有稀疏数据构成的噪点图像视觉质量。由于不同类型的噪点有各自不同的产生原因,因此也有相对应降噪算法存在。英伟达目前正在基于AI和非AI算法进行降噪,并且希望未来通过AI技术取代非AI技术降噪算法,最终实现正确的光照表面。


性能方面,使用RT核心的图灵架构GPU在光线追踪能力方面明显快于帕斯卡架构的GPU。比较GTX1080Ti和GTX2080Ti,前者执行速度大约为1.1GigaRays,后者可以达到前者速度的十倍以上。


改变图像的呈现方式——英伟达NGX技术


前文曾经提到,图灵架构是第二个在GPU中加入了AI加速模块的产品,这意味着图灵有很多机会利用AI能力来改善图形效果,这种方法将彻底改变图像呈现的方式,可以说在图灵架构的GPU在一定程度上不再是一个计算设备,而是一个“绘画设备”。


基于这种能力,英伟达为图灵架构带来了一整套新技术,被称为Neural Graphics Acceleration,也就是“神经图形加速”,简称为NGX。NGX利用深度神经网络和神经服务来执行AI功能。需要注意的是,NGX只在图灵和以后的GPU产品上有用,之前的GPU产品无法使用这项功能。


NGX的软件架构

NGX的相关软件架构和英伟达的硬件驱动紧密相连,并且和英伟达的云端服务相关。简单来说,英伟达的NGX API为游戏和应用程序提供了AI访问接口,这些功能已经被英伟达预先培训好并且集成完成,应用程序能够很轻松的将多个AI特性集成在里面,然后GPU检测到支持AI功能后就可以开始运行了。


具体到功能的话,GeForce用户可以使用GeForce Experience软件,Quadro用户可以下载Quadro Experience。这两个软件下载并安装后,会和NGX进行通讯,确定用户的设备上存在的游戏和应用程序和NGX的相关性,然后下载相应的DNN模型以供后续使用。


深度学习超级采样DLSS

▲DLSS能带来远远超过TAA的画质,性能比TAA还要好出不少。


▲DLSS 2x和64倍SSAA画质对比,几乎完全相同。


▲DLSS有更为出色的时间稳定性和图像清晰度,几乎不会造成纹理模糊。


英伟达NGX的首个应用就是DLSS。目前大部分游戏在渲染完成后都并非直接输出至屏幕,而是需要进行一系列后处理。比如抗锯齿功能,包含TAA时间抗锯齿、FXAA快速自适应抗锯齿等。但是这些抗锯齿或者其他优化图像的功能都存在问题,比如造成模糊、错误的处理图形元素等。


对这种类型的问题而言,单纯依赖算法是不可能解决的。因为算法不可能知道图像中哪些东西是什么。但是对AI来说,这是一个非常好的应用场合,通过AI的对电脑进行数万、数十万的训练后,AI可以识别出不同的画面元素,并且可以自动补充以产生高质量的图形效果。


这就是DLSS工作的基本原理。根据英伟达的数据,他们先是收集了游戏开启了64倍全屏幕抗锯齿的完美画质作为参考图样,然后获取正常渲染获取的原始图像,接下来训练DLSS匹配完美画质图样,通过每个输入要求DLSS产生输出,测量这些输出和完美画质图样之间的差距,并且根据差值调整网格权重,再多次迭代后,DLSS能够输出的画面质量相比原始完美画面已经非常接近了。这个时候DLSS就拥有了对某个应用程序画面优化的稳定的模型。接下来用户通过GFE等软件下载这个模型,并将其通过图灵GPU应用在自己对应的游戏上,就能够实现接近完美画质的图像。


除了上述标准DLSS功能外,英伟达还提供了DLSS2X功能,这种功能的输入以最终目标分辨率呈现,然后以更大的DLSS网络组合产生接近64倍超级采样水平的输出图像,实现图像质量的提升。


图像修复

▲AI可以帮助用户“脑补”缺失的图像。


图像修复功能有趣之处在于,它允许应用程序提供从现有图像中删除部分内容的功能,然后再使用NGX AI来将其补完。例如可以移除风景照片中的电线、合影照的路人等。一般来说,这种修复功能的最大问题在于如何确保修补的画面真实性。NGX的方法是利用大量真实世界的图像训练获得的模型,来实现内容的合成。从官方给出的例子来说,效果很不错。


AI Slow-Mo和AI Super Rez

▲Super Rez技术能够智能识别并创造新的像素,因此图像锐利度要高很多。


AI Slow-Mo主要用于AI技术奖插值帧插入视频流,以提供平滑的慢动作视频。NGX通过分析特征和对象帧,能够自动识别对象和摄像机移动,创建新的插值帧。


AI Super Rez则可以通过AI技术将图像的分辨率提升2倍、4倍甚至8倍。和传统的过滤、滤镜等方法不同的是,AI Super Rez通过AI技术来识别图像并智能的创造新的像素实现图像的放大,者带来图像更锐利的放大,并且能够正确的保留景深和各种细节。AI Super Rez另一个应用场景是视频,视频经过AI Super Rez放大,可以实现将1080p视频放大至4K,PSNR值比传统的双三次插值高出1~2dB。


高级渲染技术

图灵GPU除了光线追踪和AI外,还带来了一些高级渲染技术,这些技术都适用于光栅化渲染,毕竟目前光栅化依旧是3D实时渲染的主流。不过这些内容专业性过高,因此本文只是简单介绍其中的内容。


网格着色Mesh Shading

现实世界的视觉极其丰富,比如布满岩石的海滩,数目丰富的森林等。但是由于这些复杂场景存在太多的顶点信息,因此对系统造成了很大压力。因为目前的计算流程每个对象都需要来自CPU的绘图调用,如果是绘制单个对象,几何着色器和曲面细分等非常有效,如果是复杂的多个对象,就对系统压力很大了。


▲如此复杂的场景对系统来说顶点压力极大。


▲Mesh Shading引入了全新的着色器,能够对顶点实现自动的“批处理”。


在这个情况下,Mesh Shading引入了两个新的着色器,任务着色器和网格着色器。这两个新的着色器功能类似,但是具有更大的自由度。其中任务着色器能够由开发人员定义其输入和输出,再由后者网格着色器以多线程的方式自主生成一大片三角形给光栅单元。因此现在开发人员可以直接向GPU发送一个包含多个物体的包,交由GPU一并处理完成,消除了CPU的瓶颈也简化了开发流程。另外Mesh Shading还可以支持自动LOD技术,能够在观察者较远的情况下降低顶点和细节,节约系统资源。


比率可变着色Varable Rate Shading

▲VRS功能可以在几乎不损失画质的情况下节约渲染资源。


▲内容自适应着色会根据场景情况,自动降低部分场景着色,节约资源。 


比率可变着色是一种新的能够实现着色比率控制的技术。它能够对屏幕上由16x16个像素组成的区域进行着色比率变换,配之以七种不同的着色比率,并且还提供了三种可以使用VRS的算法,分别是内容自适应着色、运动自适应着色和视网膜中央凹着色。这三种不同的着色方式分别对应着不同的应用场景。


其中内容自适应着色会降低前一帧细节较低的场景,比如天空、墙壁或者屋顶等;运动自适应着色会降低运动模糊范围内的画面,模糊后损失了太多细节,也没有必要用全尺寸着色来体现;视网膜中央凹着色则是用于VR设备较多,对视网膜注意的中央部分提供高精度着色,其余部分则降低精度。


在使用VRS和相应的算法后,场景中不同内容受到不同比率的影响会降低着色倍数,因此能够带来一定的性能提升。对用户来说,由于VRS功能将用户不关注的区域的着色率降低,因此基本上不会带来肉眼可见的画面效果降低。


纹理空间着色Texture Space Shading

▲纹理空间着色的意义在于能够以完全独立的速率和独立的坐标系统对纹理可见性和外观进行采样。


纹理空间着色是将着色数值通过动态计算并作为纹理空间中的纹理元素存储起来,当像素被纹理映射时,对应的纹理元素就会被纹理查找操作进行采样和过滤。通过这项技术,可以以完全独立的速率和独立的坐标系统对纹理可见性和外观进行采样。开发人员可以通过重新使用在分离的着色空间中已完成的着色计算提高质量和性能。


多视图渲染MULTI-VIEW RENDERING


▲MVR技术主要用于节约在多视图渲染情况下的资源,不用重复计算。


多视图渲染可以让开发人员从多个角度对场进行性绘制,甚至可以在一次中通过绘制不同姿势的角色实现多个实例。图灵硬件最多支持四个视图,API级别支持最多32个视图。在渲染多视图版本时,图灵架构可以通过单次操作完成几何体的拾取和着色,能够最佳化实现三角形及其相关顶点属性的处理。这项技术实际上是帕斯卡架构的同步多投影技术技术的扩展。多视图渲染多用于VR设备这样的头戴式显示器,立体渲染中需要同时绘制两个场景的对象,因此多视图渲染在这里大有可为。


不是总结的总结:图灵架构会带来什么?


在介绍完图灵的大部分功能之后,本文也到了尾声。和所有的类似文章一样,本文会在最后这一部分点评技术的重要性和对未来的影响,还会加入一些不一样的思考。


从技术角度来说,图灵架构和相关AI技术、光线追踪技术在显卡上的应用,的确可以称之为数十年来GPU发展上最大的变革。上一次类似的变革发生在DirectX 10登场的时候,统一渲染架构的出现改变了GPU工作方式;再上一次则是DirectX8出现的时候,顶点和像素流水线的出现定义了现代GPU架构的基础。图灵的出现,在很大程度上定义了未来GPU的发展方向,也向业内初步展示了AI在图形技术上的应用,这是具有开创性意义的伟大技术和产品。


除了显卡本身之外,对英伟达来说,图灵架构和相关产品的出现,可能是英伟达继CUDA走入通用计算、押注AI转型人工智能之后的第三次转折点。前两次转折点,英伟达都成功地扩大了自己的业务范围,并且凭借自己在通用计算和AI上一脉相承的投入,成为业内能够和英特尔、高通等厂商鼎足而立的巨擘。


但是,这些转型只能是英伟达在业务和产业上的转型,本身公司的发展模式依旧是一个高科技软硬件企业。图灵架构则带来了另一种可能,凭借图灵架构以及英伟达在游戏业界的强势地位,英伟达有可能向技术服务型厂商转型。举例来说,图灵架构带来的DLSS、InPainting、Super-Rez等功能,都是英伟达附加在游戏卡上的服务性功能,再加上英伟达一直以来在推广的云游戏,未来英伟达有可能在图形处理、游戏优化方面开辟一个新的天地。毕竟新的功能会带来新的市场,新的市场又会诞生新的商业模式。


英伟达如果要想继续前进一步,成为IBM、HP那样的百年企业,很难说除了传统的软硬件业务之外,不对转型为高科技AI服务提供商动心,毕竟现在英伟达在AI和CUDA等商业方面已经有大量的积累,依靠服务这种几乎“无本万利”的产业赚钱,要比辛辛苦苦做集成电路舒服多了,毕竟自己的技术壁垒和产业护城河已经初见成效了。


图灵除了对英伟达本身的利好之外,对业内有什么影响呢?有一句老话说得好,“早期的鸟儿有虫吃”。英伟达在CUDA和AI上起得比较早,奠定了现在的地位,在GPU的AI应用和光线追踪上,利用图灵基本上为业内未来的发展打好了基础,英伟达做了初一,后面的企业就很难做十五了,未来只有老老实实跟着英伟达的方向走,这对AMD来说,除了兼容英伟达目前给出的方向,几乎没有任何别的选择。表面上大家都是支持微软的方案,但是谁叫人家出的早呢,各种各样的开发工具和软件都会偏向英伟达,这对AMD和后来者英特尔来说,可不是太好的消息。


对消费者来说,图灵架构的显卡变得如此昂贵,是否应该购买呢?对这个问题可以分情况来看,如果是预算充裕的玩家,那自然是买买买。如果预算不充裕,又想体验新技术应该怎么办?目前看来RTX2070的性价比还算可以,值得推荐。对绝大部分用户而言,目前没有这么强烈的技术需求的话,建议大家也可以稍微等一等,因为目前的图灵架构对应的产品,依旧是12nm工艺制造,虽然相对上代的16nm有一定改进,但毕竟不是新一代工艺。


7nm工艺的产品目前已经开始出样,我们相信图灵的下一代产品必定会采用7nm或同等工艺制造,相比16nm改进到12nm,7nm无论是功耗、芯片面积还是性能都有更好的表现。考虑到12nm工艺下的TU102的面积已经高达700平方毫米以上,我们认为7nm才应该是类似图灵这种技术飞跃的最好“温床”,其光线追踪能力、AI计算能力、功耗等表现应该更上一层楼。并且新工艺后芯片面积缩小会带来价格降低,那个时候似乎才是新技术向玩家大面积铺开的时间。


早买早享受,但不一定真正有完整的支持,无论是业内研发人员还是英伟达,都才刚刚开始熟悉全新的技术。我们非常认可图灵带来的未来,一片大好,但如果你确实囊中羞涩的话,倒也并不急于一时,未来会更好!


关注公众号:拾黑(shiheibook)了解更多

[广告]赞助链接:

四季很好,只要有你,文娱排行榜:https://www.yaopaiming.com/
让资讯触达的更精准有趣:https://www.0xu.cn/

公众号 关注网络尖刀微信公众号
随时掌握互联网精彩
赞助链接