NVIDIA GeForce RTX 以及 Ada 架构 浅入闲谈(上)

因为回家闲的蛋疼,没什么可以做的。于是就有了这篇文章。
去年 GTC 2022 大会英伟达为游戏玩家端出了新一代 GeForce GPU 架构 - NVIDIA Ada Lovelace,也是以科学家名字命名,算是英伟达传统了(下一代 RTX 50 据说叫 Blackwell),这一代显卡架构也是英伟达全面实现实时光追之路的一大步。
Ada Lovelace 是公认的世界上第一位程序员,为巴贝奇分析机设计了一个用于计算伯努利数(Bernoulli Numbers)的程序
其实要说NV对光追的铺路,早在 Fermi 时期就很明显了。Fermi 实现了硬件层级上的递归操作,并且还改进了 L1 / L2 Cache,相邻光线之间在内存上的局部性更好。
这里本人先简单总结下对这三代英伟达 GeForce RTX GPU 的理解:
RTX 20 - Turing 架构,首次引入 RT ASIC (也就是 RT Core),内置 Box Intersection Engine 和 Triangle Intersection Engine,接管了整个光追管道中的一些重活,实现了 BVH 树遍历 和 光线与三角形求交 的 Offloading,而在 Pascal 及之前架构中,这些工作是在 SM 的 Compute Shader 上完成的,效率低下。(具体的光线追踪管线,以及 RT Core 在管道里的具体影响,可能以后会出专栏简单存个档)并且还引入了另一个用于张量运算加速的电路 —— Tensor Core,专为 ML 加速而设计,因为本人不太了解 AI,就不过多展开了233,作为游戏玩家知道这是为 DLSS,DLDSR 这些用到机器学习的服务就可以了。
RTX 30 - Ampere 架构,NVIDIA 设计了一个新型的 Sub-Core 结构,按照 NVIDIA 所讲,Ampere 实现了 2x 的 FP32 Throughput. 因为原本 Turing RTX 上的那个 整数 ALU 和一个 "Lite" 的 FMA 管道 结合了起来 ,可以理论上在不跑 INT32 的情况下达到 Turing FP32 的两倍。NVIDIA 如此饥渴于 通用浮点算力 的堆砌,是为了堆砌总体上的光追执行力,因为目前光追管线中的大量 Shader 计算仍然在 Compute Shader 上完成。在 RT Core 方面暴力提升了遍历/求交性能,同时引入用于实时 RT 的动态模糊加速。Ampere 是 NVIDIA 优化光追架构的一大步。

这里也做个小补充,NVIDIA 宣传 Ampere 的计算结构是 INT32 / FP32 Shared + FP32 Dedicated,这导致了很多人认为那个新的共享单元是直接合并了整浮运算,其实不是的。INT 和 FP 是一直分开的。FP32 浮点在一直都在 FMA 管道 上完成,只是到了 Ampere 架构上引入了个 fmaheavy 和 fmalite 的区分。整数还是在独立的 ALU 上完成的,只不过整数点积在 fmaheavy 上有分担,可以降低整数自己的乘加器开销。至于为什么实际表现出来的 看上去像是 只能要么进行 INT32 要么进行 FP32 操作,是因为 Warp 宽度 还是 32,所有的单元没办法同时执行操作。(Nsight graphics 注解的 Turing 32,Ampere 48 是 Warp Slots,不是 Warp 宽度,之前弄错了)

需要注意的是,Ada 架构 在这一方面的设计上和 Ampere 一致 (挤牙膏bushi 对于 Ada 架构将不作赘述。

3. RTX 40 - Ada Lovelace 架构
前面扯了这么久,终于进入新 Ada 架构环节了
总体来说,Ada 架构在通用计算单元上的架构改进是挤牙膏的。(但是 Ada 架构在这些单元上的 排列,布线这些 相对于 Ampere 肯定是有优化的)奈何上代 Ampere 架构强势,足够让 NVIDIA 老本吃到对面推出 RDNA 4 了。想想 A 家新的 RDNA 3 和 Ampere 的 FMA 延迟差距,还有吞吐量跑不满等等问题,只能说 AMD 还任重而道远啊。
Ada 架构的改进主要是放在 ASIC 上了,主要包括 RT Core,Tensor Core 和 OFA 这三大件的大提升。

先上发布会截图,回顾下 AD102 的性能水平 ( Ada 架构的旗舰芯片)

最开始看到这样的提升幅度,本人还是比较震撼的。要知道 GA102 的 FP32 可只有 40 TFLOPs,AD102 通过堆砌 16384 个 CUDA 核心,达到了 90 TFLOPs 的性能。这样的代际提升应该是自 G80 以来最大的一次了。并且价格提升没有 AD103 / 104 卡那样离谱,采用 AD102 的 RTX 4090 算是近年来性价比最高的一款显卡了。
NV在实时光追加速方面重点讲了几个技术创新,分别是 Opacity Micromap Engine,Displaced Micro-Mesh Engine 和 Shader Execution Reordering. 这里先重点讲述下 Opacity Micromap Engine
首先,对于光线追踪来讲,Alpha 测试纹理的遍历是比较痛苦的,光线每击中一次贴图所在的三角形,会检测到一次 "unknown" (既不是 不透明 也不是 透明 就是 unknown 状态,此类纹理所在三角形覆盖的部分显然包含了两者,故为"unknown") 状态返回到 Anyhit Shader(anyhit 操作是在通用计算单元上执行的),当众多光线一起击中到该贴图时,可想而知效率就低了,因为对于这类贴图的透明部分来讲,是完全可以省掉这种不必要的计算的。所以了不起的 NVIDIA 工程师想到了一种巧妙的办法,引入“不透明微贴图”(opacity micromap),为了确定 anyhit 而通过专门设计的虚拟网格来得到微小三角形。

上图所示的蓝色部分则是可以直接忽略的地方,对于相交检测来说是一个 false 的值,可以直接跳过 Anyhit Shader 从而继续进行跟踪。而在以往的架构中,只要光线打到左边示例中黄色区域内都会执行一次 anyhit 操作。
简单来说,就是标记一小部分的区域,然后告诉显卡只有这部分要 anyhit 一下就行了。
对于 Anyhit Shader,在光追管线里这是一个可选 Shader,场景包含透明物体或 Alpha 测试纹理的时候可以选择加入,主要用于确定光线的进一步操作。这里放出一张龚大做的“光线跟踪流水线”视频里的截图

这里 NVIDIA 也给出了 Ada 和 Ampere 之间对于这类材质处理的区别,能看出 Ada 的 Shader 负载比上代低了不少。

总的来说,Opacity Micromap Engine 的引入,大幅提高了具有 Alpha 测试 场景的遍历性能,尤其是对像用于投射阴影的光线 (shadow rays) 的增益最大。
闲谈到这里就差不多结束了,有点口渴,咱下周继续 (≧∇≦)ノ
本人上高一了,更新速度明显慢了 ( *︾▽︾)