|
来自Introduction to the PowerVR Photon Architecture白皮书,在GPU架构中引入了RAC,光线追踪硬件加速模块。
引言
对于任何了解实时3D图像的人来说,现在行业中正在发生一些真正令人兴奋的事情:实时光线追踪的普及。光线追踪通常被描述为计算机图形学的“圣杯”,它是使用一种模拟光线在现实世界中的行为的技术来生成3D场景,从而为开发人员提供工具来制作令人难以置信的逼真视觉效果。
2016年,Imagination公司推出了一款拥有世界上第一台专用光线追踪加速器的电路板,第一次提供了足够的性能,使该技术能够实时地实际应用。2018年PC台式电脑市场迈出了拥抱光线追踪的第一步,2020年主机市场紧随其后。2021年,Imagination将在C系列图形处理单元(gpu)中基于PowerVR Photon架构中加入高效聚焦的光线加速簇ray Acceleration Cluster (RAC),为手机市场提供光线追踪的IP。
PowerVR GPU架构
Imagination已经提供市场领先的高效GPU超过25年了。
PowerVR Photon光线追踪架构与最新一代PowerVR GPU IMG CXT系列深度集成。
发展
虽然PowerVR架构自1996年以来已经发展了许多代,但在本文中我们只关注从2019年IMG AXT系列开始的架构的最新迭代。AXT是对PowerVR GPU架构的彻底重新设计,它专注于在功率、性能、面积和带宽(PPAB)效率方面取得重大飞跃。这是通过一个革命性的新的超宽算术逻辑单元(ALU)架构实现的,它在一个任务(束)内并发处理多达128个标量数据通道。为了确保这种超宽架构的最高利用率,引入了许多新颖的调度进展,包括三角合并和任务打包。
为了保持较低的带宽,我们还引入了最新版本的IMGIC压缩,它在已经广泛使用的无损压缩基础上增加了有损帧缓冲(渲染目标)压缩,用于深度缓冲、渲染目标、纹理和几何图形。为了提高质量和带宽效率,还对纹理单元进行了完全重新设计,并启用了客户可配置的缓存架构。
2020年IMG BXT系列增加了另一项创新:去中心化多核。这使得我们能够超越传统的智能手机细分市场,并在桌面、数据中心和汽车ADAS细分市场开辟了新的商业机会。这种多核方法完全拥抱了新的硅工艺节点,专注于物理设计优化和优化最佳PPAB,同时也拥抱了带来成本和效率效益的新技术方向,如芯粒。
2021年11月,我们发布了IMG CXT系列及其突出功能:PowerVR Photon架构,提供超高效的混合光线追踪,在这篇白皮书中详细介绍。工艺节点的特定调整仍在继续,为7nm、5nm甚至3nm工艺技术提供最优的甜点设计。
关键特性
PowerVR架构包括许多受专利保护的创新,多年来一直为我们的客户和合作伙伴提供独特的好处,其中许多将继续提供价值。这些将在下一节中突出显示。
基于贴图的延迟渲染
大多数gpu上的传统渲染技术被称为即时模式渲染(IMR),这种模式下几何图形被发送到GPU并被直接绘制。这种简单的架构效率很低,导致处理能力和内存带宽的浪费。尽管像素在屏幕上永远看不到,但它们仍然会被渲染出来,比如当一棵树被离观众更近的建筑完全遮挡的情况。
PowerVR基于贴图的延迟渲染(TBDR)架构的工作方式要聪明得多。它在开始渲染之前捕获整个场景,因此遮挡像素可以在处理之前被识别和拒绝。硬件首先将几何数据分割成小的矩形区域,这些区域将作为一个图像处理,我们称之为“贴图”。每个贴图都是栅格化和单独处理的,由于贴图的大小很小,它使所有的数据都能保存在速度极快、功耗极低的片上存储器中。
延迟渲染意味着架构将延迟所有纹理和着色操作,直到所有对象都测试了可见性。PowerVR隐藏表明面去除(HSR)的效率是足够高的,它允许过度绘制来完全消除完全不透明渲染。这会显著降低系统内存带宽需求,从而提高性能并降低功耗需求。这是智能手机、平板电脑和其他电池寿命至关重要的设备的一个关键优势。
Imagination图像压缩
Imagination图像压缩(IMGIC)是帧缓冲(渲染目标)压缩技术的最新版本。帧缓冲压缩的目的是减少从系统内存中读写渲染目标所产生的带宽和功耗。IMGIC包括一种使用可变压缩的无损压缩模式,其中质量保持完美,但所实现的压缩取决于渲染目标的内容。通常情况下在大范围的参考测试图像上可获得50%的降低。
IMGIC还包括一种视觉上无损的压缩模式,它保证了最小的压缩率,从而确保内存占用、带宽和功耗都得到了降低。与未压缩相比,IMGIC包含最多三种压缩速率级别:
75% -有效的完美图像质量
50% -视觉无损质量
25% -极大的节省带宽
在视频流和会议系统中,以质量换取带宽以确保性能得到保证是一种常见的方法,这广泛用于改善用户体验。
超宽ALU
从A系列开始,PowerVR GPU使用了新的128宽度算术逻辑单元(ALU)架构,采用了更简单的risc风格的ALU引擎。通过转向更简单的引擎,我们可以在相同的芯片面积和功率预算中放进更多的通道,完全拥抱大规模线程级并行,并简化编译器工作,从而获得更高的利用率和效率。这种方法进一步与广泛的互补调度技术相结合,以确保这种超宽束(任务)的大小被有效地使用,包括三角形和任务合并机制。这对于IMG A系列在密度(fps/mm2)和能效(fps/w)方面的重大提升至关重要。
超标量ALU处理
Imagination的ALU完全支持超标量处理,支持很多ALU类型和协同处理器的并发操作,以获得最高的效率和利用率。这包括浮点流水线、整数流水线、复杂操作流水线、测试/分支流水线、位操作流水线和DMA单元,它们都基于着色器/内核中的数据可用性和指令混合并发工作。
样样都异步
由于其TBDR特性,PowerVR GPU本身就需要对不同类型的任务进行异步并发处理。传统上这是针对GPU中并发运行的几何(也被称为贴图加速器或TA)和像素/片段(也被称为3D)处理任务。随着计算(OpenCL)的加入,这也被同时启用,今天在大多数GPU规范中这被称为“异步计算”特性。PowerVR GPU还支持并发的2D/内务管理任务,作为简单的非3D(几何)处理和数据移动的特殊任务。现在在CXT中,我们在混合中添加了并发异步光线追踪。
这意味着CXT GPU现在可以有多达五种不同的任务类型在GPU内并发执行:几何、片段/像素、计算、2D和光线追踪。
基于固件的GPU
在许多架构中,硬件图形事件是由图形驱动程序在CPU上处理的。但是所有的PowerVR图形核心都是由GPU内部一个小型c-可编程微控制器上运行的固件来管理的。这使得图形处理器能够在内部以超低延迟处理大多数高级图形事件。这种方法还减少了图形驱动程序的主机CPU开销,并提供了大量有益的额外特性,例如:
GPU调试:嵌入式固件处理器可以有效地充当调试服务器,开发者可以断点检测GPU的工作负载。
DVFS管理:固件处理器可以访问大量硬件性能计数器和工作负载分析计数器,允许在上升或下降时钟频率上进行超低延迟决策,以获得最佳的电源效率。
通用IO:固件处理器有几个通用的有效信号,可以用于基于硬件的同步机制与第三方IP块在同一SoC上,支持超低延迟响应时间和高效的异构处理。
去中心化的多核
GPU可扩展性的传统方法受到集中共享块和着色器核心之间连接的限制。通常,共享逻辑包括一个集中式内存数据路径、作业管理器和几何图形贴图引擎。中央依赖产生了一个星形网络式的结构,其中所有的核心都需要连接到这个单一的中央实体。但是这会导致拥塞和布局灵活性的问题。
Imagination的多核新方实例化了数量灵活的GPU核心,而无需直接依赖于与中央单元的连接。在最简单的形式中,这可以被视为多个gpu,即存在于SoC设计中,但具有核心共同工作于计算和图形处理的能力。这种方法中的每个核心都被设计成一个完全独立的GPU,包含所有基于优先级的自我管理和执行工作负载所需的功能。
和以前布局相比的根本变化是现在有多个GPU实例共享命令流,共同尽快完成工作,而不是单个核心工作一个工作负载。通过处理工作的不同区域(渲染目标),每个GPU核心的带宽效率得到了保持,因为每个核心持续在屏幕的一个连贯区域工作从而确保了最大的缓存命中效率。类似的方法也适用于其他处理类型,包括几何和计算处理,可以分配给不同的GPU核心进行处理。
PowerVR的去中心化方法非常适合新兴的物理设计概念,包括芯粒,其中分布式的工作模型提供了大量的效率和动态灵活性的好处。
IMG CXT GPU介绍
IMG CXT GPU的高级视图
上图可以看到IMG CXT GPU的高级视图。GPU的主要组件包括:
统一着色簇(USC) - GPU的计算核心,多线程可编程SIMT处理器,可以同时处理像素数据,几何数据,计算数据以及2D/拷贝 内务管理任务。USC越多,GPU配置的计算性能就越高。
纹理处理单元(TPU) -高度优化的逻辑来处理纹理寻址,采样和过滤。更多的纹理单元意味着更高的视觉复杂度、更高的刷新率和更高的显示分辨率支持。
光栅化/几何块-一组固定功能单元,可以在USC处理数据之前/之后进行后处理和预处理,包括剔除、裁剪、贴图、压缩、解压、迭代等。
顶层(CXT RT3)——包括L3缓存、axis总线接口和固件处理器
光线加速簇(RAC) -一个新的专用块,用于有效处理所有光线追踪的处理阶段。
此外与之前的IMG B系列相比,CXT在一个单核的单元中包含的ALU、TPU和几何性能要多50%。
IMG CXT设计扩展到四核,提供高达9TFLOPS FP32和7.8GRay/s的性能
与B系列GPU类似,CXT GPU也支持多核,最多可扩展到4核。
在上图的“超越桌面”配置中,设计还包括额外的可选IP块:
NNA -神经网络加速单元,提供高功率,性能,高效优化的神经网络处理。这些单元可以与IMG CXT GPU协同工作,并在多达8个核心的多核配置中提供高达100TOPS的AI性能(上面显示的6个)。
OCM -片上共享内存,可用于有效地交换IMG CXT GPU和NNA单元之间的数据。OCM还可以用于与其他IP块的交互,通过将数据保存在芯片上来获得最高的吞吐量、最低的延迟和最佳的能效。
EPP - Imagination公司的以太网分组处理器(EPP) IP是一个可扩展的多端口IEEE系列802.3千兆以太网交换机和路由器解决方案。经过硅证明,该IP是专门设计的,以满足高性能管理和非管理的多端口交换机和路由器的苛刻通信要求,非常适合汽车行业和其他网络处理市场。在这里显示的设计EPP将使GPU组和/或数据存储单元之间的高速连接,甚至允许直接流媒体视频压缩。
车规级
由于第4级RTLS体系结构中的相关性采集(下文解释)IMG CXT也非常适合超高端汽车游戏和人机界面平台。在渲染复杂曲面(如汽车车身)时,它可以实现更高的效率,使其成为逼真的光线追踪汽车渲染的理想选择,以在仪表盘范围的显示器上完美地表示车辆。Photon架构紧密集成到IMG CXT GPU中,它可以与功能安全的IMG BXS GPU一起部署,IMG BXS GPU的设计过程符合汽车安全的ISO 26262标准。这些系统可以支持先进的驾驶辅助系统(ADAS)和自动驾驶-都由Imagination的IP支持。
下表中总结了以上两种配置的GPU特性:
GPU特性 | 高品质移动配置 | 超移动配置 | 架构 | CXT | CXT-MC | GPU类型 | TBDR | TBDR | 光追等级 | 4 | 4 | 配置 | CXT-48-1536 RT3 | CXT-48-1536 RT3 MC4 | 可扩展处理单元SPU | 3 | 12 | 多核 | 1x | 4x | 缓存容量配置 | 128 - 2048KB | 512 - 8192KB | RAC数量 | 3 | 12 | USC数量 | 6 | 24 | TPU数量 | 6 | 24 | 峰值Texels/Clock | 48 | 192 | 峰值PF32 OPS/Clock | 1536 | 6144 | 峰值INT8 OPS/Clock | 6144 | 24576 | 峰值 混合速率/Clock | 48 | 192 | 时钟 | 最高1GHz | 最高1.5GHz | 峰值 G Rays/s | 1.3 | 7.8 | 峰值 FP32 T FLOPS | 1.536 | 9.216 | 峰值AI 8b TOPS | 6.144 | 36.864 | 峰值 G Texels/s | 48 | 288 | 处理核心 | 软 IP,支持 12nm, 7nm, 5nm, 4nm, 3nm等工艺 | 同 | 有效 | IP现在可以获得许可 | 同 | 用户 | 多个,跨越不同的目标市场 | 同 | 应该注意的是,CXT体系结构具有高度的可扩展性和可配置性,以满足广泛的市场和客户需求。以上配置仅为示例。
PowerVR Photon 光线加速簇RAC
RAC简介-光线加速簇
PowerVR Photon架构在PowerVR GPU中添加了一个新的模块,称为光线加速簇或RAC,它负责PowerVR GPU上所有的光线追踪活动。这包含了整个过程;从发射光线(来自一个着色器/内核)到返回命中(或错过)结果回ALU处理。
由于光线是由图形着色器或计算内核程序产生和处理的,RAC与GPU的ALU引擎紧密耦合。虽然这个单元与交换光线和命中/错过信息密切相关,但它们在技术上是完全“解耦”的,这意味着两个单元同时运行,以获得最高的效率和利用率。
RAC有效地处理了整个BVH流程,包括非常计算密集的框/光线和三角形/光线的相交,以及效率优化,如相干分类。RAC完全兼容当前光线追踪API的所有模式和功能,包括Khronos Vulkan扩展和微软DirectX光线追踪。
RAC是一种可扩展的单元,支持多个性能点(例如,RAC的1倍、0.5倍、0.25倍)以及多核可伸缩性(2x及以上),其中多个RAC可以放在ALU单元(s)旁边。在目前的PowerVR GPU设计中,RAC由两个128宽的ALU单元共享,从而提高了RAC、ALU和纹理处理单元(TPU)的利用率。
RAC、两个ALU和两个TPU、调度逻辑和支持其他固定功能的组合被称为SPU (Scalable Processing Unit)。这形成了构建CXT GPU范围的基本单元,每个GPU核心有1个到4个SPU单元,然后由于我们的分布式多核系统,它可以进一步扩展。
光线测试电路
包括上图中的BTU、DTTU和PTU模块
每个RAC包含几个光线测试单元-这些是固定功能模块,负责检查是光线和各自的原语之间是否相交,它是一个包围框,组成了层次包围盒(BVH),三角形或过程原语的主体。
由于加速结构主要由层次包围盒组成,所以盒测试电路的数量在逻辑上是最大的,这种测试广泛使用并行性以获得最高的效率;例如大量的测试光线/盒子。三角形测试紧随其后,因为三角形是目前构建3D几何最流行的原语,这种类型的测试在硬件上是高度优化的,在本质上也是并行的。如上框图所示,我们使用了一个“双三角形测试单元(这里白皮书写成texting,应该是tester)”,这意味着我们将每条光线和两个三角形进行测试,再次利用并行性来获得最佳密度、功率和能效。
最后一个单元用于处理过程测试。但正如api所指出的那样,支持这个测试是速度较慢但更灵活,因为这里必须执行一个特殊的求交着色程序来处理测试。模块和比率的确切数量取决于RAC的目标性能水平(例如使用更多的模块用于达到更高性能的RAC设计)。
光线存储
上图中的RS模块
下一个单元是光线存储单元,因为我们想要保持ALU和RAC的完全加载,我们需要存储来允许这些单元并发操作。这种存储对于相关分类也是必不可少的(见下一节),因此光线存储单元在处理期间保存光线数据结构,它在芯片上保存数据,并位核心中的所有单元提供高带宽读/写访问。
相干收集打包
上图中的PCG模块
相关收集打包单元是一个独特的专保护模块,它使Photon架构成为一个4级的RTLS解决方案。它负责分析所有的活动光线,并创建打包(组)相干光线(轨迹相似的光线)一起对场景进行测试。通过测试和处理相干光线,我们实现了并行性,也实现了更高的处理和带宽效率,由于数据重用我们可以在缓存结构上实现高命中率。
光线任务调度器
上图中的RTS模块
光线任务调度器负责管理RAC和GPU核心中ALU之间的交互,处理资源分配,以及RAC内部各处理阶段之间的协调和通信,以及与GPU内部ALU/USC之间的协调。
盒原语调度器
上图中的BPS模块
盒原语调度器是用于管理遍历BVH结构、触发盒、三角形和过程相交测试的硬件,同时它根据每个操作的结果进行后续所需的工作。
光线参考计数器
上图中的RRC模块
光线参考计数器是调度活动的一个重要部分,它的作用是记录每条还在处理的光线的工作轨迹,并检查所有光线测试是否完成,从而结果可以发送回ALU。当光线需要处理时这是一个递增的计数器,而作为BVH测试完成时计数器将递减,直到所有测试完成时结束到0。由于相干混洗,记录正在飞行和已经完成的事情是至关重要的,它根据进程的相干性将光线分组到不同的包中。
USC/RAC接口
上图中的URI模块
USC/RAC接口是RAC和ALU单元之间的数据移动引擎,在PowerVR GPU中多个ALU单元也称为统一可扩展簇(USCs) 。这个单元接收光线请求并通过这个接口发送光线结果。在所有处理中,有效且高效地处理数据移动是避免瓶颈的关键。
能效聚焦
如今电力效率是王道,不仅在移动领域它可以延长电池寿命,而且在热领域也日益如此。这可能会影响智能手机,因为你不想在运行3A级游戏时烫伤手,或者因为低时钟频率和低帧率而导致用户体验下降。在服务器环境中,机架的密度受热约束也很重要。因此在开发我们的PowerVR架构时,能效一直是Imagination选择的所有架构的首要问题。
光线追踪等级系统也非常注重功耗和性能效率,光线追踪的关键是理解固定功能/定制硬件与可编程硬件相比,其功耗效率更高多少。从根本上说,可编程性提供了最根本的灵活性,这可能是非常强大和有价值的,但这种灵活性就像生活中的任何事情一样,是需要付出代价的,而代价就是能效和密度。我们在光线追踪历史的早期阶段就知道了这一点,在那里我们计算出需要多少个USC,我们需要处理光线盒相交的相同速度作为一个相对适中的专用固定功能单元。这可以在这里看到一个可视化的表示:
仅使用可编程GPU逻辑进行光线盒相交测试(本质上是融合乘加)大体上需要比固定功能块多44倍的硅面积。这就是二级RTLS解决方案的重点所在——将这些计算成本高昂的射线盒和射线三角形交叉转移到专用的、定制的、更高效的硬件上。
现在,正如已经解释过的,使用等级3的RTLS解决方案,您将更多的光线追踪工作负载从可编程GPU逻辑上转移。事实上我们几乎将所有的光线追踪工作从USCs/shader单元移入更有效的专业硬件上。在第4级上我们通过SIMD/SIMT风格的方法而不是昂贵的MIMD来实现有效的并行性,从而进一步提高了效率,我们还通过将在加速结构中遵循相似路径的光线分组来解决处理效率和内存访问效率问题。
下表总结了RTLS等级及其对执行效率的影响,以及对电源、性能和带宽的影响。
GPU模块
光线追踪任务 | L1 RTLS | L2 RTLS | L3 RTLS | L4 RTLS | ALU 负载 | 满 | 高 | 低 | 低 | ALU效率 | 低 | 低 | 中 | 高 | 盒/三角形 测试 | N/A | 中 | 高 | 满 | BVH处理 | N/A | N/A | 支持 | 支持 | 相干 | 否 | 否 | 否 | 是 | 缓冲命中率 | 低 | 低 | 低/中 | 高 | 带宽占用 | 高 | 高 | 中 | 低 | 能效 | 很低 | 低 | 中 | 高 | 光线追踪指标
困惑的数字
新的硬件能力总是会触发新的指标,这些指标试图表明特性的性能水平,光线追踪也不例外。桌面市场推出的第一款光线追踪GPU宣传的是每秒gigarps (GRay /s)的数字;这是一个合乎逻辑的概念,因为当我们在追踪光线时,最好能了解硬件在这方面的能力。不幸的是这是一个有问题的度量,因为光线可能会错过顶层的场景边界框并立即返回,或者光线可能会在命中任何东西之前进入数百个盒子和三角形测试的复杂情形——所以你发射的光线数量不等于真实世界的性能。从本质上讲,如果不是所有光线都具有相同的复杂性,那么我们如何才能合理地讨论GRays/s?
后来的产品发布看到了更经典的引用性能的方法,即引入每秒盒子和三角形测试。虽然这是一个更有用、更真实的衡量标准,但它仍然引发了许多问题。这些比率之间的正确比率是多少?这些单位的效率如何,它们是否可以一直使用?或者它们受到缓存命中或其他数据流问题的限制?
最后,我们甚至看到了每秒光线追踪操作(RTOPs)的声明,这是一个虚构的指标,它试图将光线追踪硬件的固定功能转换回等效的着色器指令成本,并声明每条光线1000个ALU操作的随机成本。它创造了一个巨大的营销数字,但与GRay/s一样,它并没有什么意义,因为数字是任意的,成本可能会很高或很低。
光线追踪基准的现实
不幸的是大多数GPU指标的意义都很有限,这是因为它们的定义很差并且缺乏上下文或特定的基准测试条件。新的光线追踪指标在这方面没有什么不同。虽然这些指标有一定的价值——它们通常参考硬件处理单元的峰值能力——在实际使用中,它们在效率和利用率方面会有很大的差异,因为峰值数字指标并不表示其效率。
如上所述,GRay/s中的光线率就是一个很好的例子。它太模糊了并且产生了“我的数字比你的数字大”的比赛。在现实中,GRay/s会受到场景的影响:更大的场景会有更深的层次,在层次中有更多的盒和三角形测试来找到命中/未命中,会导致较低的gigaray率,取决于你的测试场景有多复杂。
这就是为什么最初宣称的每秒gigarays数实际上是“gigamiss”每秒速率,因为基本上声称的数字是一个场景,所有光线会立即错过整个场景。这有点像在盯着地面或天空时引用游戏性能,而没有看到任何复杂的内容。盒和三角形的测试率稍微更有价值,但忽略了这些单位的使用效率,特别是在一个等级2的RTLS解决方案中,它很可能处理将是带宽和/或着色界,而不是测试界-所以这些数字再次成为一个理论峰值-不是一个真正的可用的数字。
不幸的是,这给我们留下了锁定所有这些条件的基准:不但是场景的复杂性,而且是视图方向和每条光线的有效载荷的大小,因为ALU和光线的混合限制周期将影响将出现的数字。一个很好的例子是Imagination的内部工作是基于加速结构,即快速的实时构建器和较慢但更优秀的构建器相比,能够影响30%以上的可实现性能,因为更有效的层级会更好地剔除工作。当然基准仍然可能是误导,因为场景可能更适合于一个供应商可能选择的光线与盒比率。出售IP的好处在于可以在游戏后期调整这些比率,以匹配市场甚至客户特定的期望。
两种光线追踪API
Khronos Vulkan API和Microsoft DirectX 12光线追踪API公开了两种不同类型的光线追踪。这两种方法在本节中都进行了总结,这两种模式都得到了PowerVR光子架构的完全支持,以确保最高可能的内容兼容性和效率。
VK光线查询
也被称为微软DirectX光线追踪(DXR)下的内联射线追踪,光线查询是非常容易理解的,因为本质上任何着色器或内核(计算)都可以发出光线查询,这启动了整个光线追踪过程,如前所述。在这个系统中,产生的命中/错过信息返回到处理它的同一个着色器/内核。因此光线跟踪非常简单,并且按照DXR的名称样式,它实际上是一个内联过程。
一个简单的例子就是阴影光线。场景在这里是正常渲染的,但现在在片段/像素着色器中,光线被发射到光源,当光源命中时,我们知道当前像素被点亮了,我们可以在着色器中执行正确的代码。如果我们碰到场景中的任何其他物体,我们就知道它处于阴影中,同样你可以在着色器中执行正确的代码。在这个方案中,反射会变得更加困难,因为反射的物体被命中了,我们必须触发很多复杂的事情来弄清楚如何为反射的物体渲染正确的颜色,而这一切都必须在原始的投射着色器中处理。
Vulkan Khronos光线追踪流水线
Vulkan光线追踪流水线要复杂得多,如下图所示
光线追踪管道从一个特定的Raygen着色器开始,这通常是一个相机/屏幕,从它将主光线投射到场景中开始生成光线追踪图像的过程。与光线查询的关键区别是命中和错过会触发递归,所以基于命中和错过事件(如图所示),正确的着色器将被触发和执行。这意味着复杂和多次反弹(例如,主光线到次光线和后续光线)更容易处理,复杂的全光线追踪概念更容易实现。
需要注意的是,光线管道对射线追踪硬件本身的影响是有限的;例如,这两种方法都可以通过加速结构追踪光线并返回错过/命中信息。
关键的变化是如何处理结果;在光线查询的着色器中显式/手动,以及在光线流水线情况下更动态隐式。处理光线流水线功能的主要影响是在计算/GPU端,那里需要递归支持,以及GPU基于命中/错过信息调度自己的着色器/内核的能力。这种递归支持具有有趣的性能复杂性,因为光线可以穿过许多不同的对象,每个对象都启动更多的着色器/内核,并需要GPU内部更多的资源。因此需要注意的性能陷阱之一是,在某个时刻快速的片上存储将用完,递归将触发系统内存溢出,这可能会显著影响性能(一个“悬崖事件”,即性能突然发生巨大变化)。
因此对于大多数初始渲染算法,我们建议使用光线查询,因为这更容易添加到现有的游戏引擎中,并且可能提供更可预测的性能。
加速结构
在整个白皮书中,我们引用了加速结构和包围盒层次结构,这是我们用于减少光线盒和射线三角形测试数量的高级结构,我们需要如下图所示:
如图所示,包围盒层次结构提供了一种加速机制,我们可以在其中系统地检查包围盒,如果我们错过一个盒子,我们知道可以忽略这一层下的所有盒/三角形。
这使它成为一个加速结构,因为我们将做光线测试的过程减少到最小可能。毫无疑问许多读者已经意识到这种结构,以及在其创建过程中使用的质量和启发式,将对硬件的效率产生重大影响,因为一个最优的结构可以比一个简单的、构造糟糕的结构更有效地减少工作。因此API公开了生成这个加速结构的快方法和慢方法。
快速构建算法对于动画对象是必不可少的,并且在帧与帧之间变化广泛,以保持高帧率。慢构建方法应该在加载时(甚至在开发期间脱机)用于将在整个生命周期中使用的静态对象,因此应该尽可能优化。理解“动画”对于加速结构来说真实的意义也很重要,随着我们引入下一个概念:加速结构,这一点将变得清晰。
这是由两个元素构建的,一个顶层加速结构(TLAS)和多个底层加速结构(BLAS)。我们上面描述的更多的是BLAS,因为它包含一个对象的加速度结构,例如我们示例中的兔子。TLAS由多个BLAS结构组成。
实际上,TLAS实例BLAS一次或多次构建世界,其中相同的BLAS可以有多个转换矩阵(在世界各地移动它们)和属性。因此,它类似于在传统图形几何处理中使用实例。这也意味着移动对象,例如世界中的项目的翻译或旋转,只在TLAS中处理,而不改变BLAS本身。
这表示在世界上行驶的汽车是一个静态的物体并且有了静态的BLAS,汽车的移动和车轮的转动只需要修改TLAS转换。此外要注意的是,对于光线跟踪相机的运动,只是改变方向和光线通过加速度结构,因此相机的变化也不影响BLAS和TLAS信息。TLAS更新代价非常低,添加/删除对象和更改转换是快速和容易的。但是构建/创建一个新的BLAS代价是昂贵的。
一些读者可能已经意识到动态的BLAS案例在游戏中是可能的,例如矩阵皮肤的角色改变或使用着色器的动态变形变形对象。这就需要对BLAS进行重建,需要使用快速/平衡的实时算法。内存占用和带宽也很关键,所以实例化对象是关键。当我们只需要实例化它们时,我们不希望在结构中重复存储每棵树,因为多次实例化的树只需要作为BLAS(最大的数据结构)存储一次,并且只需要额外的TLAS引用。这是非常重要的,因为引用相同的BLAS不仅意味着更少的系统内存存储成本。但这也意味着在遍历中更好的缓存命中和数据重用,因为每个实例都指向BLAS中完全相同的数据。
那么,BLAS内部到底有什么,它是如何创建的?这对开发者来说是不透明的。这是每个供应商带来的秘密武器,API提供了不同性能特征中的TLAS/BLAS构建调用API。使用正确的模式是很重要的,如果可以的话使用离线工具也是移动设备的关键。
GPU和RAC
在我们使用RAC之前,其他各种各样的处理步骤需要在GPU内部进行,对于使用光线查询的混合渲染工作负载,可以总结如下:
应用程序通过发出API调用来渲染一个场景,这些API调用由我们的GPU驱动程序在内存中构建命令缓冲区和数据结构(纹理,着色器,缓冲区)来处理。驱动程序也会启动硬件,可能会将其从省电模式中唤醒,或者只是显示有更多工作等待处理。这个kick触发嵌入式固件处理器,该处理器将处理所有内部活动管理,并确保所有作业遵守优先级级别设置。
一般情况。首先会发生的是启动几何处理,这意味着绘制调用成为GPU内部的任务,每个任务被调度,并将旨在预留USC内部所需的资源进行处理。顶点/几何数据将被获取,当数据可用时,任务将被激活并执行着色程序。这将生成输出几何图形,然后命中一系列固定功能块,如剔除、裁剪、平铺和几何压缩,然后将中间参数数据写入内存。
这个参数数据是每个贴图的几何链表,它可能在每个贴图中都是可见的,因此使我们基于贴图的延迟渲染发挥它的魔力。所有这些工作都是处理的第一阶段,我们通常将其称为几何阶段或贴图加速器(TA)阶段,你可以在我们的性能分析工具中看到这个名称。此阶段与下一个呈现阶段同时运行。
基于贴图的延迟渲染架构中的3D处理从移除隐藏表面开始。所有的3D处理都是一个贴图一个贴图地完成的。这意味着位置数据是使用参数-数据链表结构获取的。执行贴图深度/模板测试中的所有几何数据,在标记缓冲区中生成可见性列表,该列表指示对每个像素可见的对象。一旦所有的几何图形都被处理,我们就有了每像素标记的可见列表,逻辑上它是一个不透明的对象(因为它后面的一切都将被隐藏/删除),以及不透明对象前面的几个alpha混合层。
然后渲染按正确的深度顺序开始,并按每个着色器进行排序,每个着色器代表一个任务。任务处理意味着首先调度器在USC内预留所需的资源进行处理,然后在任务激活和正确的着色程序指令执行之前预取任务和数据。如果任务中的着色程序包含光线查询调用,这就是RAC将被触发的地方。
对于带有光线查询的着色器,任务不仅会请求USC资源,也会请求RAC资源。当着色器使用USC/ RAY接口时(URI),将需要的光线信息发送到RAC时,执行实际的光线跟踪,并且这些信息存储在光线存储中。
和纹理操作类似,后续将所需的光线信息传输到在RAC中,USC将把任务置为取消调度的等待状态,这实际上意味着在RAC工作时,USC将开始处理其他任务/作业。你可以想象所有这些工作都是大规模并行的,因为我们将不只是处理一个片段/工作项或光线,而是在每个任务中并行处理多个线程(warp)。硬件中有许多这样正在执行的任务,以确保延迟分摊和高利用率。实际上,RAC将存储许多需要处理的光线。
在这一点上,每条光线都由光线参考计数器追踪,它会随着每次测试的需要而增加。计数器从一个开始,随着更多的盒子相交而增加,从而根据加速度结构触发更多的盒测试。光线处理是在相干组中进行的,这意味着包相干收集块将通过光线进行扫描,以建立相干遍历该结构的光线包。当包填满时将被执行,根据需要让光线通过盒子和/或三角形和/或原始测试器。这个处理通过专用加速结构缓存(ASC)运行,它确保数据也可以跨数据包重用。
ASC只是一个缓存级别。进一步的缓存将在整个GPU内存层次结构中发生,包括最大的SLC缓存级别,甚至可能是SoC级别的系统级缓存。当这个处理完成时,光线引用计数器(RRC)将随着测试的安排和完成而增加和减少,直到处理结束引用计数到零,为光线准备好。
在这一点上,光线或射线将被安排返回控制到USC进一步着色处理,这意味着USC任务将被恢复。然后USC可以通过URI从为所有处理保留资源的ray Store中读取生成的光线数据。在这个阶段,着色器的处理将继续正常,直到通过执行着色器/内核的混合,有或没有光线查询,完全绘制贴图。在这个过程中,其他固定的功能块,如纹理处理单元将被用来执行着色器。
重要的是要意识到在这一点上的执行是许多任务的混合:几何将处理,计算任务可能在飞行,RAC将追踪光线和发现命中/错过,而着色器核心是执行代码作为所有这些操作的一部分。2D和管家任务也可以在飞行中复制数据或生成贴图。对于如此多样化的作业范围,我们的目标是在所有处理单元中获得最大的效率,并确保任何处理任务和内存访问的延迟被处理其他独立任务完全隐藏。
一旦贴图完成,这将触发像素后端,它将把完成的贴图写入内存,可能会使用想象图像压缩(IMGIC) framebuffer压缩。
结论
在这篇文章中,我们已经带你通过Imagination的PowerVR Photon架构的旅程,并演示了它是如何从基础上进行设计来管理在移动电源预算中提供有效的光线追踪固有的问题。通过利用我们在低功耗和低带宽特性下创建IP的悠久历史,我们的客户可以确信我们的Photon支持GPU是为移动用户带来光线追踪革命性好处的理想选择。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|