前瞻:Intel 的 Xe3 GPU 架构展望
Chips and Cheese
Intel 的 Xe3 GPU 架构展望
通过软件变更来探究 Intel 下一代 GPU 架构可能带来的变化
Chester Lam 2025年3月19日
Intel 在高性能图形领域的探索在过去几年取得了令人瞩目的进展,并且该公司并没有放慢脚步。来自 Intel 的 Tom Peterson 已经表示 Xe3
硬件设计已经完成,软件工作正在进行中。部分软件工作在几个不同的开源仓库中可见,提供了对未来发展方向的预览。
GPU 组织架构:更大的 Render Slice?
现代 GPU 由分层细分级别构建,使其能够扩展以适应不同的性能、功耗和价格目标。在 Intel GPU 上运行的着色器程序可以通过读取 sr0
(state register 0) 架构寄存器的低位来检查其运行位置。
Xe3
上的 sr0
拓扑位具有不同的布局。Render Slice 中的 Xe
Core 使用 4 个比特进行枚举,高于前几代的 2 个比特。因此,Xe3
的拓扑位能够处理最多 16 个 Xe
Core 的 Render Slice。之前的 Xe
世代每个 Render Slice 只能有 4 个 Xe
Core,并且通常达到这个上限。B580 和 A770 都将 4 个 Xe
Core 放置在每个 Render Slice 中。
有足够的比特来描述某种配置并不意味着 Intel 会推出这么大的东西。Xe
确实在 Arc A770 中使用了其最大的 32 核,4096 通道的设置。然而,Xe2
在 Arc B580 中最多有 20 个内核和 2560 个通道。Xe2
的 sr0
格式理论上可以枚举 16 个 slice。如果每个 slice 都拥有最多的 4 个 Xe
Core,那么将构成一个拥有 64 个 Xe
Core 和 8192 个 FP32 通道的 GPU。显然,B580 远未达到这个规模。
可视化一个假想的巨型
Xe2
实现,它最大化了所有拓扑枚举位
Xe3
更进一步。如果将所有拓扑枚举位都最大化,将产生一个非常大的 256 个 Xe
Core 配置,拥有 32768 个 FP32 通道。这甚至比 Nvidia 的 RTX 5090 还要大,后者“仅”拥有 21760 个 FP32 通道。Intel 一直专注于中端市场,我怀疑我们会看到这么大的东西。
相反,我认为 Intel 希望在计算能力上具有更大的灵活性,使其能够独立于固定功能硬件(如 ROP 和光栅化器)进行扩展。AMD 和 Nvidia 的 SA 和 GPC 都封装了比四个核心更多的东西。例如,RX 6900XT 的 Shader Engine 各有 10 个 WGP。Nvidia 的 RTX 4090 在每个 GPC 中放置了 8 个 SM。随着游戏使用更复杂的着色器程序,GPU 随着时间的推移变得更加计算密集。Intel 似乎也在遵循同样的趋势。
XVE 变更
Xe
Vector Engine (XVE) 在 Intel GPU 上执行着色器程序。它们结合使用向量级和线程级并行来隐藏延迟。
更高的占用率,更高的并行性
Xe3
XVE 可以同时运行 10 个线程,高于前几代的 8 个。就像 CPU 上的 SMT 一样,跟踪多个线程有助于 XVE 使用线程级并行来隐藏延迟。如果一个线程停顿,XVE 可以希望找到一个未停顿的线程来发出指令。活动线程数也称为线程占用率。GPU 上的 100% 占用率类似于 Windows 任务管理器中的 100% 利用率。与 CPU SMT 实现不同,GPU 占用率可能会受到寄存器文件容量的限制。
之前的 Intel GPU 有两种寄存器分配模式。通常,每个线程获得 128 个 512 位寄存器,即每个线程 8 KB 的寄存器。“large GRF”模式为每个线程提供 256 个寄存器,但由于寄存器文件容量限制,将占用率降至 4 个线程。Xe3
继续为每个 XVE 使用 64 KB 的寄存器文件,但以 32 个条目的块灵活地分配寄存器。这使得 Xe3
的 XVE 可以在每个线程使用 96 个或更少寄存器的情况下,获得 10 个正在运行的线程。如果着色器程序需要大量寄存器,则占用率的下降比前几代更为平缓。
Nvidia 和 AMD GPU 甚至以更精细的粒度分配寄存器。例如,AMD 的 RDNA 2 以 16 个块为单位分配寄存器。但 Xe3
仍然比之前的 Intel 世代更灵活。通过此更改,只需要少量寄存器的简单着色器将通过更多的线程级并行性来获得更好的延迟容忍度。更复杂的着色器可以避免降级到“large GRF”模式。
Xe3
的 XVE 也有更多的记分牌令牌。与 AMD 和 Nvidia 一样,Intel 对长延迟指令(如内存访问)使用编译器辅助调度。长延迟指令可以设置一个记分牌条目,而依赖指令可以等待该条目被清除。无论占用率如何,每个 Xe3
线程都获得 32 个记分牌令牌,因此 XVE 总共有 320 个记分牌令牌。在 Xe2
上,如果 XVE 正在运行 8 个线程,则线程获得 16 个令牌;或者在具有 4 个线程的“large GRF”模式下,线程获得 32 个令牌。因此,Xe2
的 XVE 总共只有 128 个记分牌令牌。更多的令牌让线程可以拥有更多未完成的长延迟指令。这很可能转化为每个线程更多的内存级并行性。
“标量”寄存器 (s0)
Intel 的 GPU ISA 有一个向量寄存器文件 (GRF, 或 General Register File),用于存储着色器程序的大部分数据并为向量执行单元提供数据。它还有一个带有特殊寄存器的“Architecture Register File” (ARF)。其中一些可以存储数据,如累加器寄存器。但另一些则用于特殊目的。例如,如上所述,sr0
提供 GPU 拓扑信息,以及浮点异常状态和线程优先级。一个 32 位指令指针指向相对于指令基址的当前指令地址。
关于 Intel ARF 的注释,蓝色显示了从
Xe2
到 Xe3
的变化
Xe3
向 ARF 添加了一个“标量寄存器” (s0
)。s0
的布局与地址寄存器 (a0
) 非常相似,并用于 gather-send 指令。XVE 通过使用 send
指令,通过 Xe
Core 的消息结构发送消息来访问内存并与其他共享通信。Gather-send 似乎允许 Xe3
从寄存器文件中收集非连续值,并使用单个 send
指令发送它们。
除了添加标量寄存器外,Xe3
还扩展了线程依赖性寄存器 (TDR) 以处理 10 个线程。sr0
获得了一个额外的 32 位双字,原因不明。
指令变更
Xe3
支持 FCVT 的饱和修饰符,FCVT 是一种在不同浮点类型之间转换的指令(不是整数和浮点之间)。FCVT 是随着 Ponte Vecchio 引入的,但饱和修饰符可以简化从更高精度到更低精度浮点格式的转换。Xe3
还获得了 HF8(半精度 8 位)格式支持,与 Xe2
中已支持的 BF8 类型相比,提供了另一个 8 位浮点格式选项。
对于 XMX 单元,Xe3
获得了 xdpas
指令。sdpas
代表带有累积的稀疏 systolic 点积。具有大量零元素的矩阵称为稀疏矩阵。可以优化稀疏矩阵上的运算,因为任何乘以零的东西显然都是零。Nvidia 和 AMD GPU 都实现了稀疏优化,而 Intel 显然也在寻求做同样的事情。
光线追踪:子三角形不透明度剔除
子三角形不透明度剔除 (STOC) 细分 BVH 叶节点中的三角形,并将子三角形标记为透明、不透明或部分透明。主要动机是减少游戏使用纹理 alpha 通道来处理复杂几何体时浪费的 any-hit shader 工作。Intel 的论文将树叶作为示例,并指出程序员可能会使用低顶点数来减少“渲染、动画甚至模拟运行时间”。从 API 的角度来看,BVH 几何体只能完全透明或不透明,因此游戏将所有部分透明的原语标记为透明。每个光线相交都会触发一个 any-hit shader,该 shader 执行 alpha 测试。如果 alpha 测试表明光线与原语的透明部分相交,则着色器程序不会贡献样本,并且 any-hit shader 的启动基本上是浪费的。如果光线与完全透明或完全不透明的子三角形相交,STOC 位允许 any-hit shader 跳过 alpha 测试。
存储每个子三角形的不透明度信息需要 2 个比特,因此与为整个三角形使用单个不透明度比特相比,STOC 确实需要更多的存储空间。不过,这比将整个纹理打包到 BVH 中要实用得多。Intel 的论文发现,在处理半透明光线追踪阴影时,仅软件 STOC 实现与标准 alpha 测试相比,性能提高了 5.9-42.2%。
Elden Ring 的 BVH 使用更大的三角形来表示 Leyndell 中的树叶,如 Radeon Raytracing Analyzer 中所示。STOC 可能很适合这种情况
支持 STOC 的光线追踪硬件可以提供进一步的提升,尤其是使用 Intel 的光线追踪实现。Intel 的光线追踪加速方法与 DXR 1.0 标准紧密结合。光线追踪加速器 (RTA) 通过向 Xe
Core 的线程调度程序发送消息来自主处理遍历并启动命中/未命中着色器。如果光线与完全透明的子三角形相交,STOC 位可以允许 RTA 跳过着色器启动。对于不透明的子三角形,RTA 可以告诉着色器程序跳过 alpha 测试并提前终止光线。
说明 STOC 试图解决的问题。是的,我使用了矩形,但我希望使用与 Intel 论文相同的树叶纹理轮廓。而且 Intel 的叶节点无论如何都存储矩形(三角形对)
Xe3
将 STOC 位带入硬件光线追踪数据结构,具有两个级别的复杂性。基本实现保留 64B 叶节点,但创造性地找到空间来容纳 18 个额外的比特。Intel 的 QuadLeaf
结构表示合并的一对三角形。每个三角形获得 8 个 STOC 位,这意味着有四个子三角形。另外两个比特指示 any-hit shader 是否应在软件中进行 STOC 模拟,这可能允许程序员关闭硬件 STOC 以进行调试。此模式在代码中命名为“STOC1”。
为
Xe/Xe2
和 Xe3
草绘三角形(叶)节点格式。蓝色 = 与 STOC 相关,紫色 = 非 STOC 光线追踪数据结构更改
“STOC3” 结构通过存储指向 STOC 位的指针而不是将它们嵌入到 BVH 中来进一步推进。这使得 STOC 位可以使用的存储量更加灵活。STOC3 还指定了 STOC 位的递归级别,可能用于递归分割三角形。进一步细分将减少部分透明子三角形的数量,这需要 any-hit shader 进行 alpha 测试。存储 STOC3 的指针会将叶节点大小增加到 128 字节,从而增加了 BVH 内存占用。
可能的性能提升令人兴奋,但使用 STOC 需要游戏开发人员或游戏引擎的工作。Intel 建议 STOC 位可以在离线状态下作为游戏资源编译的一部分生成。艺术家将必须确定使用 STOC 是否会为特定场景提供性能提升。具有大量树叶的场景可能会从 STOC 中受益匪浅。连锁围栏可能是另一回事。STOC 不是 DirectX 或 Vulkan 标准的一部分,这可能是采用的另一个障碍。但是,仅软件 STOC 仍然可以提供好处。这可以鼓励开发人员尝试一下。如果他们确实实现了它,那么支持 STOC 的 Xe3
硬件将比仅软件解决方案获得更多收益。
总结
距离真正的 Xe3
产品上市还有一段时间。但软件变更表明 Xe3
是 Intel 图形架构向前迈出的又一个重要步骤。Xe2
是 Intel 进入独立显卡领域的一个坚实步骤,在名义上更小的 GPU 上提供了比 Xe
更好的性能。Xe3
再次调整了架构,可能具有类似的目标。更高的占用率和动态寄存器分配将使 Xe
Core 具有更高的延迟容忍度,从而提高利用率。这些变化也使 Intel 的图形架构更接近 AMD 和 Nvidia 的架构。
XVE 的变化表明 Intel 仍然在忙于发展其核心计算架构。相比之下,Nvidia 的 Streaming Multiprocessor 从 Ampere 到 Blackwell 没有看到重大变化。Nvidia 可能觉得 Ampere 的 SM 架构已经足够好,并将精力转向调整功能,同时扩大 GPU 的规模,以继续提供代际收益。与此同时,Intel 试图从每个 Xe
Core 中获得更多收益(并且 Xe2
使用更少的 Xe
Core 实现了比 Xe
更高的性能)。
与 Nvidia 类似,Intel 正在大力推动功能方面的发展,并且显然已经投入了研究。GPU 通常会尽量避免进行浪费的工作。正如光栅化管道使用早期深度测试来避免无用的像素着色器调用一样,STOC 避免生成无用的 any-hit shader。现在判断 STOC 或其他 Xe3
功能会产生什么样的影响还为时过早。但是,任何怀疑 Intel 致力于推进其 GPU 架构的人都应该认真研究 Mesa 和 Intel Graphics Compiler 的更改。有很多事情正在发生,我期待在 Xe3
准备就绪时看到它。