WebGPU(Chrome 134)中的新变化

François Beaufort
François Beaufort

发布时间:2025 年 2 月 26 日

使用子群组改进机器学习工作负载

经过一年的开发和试用,支持 SIMD 级并行的子组 WebGPU 功能现已推出。它允许工作组中的线程进行通信和执行集体数学运算(例如计算数字的总和),并提供一种高效的跨线程数据共享方法。请参阅原始提案chromestatus 条目

仅供参考,在原始试用期间,在某些设备上针对矩阵-矢量乘法着色器对子群组进行基准测试时,Google Meet 的速度提高了 2.3-2.9 倍。

GPUAdapter 中提供 "subgroups" 功能时,请请求具有此功能的 GPUDevice,以便在 WGSL 中获得子组支持。检查 subgroupMinSizesubgroupMaxSize 适配器信息值会很有帮助,例如,如果您有一个硬编码的算法需要特定大小的子群组。

您还需要使用 enable subgroups; 在 WGSL 代码中明确启用此扩展,才能在计算和片段着色器阶段访问以下内置值:

  • subgroup_invocation_id:子组中线程索引的内置值。

  • subgroup_size:用于访问子群组大小的内置值。

众多子群组内置函数(例如 subgroupAdd()subgroupBallot()subgroupBroadcast()subgroupShuffle())可在子群组内的调用之间实现高效的通信和计算。这些子组操作被归类为单指令多线程 (SIMT) 操作。此外,四元组内置函数可对调用的四元组进行运算,从而促进四元组内的数据通信。

当您请求同时包含 "shader-f16""subgroups" 地图项的 GPUDevice 时,可以将 f16 值与子组搭配使用。

以下示例是探索子组的好起点:它展示了一个着色器,该着色器使用 subgroupExclusiveMul() 内置函数计算阶乘,而无需读取或写入内存来传达中间结果。

移除了对可作为可混合类型的浮点可过滤纹理类型的支持

现在,"float32-blendable" 功能支持 32 位浮点纹理混合,因此移除了对浮点可过滤纹理类型作为可混合的纹理的错误支持。请参阅问题 364987733

Dawn 更新

Dawn 现在需要 macOS 11 和 iOS 14,并且仅支持 Metal 2.3 及更高版本。请参阅问题 381117827

wgpu::Instance 的新 GetWGSLLanguageFeatures() 方法现已取代 EnumerateWGSLLanguageFeatures()。请参阅问题 368672124

以下绑定类型具有 Undefined 值,并且其在绑定布局中的默认值已更改。请参阅问题 377820810

  • wgpu::BufferBindingType::Undefined 现为 Uniform
  • wgpu::SamplerBindingType::Undefined 现在为 Filtering
  • wgpu::TextureSampleType::Undefined 现为 Float
  • wgpu::StorageTextureAccess::Undefined 现已更名为 WriteOnly

本文仅介绍了一些主要亮点。查看详尽的提交内容列表

WebGPU 中的新变化

WebGPU 新变化系列中涵盖的所有内容的列表。

Chrome 134

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113