找回密码
 立即注册
查看: 325|回复: 7

【GPU】Maxwell架构:为新算法保驾护航

[复制链接]
发表于 2022-2-15 13:05 | 显示全部楼层 |阅读模式
【目录】
【上一章】
上一代架构大量的篇幅都在讨论功耗,而实际上留给我们的印象无非就是:“真牛,塞入的东西又变多了!”“哇,除了变多,还都变快了”,然而,关于每个硬件单元为何变强了,它们的组合为什么就能更省电,白皮书里都语焉不详。实际上,即使英伟达知无不言,将这些硬件的秘密全盘托出,我们程序员可能也并不关心,或者说想看也未必看得懂。
在Tesla架构和Fermi架构中,很多东西都是新鲜的,我们一一了解过去,还颇有趣味;但这之后,最大的变化就只是这些元器件数量的调整,如果仍将过多笔墨花在这些老朋友身上,难免给人收获不大的感觉。
好在这一代Maxwell架构,推出了许多图形新特性。因此,在例行公事般浏览架构的整体变化后,本文将以体素化为例,来一起体会:被显卡厂商相中的算法究竟会获得什么特殊的恩宠
<hr/>架构调整

牙膏往哪里多挤一点?

每一代显卡,都比上一代更快更强更省电,这不是什么新鲜事,而每一代架构集成的元器件数量急剧增长,也是大势所趋:人多力量大,把科技点集中点在并行性,这个GPU的核心优势上,是很明智的选择。
虽然整体上看都在增长,但却不是无脑地平均用力,不同元器件之间增长的幅度并不相同。因为需求的急迫性不同,为了控制整体功耗,牙膏肯定要挤得恰到好处才行。而需求,则取决于当时的主流市场,也取决于显卡厂商对未来的预测,是经过反复实验和权衡的。


基于当时的效率和工作量分析,以及主流游戏的数学和纹理处理要求,英伟达工程师确定,每个SM八个纹理单元是Maxwell的最佳架构平衡,所以纹理单元的总数与Kepler相同。然而,得益于更高的时钟频率,纹理填充率还是提高了12%。
而为了满足玩家对高分辨率游戏场景的需求(主要是这时候的4k显示屏也开始变便宜了),ROPs的数量从32增加到64,再加上更高的时钟频率,像素填充率实际上是上一代的两倍多。
SM的生长与分裂



相比上一代的大水漫灌,Maxwell的SMM更加精耕细作。每个SMM包含四个Warp调度器,每个能够在一个时钟里调度两条指令。CUDA核被划分成4组,每组都有自己的专用资源用于调度和指令缓冲
这种新配置与Warp大小一致,更能利用并节省面积,也可以减少上一代在更复杂的数据路径组织中管理数据传输所增加的耗电。简单说便是,之前是行业扩张期,一股脑地往公司里招人,公司管理层管得手忙脚乱;现在业务稳定了,就开始提高组织管理效率了
上一代的SM一口吃成了大胖子,变成了SMX,每一个SMX里有192个CUDA核;而这一代稍微往回收敛了一点,只有128个核(32的倍数),被称为SMM。现在,虽然每个SM的总CUDA核数减少了33%,但每个的性能是原来的1.4倍,节省下来的的面积,正是Maxwell的SM数翻倍的基础:每个GPC里的SM从2个变成了4个,因此总体的CUDA核仍然是变多的。
仔细一想,有点历史的循环的感觉:SM里的核越来越多,然后分裂成了许多“小SM”,只不过还共用着纹理单元、cache、Polymorph罢了。组织层级越来越多了。
顺便一提,之前的L1 cache是和共享内存共用的,而这一代却是和纹理cache共用;Polymorph Engine 也升级到了3.0,性能在高细分数时最多可以翻到3倍。
<hr/>为算法保驾护航的最好例证:体素化

被选中的GI算法

在实时渲染领域,全局光照始终是一个棘手的问题。使用离线算法预烘焙,只能应付静态场景和静态光源,而当光源和物体相对位置发生变化时,光照信息就必须更新,预烘焙就不管用了。
在实时光线追踪仍然捉襟见肘的当下,实时全局光的主要思路还是:将物体经过光照后向外辐射的光照信息存放在某种结构中。而在2011年,英伟达工程师开发的新算法:体素全局光,则是将这些信息存放在了体素中。
这些存放了物体光照信息的结构,将被当成间接光源,供之后计算间接光照的时候查询使用。所使用的查询方法是圆锥追踪,之后的文章将会详细介绍,在这里就不多赘述,因为我们的关注点在于:英伟达究竟为这个算法做了什么。
我们都是你的翅膀:视口多播、保守光栅化、稀疏纹理

除了体素内的光照信息需要实时更新和查询,体素化(物体覆盖了空间中的哪些体素)本身也是需要实时运算的。而这,就是Maxwell架构的许多特性针对性提出的舞台。


Multi-Projection:为了避免只往一面投影出现的裂缝,我们需要将物体往其包围盒的三个面上投影。最朴实无华的方法就是直接画三遍,更高级一点的方法是用几何着色器分层渲染,但都不够快。
怎么办才好呢?如果是我们遇到了这种问题,那就只能挠头忍着,或者想破头换一个算法。但英伟达不这么觉得,同样的东西要画到不同的地方去是吧?那简单,给Maxwell加个专用硬件呗,自动将输入的几何体广播到任意数量的所需渲染目标上。光栅化管线不再是从头到尾一路往下的了,可以兵分多路,从而避免几何体着色器开销,这技术被称作Viewport Multicast。可恶可恶,真是太狡猾了!
不过虽然最初的需求源于此,但Viewport Multicast还有其他可以大显身手的地方:cube map、CSM等,都可以因此受益。这种大有可为的技术,才值得被NVIDIA相中做成硬件新特性。
三面投影完后,如果使用一般的光栅化方法(即三角形覆盖了像素中心点,该像素才算被三角形覆盖)还有可能会出现孔隙,得使用保守光栅化


