Intel Arc B580 上的光线追踪 (Raytracing) – By Chester Lam
Chips and Cheese
Intel 的 Arc B580 上的光线追踪 (Raytracing)
Chester Lam
2025 年 3 月 14 日
编辑:原文基于对 QuadLeaf 的误读,错误地认为 Intel 的 BVH 节点是 4 宽的。在检查 Intel 编译器代码后,QuadLeaf 实际上意味着两个具有共享边的合并三角形(四边形,而不是四个三角形的四边形)。
自从 Alchemist 推出以来,Intel 的独立 GPU 战略一直强调附加功能。从一开始,Intel 就大力投资于专用矩阵乘法单元、光线追踪 (Raytracing) 加速器和硬件视频编解码器。Battlemage 延续了这一趋势。光线追踪 (Raytracing) 值得关注,因为光线追踪 (Raytracing) 效果在越来越多的游戏中变得突出。
在这里,我将研究在启用了路径追踪 (path tracing) 的情况下,在 Intel 的 Arc B580 上渲染的 Cyberpunk 2077 帧。与往常一样,我专注于架构如何处理工作负载,而不是绝对性能。主流科技媒体已经出色地完成了对最终性能的讨论。
务必查看先前关于 Meteor Lake 的光线追踪 (Raytracing) 实现的文章,因为 Intel 在 Battlemage 上使用了相同的光线追踪 (Raytracing) 策略和数据结构。另外,请务必查看Battlemage 文章,其中涵盖了 B580 的架构和 Intel 的一些术语。
Cyberpunk 2077 路径追踪 (Path Tracing),光照着色器?
我以 1080P 分辨率捕获了一个 Cyberpunk 2077 帧,没有进行放大。帧速率有点低,为 12 FPS。来自 Intel 的 Graphics Performance Analyzer (GPA) 的占用时间线显示,光线追踪 (Raytracing) 调用占据了帧时间的大部分,尽管 CP2077 令人惊讶地仍然花费一些时间在小的栅格化调用上。
我将专注于持续时间最长的 RT 调用,它似乎处理了一些光照效果。来自该 DispatchRays 调用的输出显示了场景的非常嘈杂的表示。这类似于您在极低的采样计数下停止 Blender 渲染时获得的结果。大型物体可以识别,但较小的物体几乎不可见。
光线追踪 (Raytracing) 加速器
Battlemage 的光线追踪 (Raytracing) 加速器 (RTA) 在 Intel 努力提高光线追踪 (Raytracing) 性能方面发挥着核心作用。RTA 接收来自 XVE 的消息以启动光线遍历。然后,它处理遍历,而无需光线生成着色器的进一步干预,光线生成着色器在与 RTA 通信后不久终止。BVH 数据格式与硬件实现紧密相关。Intel 继续使用与上一代相同的盒子和三角形节点格式。盒子和三角形节点的大小仍然是 64B,因此可以整齐地放入缓存行中。
光线追踪 (Raytracing) 过程的大致工作方式。任何 L1 请求当然都可能错过
与 Alchemist 和 Meteor Lake 相比,Battlemage 的 RTA 将遍历管道计数从 2 增加到 3。这使盒子测试速率提高到每个周期三个节点,或 18 个盒子测试。三角形相交测试速率也增加了一倍。更多的 RTA 吞吐量可能会给内存子系统带来更大的压力,因此 RTA 的 BVH 缓存容量从 8 KB 增加了一倍到 16 KB。
在路径追踪 (path tracing) DispatchRays 调用期间,B580 每秒处理 4.679 亿条光线,即每个 Xe Core 每秒 2340 万条光线。每条光线平均需要 39.5 个遍历步骤。GPU 上的 RTA 每秒处理略高于 160 亿个 BVH 节点,这与遍历步骤数基本一致。Intel 使用带有重启轨迹的短堆栈遍历算法。与简单的深度优先搜索相比,这减少了堆栈大小,使 Intel 可以将堆栈保留在低延迟寄存器中。但是,它可能需要使用重启轨迹从顶部重新启动遍历。这样做意味着一些上层 BVH 节点会被同一条光线多次访问。这意味着更多的指针追踪访问,尽管看起来 RTA 可以避免在先前访问过的节点上重复相交测试。
我对光线追踪 (Raytracing) 单元工作方式的印象。每个遍历管道都保持光线状态,可能用于多条光线。前端将光线分配到遍历管道中
GPA 的 RT_QUAD_TEST_RAY_COUNT
和 RT_QUAD_LEAF_RAY_COUNT
指标表明光线-盒子和光线-三角形单元的利用率分别为 1.55% 和 1.04%。Intel 不受光线-三角形或光线-盒子吞吐量的限制。即使每个节点都需要相交测试,光线-盒子或光线-三角形单元的利用率也将低于 10%。Battlemage 可能会很好地使用之前的两个光线-盒子和一个三角形单元。我怀疑 Intel 发现复制遍历管道是一种让 RTA 保持更多工作在途中的简单方法,从而改善延迟隐藏。
“光线追踪 (Raytracing) 前端因遍历而停顿的时间百分比” GPA 中
RT_TRAVERSAL_STALL
指标的描述
Intel 从未记录他们所说的光线追踪 (Raytracing) 前端是什么意思。也许 RTA 由一个接受来自 XVE 的消息的前端和一个遍历 BVH 的遍历后端组成。前端的停顿可能意味着它已收到来自 XVE 的消息,但后端中没有一个遍历管道可以接受更多的工作。添加额外的遍历管道可能是并行处理更多光线的简单方法。当然,额外的管道也带有自己的光线-盒子单元。当然,可能还有其他工作负载可以从更高的相交测试吞吐量中受益。Intel 添加了一个额外的三角形测试单元,而这些单元不属于遍历管道。
BVH 缓存
BVH 遍历对延迟敏感。Intel 的短堆栈算法比简单的深度优先搜索需要更多的指针追踪步骤,使其对内存延迟更加敏感。但它也为通过缓存进行优化创造了空间。使用重启轨迹涉及重新访问不久前访问过的节点。缓存可以利用这种时间局部性,这可能就是 Intel 为 RTA 提供 BVH 缓存的原因。Xe Core 已经有一个 L1 数据缓存,但必须通过 Xe Core 的消息结构访问它。一个与 RTA 紧密集成的微小缓存更容易针对延迟进行优化。
Battlemage 的 16 KB BVH 缓存比前几代产品上的 8 KB BVH 缓存性能更好。除了降低延迟外,BVH 缓存还降低了 L1 缓存的压力。每秒访问 16.03G BVH 节点需要约 1.03 TB/s 的带宽。Battlemage 的 L1 可以轻松处理。但是最小化数据移动可以降低功耗。BVH 遍历也应该与 XVE 上的 miss/hit 着色器同时运行,并且减少这些 L1 缓存客户端之间的争用是一件好事。
调度着色器
由游戏提供的 Hit/miss 着色器程序处理遍历命中/未命中结果。RTA 通过将消息发送回 Xe Core 的线程调度程序来启动这些着色器程序,该调度程序在线程槽可用时将它们分配给 XVE。线程调度程序有两个用于非像素着色器工作的队列,以及一个像素着色器工作队列。光线追踪 (Raytracing) 工作仅使用一个非像素着色器队列(queue0)。
在 81.95% 的时间内,queue0 有排队的线程。它花费了 79.6% 的时间停顿等待 XVE 上的空闲线程槽。这表明 RTA 生成遍历结果的速度比着色器阵列处理结果的速度快。
大多数与光线追踪 (Raytracing) 相关的线程启动都是任何命中或最近命中着色器。未命中着色器的调用频率较低。总而言之,Arc B580 上的 RTA 每秒启动略超过 10 亿个线程。即使 Intel 的光线追踪 (Raytracing) 方法启动了大量的着色器程序,其中大部分都包含在 Xe Core 中,并且不会打扰更高级别的调度硬件。与 Meteor Lake 一样,Intel 的分层调度设置是使其 RTA 良好工作的关键。
向量执行
GPU 的常规着色器单元运行处理光线追踪 (Raytracing) 结果的命中/未命中着色器程序。在 DispatchRays 调用期间,B580 的 XVE 几乎所有线程槽都处于活动状态。如果您可以将 XVE 线程槽视为任务管理器中的逻辑核心(1280 个),您将看到 93.8% 的利用率。从 ALU0 利用率细分来看,大部分工作来自任何命中和最近命中着色器。未命中着色器调用并不罕见,但也许未命中着色器并没有做很多工作。
正如任务管理器中的高利用率并不能显示您的 CPU 核心在后台工作有多快一样,高占用率并不意味着高执行单元利用率。更多的线程只是为 GPU 提供了更多的线程级并行性来隐藏延迟,就像在 CPU 核心上加载更多的 SMT 线程一样。在这种工作负载中,即使是高占用率也不足以实现良好的硬件利用率。执行单元的使用率普遍较低,ALU0 和 ALU1 数学管道的繁忙时间不到 20%。
Intel 可以细分 XVE 无法执行任何指令的周期中的线程停顿原因。在同一周期内,多个线程可能因不同的原因而停顿,因此计数将加起来超过 100%。简要查看显示内存延迟是一个重要因素,因为记分板 ID 停顿占据了图表的顶部,即使不添加 SendWr 停顿也是如此。现代 CPU 和 GPU 通常花费大量时间让执行单元处于空闲状态,等待来自内存的数据。但是 Cyberpunk 2077 的路径追踪 (path tracing) 着色器似乎比平时更难。
执行延迟也会受到影响,这表明 Cyberpunk 2077 的光线追踪 (Raytracing) 着色器没有太多的指令级并行性。如果编译器无法在相关的指令之间放置足够的独立指令,线程将会停顿。GPU 通常可以通过在线程之间切换来隐藏执行延迟,并且此工作负载中的 XVE 确实具有大量的线程级并行性可以使用。但这还不够,因此可能存在许多长延迟指令和长依赖链。
最后,线程经常在指令提取上停顿。指令缓存的命中率仅为 92.7%,因此某些着色器程序会发生 L1i 丢失。指令缓存带宽也可能是一个问题。如果我的计算正确,每个 Xe Core 的指令缓存每个周期处理 1.11 次命中,因此指令缓存有时必须每个周期处理多次访问。如果每次访问都是 64B 缓存行,则每个 Xe Core 消耗超过 200 GB/s 的指令带宽。Intel 的 Xe Core 设计似乎确实需要大量的指令带宽。每个 Xe Core 都有八个 XVE,每个 XVE 每个周期可以发出多个指令。馈送 ALU0 和 ALU1 需要 2 IPC,或跨 Xe Core 的 16 IPC。相比之下,AMD 的 RDNA 2 只需要来自指令缓存的 4 IPC 即可馈送其向量执行单元。
指令混合
已执行的着色器代码通常使用 32 位数据类型,其中一些 16 位类型起着次要作用。INT64 指令也会出现,可能用于地址计算。特殊功能单元(数学)的使用率很高,可能导致上面的 AluWr 停顿。
INT32 和 FP32 指令的紧密混合非常适合 XVE 的管道布局,因为这些指令类型在不同的端口上执行。但是,性能受到执行单元吞吐量和管道布局以外的因素的限制。
缓存和内存访问
Battlemage 的 Xe Core 中的缓存难以包含此路径追踪 (path tracing) 工作负载的内存访问。尽管将 L1 缓存容量从 192 KB 增加到 256 KB,但 Battlemage 的 L1 命中率仍然低于 60%。Intel 使用一个单独的缓存来处理纹理访问,该缓存似乎通过延迟测试具有 32 KB 的容量。纹理缓存命中率很差,低于 30%。
大量的访问会下降到 L2,Arc B580 的 18 MB L2 最终处理超过 1 TB/s 的流量。L2 命中率很好,超过 90%,因此 18 MB 的 L2 容量对于此工作负载来说是足够的。Arc B580 的 192 位 GDDR6 设置可以提供 456 GB/s 的带宽,此工作负载平均使用 334.27 GB/s。GPA 指示内存请求队列已满的时间不到 1%,因此 B580 的 GDDR6 子系统在带宽方面表现良好。奇怪的是,L2 丢失计数表明 L2 丢失带宽为 122.91 GB/s。有些东西正在消耗 VRAM 带宽而没有通过 L2。
简单看一下 Port Royal
3DMark 的 Port Royal 基准测试使用光线追踪 (Raytracing) 反射和阴影。它仍然使用栅格化来渲染场景的大部分,而不是像 Cyberpunk 2077 的路径追踪 (path tracing) 模式那样反过来。这使得 Port Royal 更好地代表了可以在中端卡上运行的光线追踪 (Raytracing) 工作负载。我正在查看一个似乎处理反射的 DispatchRays 调用。
Port Royal 中的光线需要更多的遍历步骤。更高的 BVH 缓存命中率有助于保持遍历快速,因此 RTA 能够维持与 Cyberpunk 2077 相似的每秒光线数。尽管如此,Port Royal 对 RTA 施加了更大的相对压力。RT 遍历停顿发生得更频繁,这表明 RTA 获得遍历工作的速度比生成结果的速度快。
与此同时,当遍历完成时,RTA 为着色器阵列生成的工作量更少。Port Royal 只有未命中和最近命中着色器,因此光线不会像通过透明对象那样启动多个任何命中着色器。Cyberpunk 2077 的路径追踪 (path tracing) 模式也启动了任何命中着色器,从而允许更复杂的效果,但也创造了更多的工作。在 Port Royal 中,Xe Core 线程调度程序很少有排队等待空闲 XVE 线程槽的工作。从 XVE 侧来看,占用率也较低。总之,这些指标表明 B580 的着色器阵列消耗遍历结果的速度也比 RTA 生成它们的速度快。
正如一个非常缓存友好的工作负载可以使用单个线程比两个 SMT 线程在具有大量缓存未命中的工作负载上获得更高的 IPC 一样,Port Royal 尽管平均活动线程较少,但仍享有更好的执行单元利用率。指令提取停顿几乎消失了。内存延迟始终是一个问题,但并不像那么严重。这会将一些停顿转移到执行延迟,但这是一件好事,因为数学运算通常比内存访问具有更低的延迟。
这在很大程度上归结为 Port Royal 更具缓存友好性。B580 的 L1 缓存能够包含更多的内存访问,从而导致更低的 L2 和 VRAM 流量。
总结
得益于吞吐量更高、缓存更好的增强型 RTA,Intel 的 Battlemage 架构在光线追踪 (Raytracing) 方面比其前身更强大。光线追踪 (Raytracing) 涉及的不仅仅是 BVH 遍历,因此 Intel 改进的着色器阵列也提供了光线追踪 (Raytracing) 优势。这尤其适用于 Cyberpunk 2077 的路径追踪 (path tracing) 模式,该模式旨在做更多的事情,而不仅仅是简单的反射和阴影,从而给着色器阵列带来很大的压力。Port Royal 有限的光线追踪 (Raytracing) 效果提出了不同的挑战。简单的效果意味着 XVE 上的工作量更少,从而将焦点转移到 RTA 上。
光线追踪 (