2023-03-05 13:11:10 来源:哔哩哔哩
上篇文章简单聊了下 NVIDIA RTX 架构,这回接着更新。重点主要放在 Shader Execution Reordering 这项新技术上来。
(资料图)
这里首先就要回到 GPU 的本质上了。GPU 是一种并行度极其高的硬件,并发处理相似任务的效率非常高。
这里不得不提到一个概念,内存的局部性原理:
时间局部性:内存位置被引用了一次,在未来可能再次被引用。
空间局部性:内存位置被引用了一次,那么程序很可能在未来会引用其附近的一个内存位置。
对 GPU 这样的硬件来说,相邻光线之间内存局部性越好,执行效率越高。这一点 NVIDIA 早在十多年前就做出了行动,Fermi 架构正是通过对内存子系统的 L1 进行改进,提高了内存局部性,从而提高了光追效率。
以路径跟踪 (Path-tracing) 为例(目前使用广泛的一种光线追踪形式),存在着一个叫“着色器分歧 (shader divergence) ”的限制,尤其是光线多次反弹以及用了很多种着色器的场景下体现得尤为明显。
击中物体并反弹以后,衍生光线击中的其它表面可能使用了多种和原先截然不同的着色器。着色器分歧导致数据的相关性,局部性差。在这里着色器分歧主要体现在线程的任务执行分歧,光线反弹以后,击中使用不同着色器的表面,不同线程之间执行着完全不同的着色器代码,代码路径乱,相关性差,对 GPU 来说难以合并地高效执行。
怎么办呢?
在业内最常见的做法就是直接在场景里使用简化的着色器,这个是从根源上把问题给优化了(不是解决!),性能虽得到优化,但从另一方面来讲,简化后的着色器肯定不如原来的。
而这次 NVIDIA 在 Ada 架构上引入了一种叫 着色器执行重排序 (Shader Execution Reordering, SER) 的技术,不解决前面的着色器本身复杂度的问题,而是直接把后面相似度非常差的任务们进行 相关性排序 (coherency sort),从而提升并行计算的效率。这里回到之前的局部性概念,SER 正是通过优化数据的局部性,最大化利用了 GPU 的特性。
对着色器任务进行相关性排序之后,对 GPU 来说达成了一个非常理想的任务状态,效率大幅提高。
该技术让高分歧场景 (路径跟踪就是其中一类) 下 光追着色器 的执行效率提升了高达 100% 以上, 即便体现在一些混合光追游戏里,也有大幅度提升。NV 描述的 2077 的 RT: Overdrive 模式的 路径跟踪全局光照,因 SER 得到了游戏总体 44% 的帧率提升。
今天就先到这里吧 = ̄ω ̄=