在之前,要实现保守光栅化,就得用几何着色器自己把三角形往外扩一圈来自己覆盖上面的橙色像素。英伟达看了直摇头:何必呢?反正光栅化这个模块本身就是我负责的,稍微改改算法,做个按钮让你们调不就行嘛。


光是上面两个硬件特性的启用,就轻轻松松把体素化的速度提高了三倍以上,为VXGI铺平了道路。
体素作为三维的数据结构,占用巨大的内存是它的一大弊病,因此Maxwell还推出了一个大杀器——稀疏纹理(在dx中被称为Tiled Resources)。利用这个硬件特性,纹理的内存不需要提前分配死,可以让程序员自己动手按需分配,可以极大缓解体素的内存占用压力。
其他特性速览

正值DX12即将推出之际(Vulkan尚在襁褓中),英伟达更是带头冲锋,开放了许多提高可编程性的特性,感兴趣的可以看文后的参考。在这里我挑几处比较有意思的简单介绍:
Raster Ordered Views(ROVs):相当于给Unordered Access Views上一层保险,保证能够按照提交drawcall的顺序来保证UAV的读写,可以用来实现OIT算法。
Multi-Pixel Programmable Sampling:原本只能选择2x、4x的MSAA,现在采样点可以由程序员随意指定了。英伟达还想出了一个结合TAA思想的MFAA,前后两帧用不同的采样pattern,就可以空手套白狼,2x有4x效果,4x有8x效果:


Dynamic Super Resolution:驱动帮忙降采样,并使用高斯滤波去除伪影,为垃圾显示器撑起一片天(买不起高分辨率的屏幕但还想提升画质)。
从图像压缩到云游戏的基础设施

我们知道带宽相比于运算速度,一直是瓶颈。因此,用压缩和解压的时间换带宽的空间,是非常必要的做法,因此GPU从显存获取的纹理数据其实都是压缩过的数据。Maxwell进一步改进了内存压缩算法,有助于减少DRAM带宽,有效地放大系统中的原始DRAM带宽。


压缩引擎使用的是多层压缩算法:首先检查任何输出到内存中的块,以查看块内4x2像素区域是否恒定,在这种情况下,数据将被压缩为8:1(即,对于32B颜色,数据从256B压缩到32B);如果失败,但2x2像素区域是恒定的,将以4:1的比例压缩数据。总之,就是能压缩多少算多少,多多益善,但又要保证无损
当然,光靠把相同颜色的颜色打包成一个,一点儿也不高端,效果也有限。因此,从费米开始,就已经只吃了“增量颜色压缩”。在也是非常场景的压缩思路了:计算块中每个像素与其相邻像素之间的差异,然后尝试使用最小位数将这些不同的值打包在一起。例如,如果像素A的红色值为253(8位),像素B的红色值为250(也是8位),则差值为3,则只需用2位表示即可。
然而,基本思想虽然简单,但增量颜色压缩的有效性取决于该以哪个像素为标准计算增量。Maxwell包含的第三代delta颜色压缩,通过为压缩器提供更多的delta计算选项来提高效率。
既然说到了压缩,就在这顺便一提显卡中的NVENC编码器。显卡除了3D图形运算、通用并行计算,还负责视频的编码解码。Maxwell的增强版NVENC编码器,H.264吞吐量提升四倍,还增加了对H.265(也称为HEVC,与H.264相比,H.265压缩在相同的质量水平下显著节约带宽)编码的支持。
如果我们平时有留意过,会发现视频的大小远远小于图像大小*帧数,这是因为视频可以利用帧间的差异进一步压缩,这不仅考验算法,也考验硬件压缩解压的速度。而当复杂的运算逐渐移动到云端,视频解码器才是云游戏在客户端最核心的硬件基础!
参考


  • Interactive Indirect Illumination Using Voxel Cone Tracing
  • DEFERRED VOXEL SHADING FOR REAL TIME GLOBAL ILLUMINATION
  • NVIDIA Maxwell OpenGL extensions
  • Cascaded shadow mapping technique using Viewport Multicast and Fast Geometry Shader

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
发表于 2022-2-15 13:13 | 显示全部楼层
Maxwell引入了TBR,这个可以着重讲下吗?这个特性应该是Maxwell能大幅提升性能功耗比的原因之一。
发表于 2022-2-15 13:21 | 显示全部楼层
更新了!先来点个赞!
发表于 2022-2-15 13:22 | 显示全部楼层
沉迷图形学的前辈,这种状态真是让人羡慕
发表于 2022-2-15 13:24 | 显示全部楼层
嘿嘿,共同进步[害羞]
发表于 2022-2-15 13:32 | 显示全部楼层
啊嘞?[好奇]TBR不是移动端的架构吗?如果突然改成tbr,白皮书里不可能提都不提的[思考]
发表于 2022-2-15 13:40 | 显示全部楼层
是不是看错了呀,是指directX11.3的Tiled Resources吗?这个可以查一查虚拟纹理哦,知乎应该有很多文章[思考]
发表于 2022-2-15 13:48 | 显示全部楼层
对的,就是那个TBR。https://www.techpowerup.com/231129/on-nvidias-tile-based-rendering
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-5-18 02:12 , Processed in 0.102556 second(s), 26 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表